ORACLE DB - Table Join 하기

공부하는치이카와·2024년 6월 13일

ORACLE DB

목록 보기
3/3
post-thumbnail

Table Join

  • INNER JOIN
  • LEFT OUTER JOIN
  • RIGHT OUTER JOIN
  • CROSS JOIN
  • FULL OUTER JOIN
  • INNER JOIN

    ANSI Join

    SELECT a.empno
         , a.ename
         , a.deptno
         , b.dname
      FROM emp a
     INNER JOIN dept b
        ON a.deptno = b.deptno
     WHERE a.job = 'MANAGER';

    Oracle Join

    SELECT a.empno
         , a.ename
         , a.deptno
         , b.dname
      FROM emp a
         , dept b
     WHERE a.job = 'MANAGER'
       AND a.deptno = b.deptno;
    
    SELECT A.NAME AS HOSPITAL_NAME   -- AS 는 COLUMN이름을 해당 이름으로 보기 (헷갈리지 않도록) 
        ,B.NAME AS ANIMAL_NAME
        ,C.SYMPTOM 
        ,C.CLINIC
        ,C.CLINICDATE
    FROM HOSPITAL A 			-- ~표기법
        ,ANIMAL B
        ,CLINIC C
    WHERE A.HOSPITALID = C.HOSPITALID    -- 중요! 테이블 조인 ( 정확한 데이터를 조회하기 위해 )
    AND B.ANIMALID = C.ANIMALID;

    LEFT OUTER JOIN

    ANSI Join

    SELECT a.empno
         , a.ename
         , a.deptno
         , b.dname
      FROM emp a
      LEFT OUTER JOIN dept b
        ON a.deptno = b.deptno
     WHERE a.job = 'MANAGER';

    위의 예제는 EMP 테이블과 DEPT 테이블을 아우터 조인(외부 조인)하여 DEPT 테이블의 DNAME(부서명)을 조회한 쿼리이다. 아우터 조인(OUTER JOIN)은 조인 테이블의 값이 존재하지 않아도 메인 테이블의 데이터가 조회된다. 조인 테이블의 값을 가져오지 못하면 NULL로 표시된다.

    (메인 테이블) LEFT OUTER JOIN (조인 테이블) 왼쪽 테이블이 메인 테이블이 된다.

    Oracle Join

    SELECT a.empno
         , a.ename
         , a.deptno
         , b.dname
      FROM emp a
         , dept b
     WHERE a.job = 'MANAGER'
       AND a.deptno = b.deptno(+);

    조인 칼럼에 (+)를 붙이면 해당 칼럼의 테이블이 조인 테이블이 된다.

    아우터 조인의 핵심은 메인 테이블의 데이터는 무조건 조회가 되고 조인 테이블은 참조 용도로만 사용된다.

    RIGHT OUTER JOIN

    ANSI Join

    SELECT a.empno
         , a.ename
         , a.deptno AS emp_deptno
         , b.deptno
         , b.dname
      FROM emp a
     RIGHT OUTER JOIN dept b
        ON a.deptno = b.deptno
     WHERE (a.job = 'MANAGER'
         OR a.job IS NULL);

    (조인 테이블) RIGHT OUTER OIN (메인 테이블)

    Oracle Join

    SELECT a.empno
         , a.ename
         , a.deptno
         , b.deptno
         , b.dname
      FROM emp a
         , dept b
     WHERE a.deptno(+) = b.deptno
       AND (a.job = 'MANAGER'
         OR a.job IS NULL)

    오라클 조인에서는 RIGHT OUTER JOIN이라는 용어는 사용 안 하지만, 조인 칼럼의 (+) 위치를 변경 함으로써 RIGHT OUTER JOIN과 비슷하게 만들 수 있다.

    CROSS JOIN

    ANSI Join

    SELECT a.empno
         , a.ename
         , b.deptno
         , b.dname
      FROM emp a
     CROSS JOIN dept b
     WHERE a.job = 'MANAGER'
     	and b.deptno IN (10, 20, 30);

    크로스 조인은 두 테이블의 모든 데이터를 서로 한 번씩 조인을 한다고 생각하면 된다.

    CROSS JOIN 절에 테이블 작성하고 메인 테이블과 조인 칼럼을 연결하지 않는다.

    Oracle Join

    SELECT a.empno
         , a.ename
         , b.deptno
         , b.dname
      FROM emp a
         , dept b
     WHERE a.job = 'MANAGER'
       AND b.deptno IN (10, 20, 30);

    FULL OUTER JOIN

    ANSI Join

    SELECT a.empno
         , a.ename
         , a.deptno
         , b.dname
      FROM emp a
      FULL OUTER JOIN dept b
        ON a.deptno = b.deptno


    두 개의 테이블을 조인하여 조인된 데이터는 조인된 상태로 조회되고, 조인 안된 데이터는 조인이 안된 상태로 조회된다. 조인되어도 조회되고 조인이 안되어도 모두 조회된다고 생각하면 된다.

    풀 아우터 조인은 ANSI JOIN에서만 사용 가능하고 Oracle Join에서는 사용할 수 없다. 자주 사용하는 조인 방법은 아니기 때문에 개념만 이해하고 있으면 좋을 듯하다.

    profile
    안녕! hello! おはよう!it勉強始めました。

    0개의 댓글