ORACLE-JOIN関数

4462 ワード

JOIN
  • 必要なコラム情報が1つのテーブルに提供されない場合は、関連するテーブルロジックを組み合わせて、必要なコラム情報を参照します.
    [形式]
    SELECTコラム名1、コラム名2...
    FROM表名1,表名2...
    WHERE JOIN条件その他の条件...

    -異なるテーブルの値を同時に使用します.

    -cross-productを最初に試します(可能な限りの数をリストします).
    重複する値を見つけ、その値を基準としてJOIN
    
      1  select ename, emp.deptno, dept.deptno, dname
      2  FROM emp, dept
      3  WHERE emp.deptno=dept.deptno
      4* ORDER BY ename ASC

    複数のテーブルにデータを格納する理由


    部門情報が変更された場合、12000行の情報はすべて変更する必要があります.そのため、より効率的に管理するために、表を割り当てる必要があります.
    分離するには4つのrowしか必要ありませんが、分離しなければ12000個のrowにdname、loc情報が書かれています.
    ->異なる性質の情報は複数のテーブルに分布するため,分散した情報をjoinとして抽出する技術が必要である.

    ANSI JOIN:可読性向上用


    INNERJOINテーブル名ON接続条件
    whereセクションに結合条件を追加すると、可読性が低下し、データが大きいほど複雑になります.
    ->ANSI JOINを使用して、WHERE節に条件を満たす節のみを含めます!

    JOINメソッド
    1.whereセクションの使用
    2. ANSI JOIN (INNER JOIN)
    3.ANSI JOINですが、JOIN標準のコラム名として同時にUSINGに分類します

    SELF JOIN:参照するコラムが同じ表にある場合:


    同じテーブルが2つあるのを想像してJOIN!!!!

      1  select e1.ename, e1.mgr, e2.empno, e2.ename
      2  from emp e1, emp e2
      3  where e1.mgr=e2.empno
      4* order by e1.mgr ASC
      1  select e1.ename, e1.mgr, e2.empno, e2.ename
      2  from emp e1
      3* INNER JOIN emp e2 ON e1.mgr=e2.empno
    ------>ここでは使用できません(結合条件のコラム名が異なるため)
    ENAME MGR EMPNO ENAME
    FORD 7566 7566 JONES
    TURNER 7698 7698 BLAKE
    MARTIN 7698 7698 BLAKE
    WARD 7698 7698 BLAKE
    JAMES 7698 7698 BLAKE
    ALLEN 7698 7698 BLAKE
    MILLER 7782 7782 CLARK
    CLARK 7839 7839 KING
    BLAKE 7839 7839 KING
    JONES 7839 7839 KING
    SMITH 7902 7902 FORD
    11行を選択しました.
    (king mgrがnullであることを示さない)

    OUTER JOIN:一つのデータが他のデータが存在しない時に全てのデータを抽出する。


    ex)emp表に部門番号40がない場合、dept表に部門番号40がある場合
    *方法は2つあります
    1)WHEREセクションを欠落したテーブルに接続する+
    2)RIGHT OUTER JOINコラム名称ON署名条件

    empテーブルの値が空の場合、40回出力します(右側のテーブルが強調表示され、左側にrowを追加する必要があります)

    ----->左側(+)
    1 SELECT empno, dept.deptno, dname
    2 FROM emp, dept
    3* WHERE emp.deptno(+)=dept.deptno

    プラスはrowが欠けているところに貼ってあります!!!(他の空の行を作成する必要があります.)
    右側の突出をansijoinで表します
    RIGHT OUTER(右側突出)
      1  SELECT empno, dept.deptno, dname
      2  FROM emp
      3* RIGHT OUTER JOIN dept ON emp.deptno=dept.deptno
    USINGフェスティバルを使うと
      1  SELECT empno, deptno, dname
      2  FROM emp
      3* RIGHT OUTER JOIN dept USING(deptno)
    *USING節:識別子を指定しない!!!
    2つのテーブルに重複するバーがある場合は、識別子を使用します.
    SELF JOINは括弧にサインするコラムを書きます!!
    エラーの例)
    SQL> select e.deptno, d.dname, e.ename, e.sal
      2  from emp e
      3  inner join dept d using(deptno);
    select e.deptno, d.dname, e.ename, e.sal
           *
    1행에 오류:
    ORA-25154: USING 절의 열 부분은 식별자를 가질 수 없음
    例)
    SQL> select deptno, dname, ename, sal
      2  from emp
      3  inner join dept using(deptno);
    3つのテーブルを結合する方法
  • WHEREセクションの使用-接続
  • との接続
    SQL> select ename, dname, grade
      2  from emp, dept, salgrade
      3  where emp.deptno=dept.deptno 
         AND sal between losal and hisal;
  • INNER JOIN-INNER JOINを2回使用すると
  • を得ることができる.
    SQL> select ename, dname, grade
      2  from emp
      3  inner join dept using(deptno)
      4  inner join salgrade on sal between losal and hisal;