C#,Delphi,Oracle,MSSQL 개발자블로그

[Oracle/기본]4. 다중 테이블로부터 데이터 디스플레이 본문

Programming/Oracle 공부

[Oracle/기본]4. 다중 테이블로부터 데이터 디스플레이

19760323 2017. 5. 22. 11:57

● JOIN

  

  • - 둘 이상의 테이블을 연결하여 데이터를 검색하는 방법 이다.
  • - 보통 둘 이상의 행들의 공통된 값 Primary KeyForeign Key 값을 사용하여 조인 한다.
  • - 두 개의 테이블을 SELECT문장 안에서 조인 하려면 적어도 하나의 컬럼이 그 두 테이블 사이에서 공유 되어야 한다.
  •  

    1. SELECT문을 작성할 때, 명확성을 위해서 그리고 데이터베이스 엑세스를 향상시키기 위해서 열 이름 앞에 테이블 명을 붙인다.

    2. 똑같은 열 이름이 하나 이상의 테이블에 있으면, 열 이름 앞에 테이블 명이 있어야 한다.

    3. n개의 테이블을 함께 조인하려면 최소 (n-1)개의 조인 조건문이 필요하다.

       이 규칙은 테이블이 연결된 primary key를 가진다면 적용될 수 없다.

     

    - Cartesian Product

      조인 조건문이 잘못되었거나 완전히 생략되었을 때 모든 행들의 조합인 Cartesian product가 발생한다.

      첫 번재 테이블의 모든 행은 두 번째 테이블의 모든 행에 조인된다.

      CROSS JOIN을 이용하면 Cartesian Product 값을 얻을 수 있다.

       ex.) 4행짜리 테이블과 14행짜리 테이블은 4 x 14 의 56행이 발생된다.

           

     SELECT  e.empno, e.ename, d.dname
          FROM  dept d CROSS JOIN emp e;

     

    ● JOIN의 유형

     

    1. Equi join (단순 조인, 내부 조인, 등가조인)

    - 가장 일반적으로 사용하는 Equality Condition(=)에 의한 조인이다

     

    2. Non-Equi Join

    - 테이블의 어떤 column도 Join할 테이블의 column에 일치하지 않을 때 사용한다.

    - '='(동등)이 아닌 다른 연산자를 이용한다.

    - 거의 사용하지 않는다.

     

    Ex.) EMP 테이블의 SAL이 SALGRADE테이블의 LOSAL과 HISAL 사이에 있을 때 검색.

         SELECT e.ename, e.sal, s.grade

          FROM emp e, salgrade s

         WHERE e.sal

      BETWEEN s.losal AND s.hisal;

     

    3. Self Join

    - Equi Join과 같으나 하나의 테이블에서 조인이 일어나는 것이 다르다.

    - 같은 테이블에 대해 두 개의 alias를 사용하여 FROM절에 두 개의 테이블을 사용하는 것 처럼 조인한다.

     

    SELECT e.ename, a.ename "Manager"
      FROM emp e, emp a
     WHERE e.empno = a.mgr;

     

    4. Outer Join

    - 조인 조건을 만족하지 않는 행들도 볼 수 있다.

    - 연산자는 (+)기호이며, 정보가 부족한 조인쪽에 위치한다. 이 연산자는 한 개 이상의 null행을 생성한다.

     

     

     

     

    Comments