티스토리 뷰

JOIN

  • SQL 조인은 두 개 이상의 테이블들을 공통필드를 이용하여 통합한다.
    • 스타 스키마로 구성된 테이블들로 분산되어 있던 정보를 통합하는데 사용한다.
  • JOIN의 결과로 양쪽의 필드를 모두 가진 새로운 테이블이 만들어진다.
  • 조인 방식에 따른 차이점
    • 어떤 레코드들이 선택되는가
    • 어떤 필드들이 채워지는가

JOIN 종류

  • INNER JOIN
    양쪽 테이블에서 매치가 되는 레코드들만 리턴한다. 양쪽 테이블의 필드가 모두 채워진 상태로 리턴된다.
    SELECT * FROM 테이블1
    JOIN 테이블2 ON 테이블1.컬럼1 = 테이블2.컬럼2

 

  • LEFT OUTER JOIN
    왼쪽 테이블의 모든 레코드들을 리턴한다. 오른쪽 테이블의 필드는 왼쪽 레코드와 매칭되는 경우에만 채워진 상태로 리턴된다. 매칭이 되지 않는 값들은 NULL로 채워진다.
    SELECT * FROM 테이블1
    LEFT JOIN 테이블2 ON 테이블1.컬럼1 = 테이블2.컬럼2;

 

  • RIGHT OUTER JOIN : 오른쪽 테이블의 모든 레코드들을 리턴한다. 왼쪽 테이블의 필드는 오른쪽 레코드와 매칭되는 경우에만 채워진 상태로 리턴된다. 매칭이 되지 않는 값들은 NULL로 채워진다.

 

  • FULL OUTER JOIN : 왼쪽 테이블과 오른쪽 테이블의 모든 레코드들을 리턴한다. 매칭되는 경우에만 양쪽 테이블들의 모든 필드들이 채워진 상태로 리턴된다. UNION은 UNION ALL에서 중복된 값들을 제거한다.
    SELECT * FROM 테이블1
    LEFT JOIN 테이블2 ON 테이블1.컬럼1 = 테이블2.컬럼2
    UNION -- 또는 UNION ALL
    SELECT * FROM 테이블1
    RIGHT JOIN 테이블2 ON 테이블1.컬럼1 = 테이블2.컬럼2​

 

  • CROSS JOIN : 왼쪽 테이블과 오른쪽 테이블의 모든 레코드들의 조합을 리턴한다.
    SELECT * FROM 테이블1 CROSS JOIN 테이블2;​

 

  • SELF JOIN : 동일한 테이블을 alias를 다르게 해서 자기 자신과 조인한다.
    SELECT * FROM EMPLOYEE emp
    JOIN EMPLOYEE mgr on emp.mgr_id = mgr.id;​

JOIN시 고려해야할 점

  • 중복 레코드가 없고, Primary Key의 유일성이 보장되는 지를 체크한다.
  • 조인하는 테이블들간의 관계를 명확하게 정의한다.
    • 1 : 1
      • 완전한 1 : 1 : session 과 session_channel
      • 한쪽이 부분집합이 되는 1 : 1
    • 1 : N, N : 1
      • 포함관계를 잘 생각해서 중복문제가 발생하지 않도록 한다.
    • N : M
      • 1 : 1 또는 1 : N으로 바꾸는 것이 가능하다면 변환하여 조인하는 것이 덜 위험하다.
  • 어느 테이블을 베이스로 잡을지(FROM에 사용할지) 결정해야 한다.
728x90
반응형
댓글
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함