티스토리 뷰

SQL

[Oracle SQL] 조인(JOIN)

Alledy 2019. 5. 17. 17:35

조인(Join)

  • 개념: 두 개 이상의 테이블 데이터를 가로로 연결한 것
  • 예시

    SELECT * FROM EMP, DEPT; -- 이 경우 emp테이블과 dept테이블의 모든 행 조합이 출력됨
    
    SELECT * FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO; -- 두 테이블에서 DEPTNO가 일치하는 부분만 출력해줌
    
    -- 별칭 설정
    SELECT * FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO;  
    SELECT E.EMPNO, E.ENAME, E.DEPTNO FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO; -- *을 사용하면 어떤 순서로 열이 출력될지 명확히 알 수 없으며 열의 수정 및 삭제 변화를 감지하기 어렵다
    

    주의할 점은 조인하는 테이블에 동일한 열이름이 있을 경우에, 그대로 쓰면 안되고 E.DEPTNO 이런 식으로 접근하고자 하는 테이블을 명시해주어야 한다.

     

  • 비등가조인

    SELECT * FROM EMP E, SALGRADE S WHERE E.SAL, BETWEEN S.LOSAL AND S.HISAL; 
    

    등가조인은 특정 열에 일치한 데이터를 기준으로 출력 행을 선정하는 방식이고, 이 외의 조인은 비등가조인이다.

     

  • NATURAL JOIN(SQL 99)

    -- 등가 조인이랑 같다. 문법만 다르다. 
    SELECT E.EMPNO, E.ENAME, DEPTNO FROM EMP E NATURAL JOIN DEPT D;
    

    단지 내츄럴 조인을 쓰면, 일치하는 열을 찾아 자동으로 그 기준으로 조인을 해준다는 점이다. 그래서 WHERE절을 쓰지 않으며, 열 이름도 테이블로 접근하지 않고 그냥 쓴다.

     

  • 자체 조인(SELF JOIN): 하나의 테이블 내에서 조인하기

    -- 카피
    SELECT * FROM EMP E, COPY_EMP C WHERE E.MGR = C.EMPNO;
    
    -- 자체 조인
    SELECT E1.EMPNO, E1.NAME, E1.MGR, E2.EMPNO AS MGR_EMPNO, E2.NAME AS MGR_EMPNO FROM EMP E1, EMP E2 WHERE E1.MGR = E2.EMPNO;
    

    같은 테이블을 사용하되 별칭만 다르게 사용한다. 첫번째 카피 방법은 똑같은 테이블 두개를 계속 유지해야 하므로 비효율적이다.

     

  • 외부조인(OUTER JOIN)

    두 테이블 간 조인 수행에서 조인 기준 열의 어느 한 쪽이 NULL 이어도 강제로 출력하는 방식을 말한다. 조인 방법은 (+)를 붙이는 것.

    SELECT E1.EMPNO, E1.NAME, E1.MGR, E2.EMPNO AS MGR_EMPNO, E2.NAME AS MGR_EMPNO FROM EMP E1, EMP E2 WHERE E1.MGR(+) = E2.EMPNO;
    

    (+)를 왼쪽에 붙여도 되고 오른쪽에 붙여도 되는데, 붙이는 쪽에 따라 결과가 다르게 출력된다. (+)를 붙이는 쪽이 null이어도 출력하는 쪽이다. 양쪽에 (+)를 붙이는 문법은 불가하며, full outer join을 하려고 하면 별도 문법을 사용해야 한다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함