内部結合/外部結合


  • サイン

  • 結合は関係型データベース(RDBMS)の主な演算の1つであり、複数のテーブルに分布するデータをテーブル間の関係を利用して相互参照する演算である.
    すなわち、必要なデータを内部または外部から抽出することができる.
    また、2つのテーブルを使用する場合は、サブクエリではなく結合条件が必要とされます.
    結合の種類
  • 内部連結
  • カタルシア・ジョーン
  • 外部連結
  • 署名は大きく内部、カタ西安、外部署名に分けられます.
    そして具体的な形態によって一般結合,ANSI結合に分けられる.
  • ANSI署名:米国標準委員会が制定した(89年以内)署名ファイルフォーマット
  • カタシア・ジョーン
    述べる前に、ここではカタシア・ジョーンを説明しません.
    まず原因を見てみましょう.カタシア・ジョーンはすべての状況を考えているからです.
    すべての状況を考慮すると、実際のテーブルのロー数よりも多くのローが生成されます.
    10行のAテーブルと/行300行のBテーブルを結合すると、2つのテーブルの関係で可能な行数10*300=3000になります.
    私が欲しい行を確認するためにサインしましたが、3000のデータの中で私が欲しい情報を見つけるのは難しいです.
    したがって、必要でない限り、結合条件は使用されません.したがって、ここでは説明を省略する.
    1.内部結合

    最も一般的な結合形式で、最も簡単で、最も簡単です.
    2つのテーブルに共通するカラムの値が一致するローを接続することで、結果の結合を作成します.
    結合するには、2つ以上のテーブルが必要です.
    また、複数のテーブルを使用しているので、別名を使用すると便利です.
    一般結合の使用例)
           SELECT A.EMPLOYEE_ID AS 사원번호,
                   A.EMP_NAME AS 사원명,
                   B.DEPARTMENT_NAME AS 부서명,
                   A.HIRE_DATE AS 입사일
              FROM HR.EMP A, HR.DEPT B
             WHERE A.DEPARTMENT_ID = B.DEPARTMENT_ID AND EXTRACT(YEAR FROMA.HIRE_DATE) >= 2008
    結合条件と一般条件の技術的順序はQueryの実行とは無関係である.
    ANSI結合の使用例)
            SELECT A.EMPLOYEE_ID AS 사원번호,
                   A.EMP_NAME AS 사원명,
                   B.DEPARTMENT_NAME AS 부서명,
                   A.HIRE_DATE AS 입사일
              FROM HR.EMP A
        INNER JOIN HR.DEPT B ON(A.DEPARTMENT_ID=B.DEPARTMENT_ID
                   AND EXTRACT(YEAR FROM A.HIRE_DATE) >= 2008);
    一般連結とは異なり、INNER JOIN,ON後の連結条件を説明する
    ANDの後ろに一般的な条件が書かれているのが見えます.
    2.外部結合

    外部結合データ型がないテーブルにNULL行を追加し、結合演算を実行します.
    これは、相互テーブル間の一致値で接続された内部結合とは異なり、あるテーブルに共通のカラム値がなくても、クエリ結果にこれらのROWが含まれ、結合条件では、ROWが不足しているカラム名の後に(+)が使用されることを意味する.
    外部署名の注意事項
    (+)を
  • テーブル自体に貼り付けることはできません.この場合は、自己結合を使用してください.
  • 外部結合はサブクエリと同時に使用できません.
  • (+)は1つのテーブルしか指定できません.
  • がないローはNULLに置き換えられるため、COUNT(*)では実際のローよりも多くのローが表示される場合があります.
  • 一般結合の使用例)
            SELECT A.LPROD_GU AS 분류코드,
                   A.LPROD_NM AS 분류명,
                   COUNT(PROD_ID) AS "상품의 수"
              FROM LPROD A,PROD B
             WHERE A.LPROD_GU = B.PROD_LGU(+)
    ANSI結合の使用例)
            SELECT A.LPROD_GU AS 분류코드,
                   A.LPROD_NM AS 분류명,
                   COUNT(PROD_ID) AS "상품의 수"    
              FROM LPROD A
              LEFT OUTER JOIN PROD B ON(A.LPROD_GU = B.PROD_LGU)
          GROUP BY A.LPROD_GU, A.LPROD_NM;
    ANSI結合は(+)を記録するのではなく、少ないテーブル順で方向を記録する.
  • FULL->両方にデータがない場合
    :    FULL OUTER JOIN
  • LEFT->FROMセクションのテーブルは、JOINセクションのテーブルのデータよりも多く
    :    LEFT OUTER JOIN
  • JOINセクションにおけるテーブルのデータは、
  • RIGHT->FROMセクションにおけるテーブルのデータよりも多い
    :    RIGHT OUTER JOIN
  • 番外SELF結合
    1つのテーブルに2つ以上の別名を追加することで、独自のテーブル間に結合を作成します.
  • は違うテーブルのようにサインします.
    つまり、自分と自分を結びつけた
  • .
    主に自分の机が特殊な場合に使う.
    SELF結合の使用例)
            SELECT C.EMPLOYEE_ID AS 사원번호,
                   C.EMP_NAME AS 사원명,
                   C.DEPARTMENT_ID AS 부서번호,
                   B.DEPARTMENT_NAME AS 부서명,
                   C.SALARY AS 급여
              FROM HR.EMP A, HR.DEPT B, HR.EMP C
             WHERE A.EMPLOYEE_ID = 120--일반조건
               AND A.SALARY <= C.SALARY--조인 조건
               AND C.DEPARTMENT_ID = B.DEPARTMENT_ID--조인조건
          ORDER BY 3, 5 DESC;
    
    별칭 A 와 C 는 같은 테이블이다.
    
    즉, A 테이블로 120번 사원을 조인하고 -> B부서와 같은 사람들과 전체 사원 중 같거나 더 많은 급여를 받는 사원을 찾는 Query이다.
    <hr>