Skip to content

SQL:Join

조인이란 여러 테이이블에 흩어져 있는 정보 중 사용자가 필요한 정보만 가져와서 가상의 테이블처럼 만들어서 결과를 보여주는 것으로 2개의 테이블을 조합하여 하나의 열로 표현하는 것이다. (JOIN 은 가로 붙이기, UNION 은 세로 붙이기)

요약

다음과 같이 정리할 수 있다.

  • (INNER) JOIN: Table1과 Table2에서 값이 같은 행만 반환
  • LEFT (OUTER) JOIN: JOIN 왼쪽에 있는 Table1의 모든 결과를 가지고 온 후 Table2와 매칭하며, 매칭되는 데이터가 없을 경우 NULL값 삽입
  • RIGHT (OUTER) JOIN: JOIN 오른쪽에 있는 Table2의 모든 결과를 가지고 온 후 Table1와 매칭하며, 매칭되는 데이터가 없을 경우 NULL값 삽입
  • FULL (OUTER) JOIN: Table1과 Table2을 매칭시키고 데이터가 없는 경우 NULL처리
  • CROSS JOIN: Table1과 Table2의 모든 행을 JOIN한다. 결과는 두 테이블의 행의 개수를 곱한 것과 같음
  • NATURAL JOIN: 두개의 테이블에서 같은 이름을 가진 컬럼 간의 INNER 조인 집합 결과를 출력한다.

Sql_-_list_of_join.png

INNER JOIN

INNER JOIN은 키 값이 있는 테이블의 컬럼 값을 비교 후 조건에 맞는 값을 가져오는 것이다. 간단히 말하면 서로 연관된 내용만 검색하는 조인 방법이다.

CROSS JOIN

Cartesian Product(카디션 곱)이라고도 하며 조인되는 두 테이블에서 곱집합을 반환한다.

OUTER JOIN

Outer Join은 조인하는 여러테이블에서 한 쪽에는 데이터가 있고 한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽 테이블의 내용을 전부 출력하는 방법이다. 즉, 조인 조건에 만족하지 않아도 해당 행을 출력하고 싶을 때 사용할 수 있다.

  • LEFT OUTER JOIN - 조인문의 왼쪽에 있는 테이블의 모든 결과를 가져온 후 오른쪽 테이블의 데이터를 매칭하고, 매칭되는 데이터가 없는 경우 NULL을 표시한다.
  • RIGHT OUTER JOIN - 조인문의 오른쪽에 있는 테이블의 모든 결과를 가져온 후 왼쪽의 테이블의 데이터를 매칭하고, 매칭되는 데이터가 없는 경우 NULL을 표시한다.
  • FULL OUTER JOIN - LEFT OUTER JOIN과 RIGHT OUTER JOIN을 합친 것이다. 양쪽 모두 조건이 일치하지 않는 것들까지 모두 결합하여 출력한다.

Example

Left join example:

SELECT
    u.uid AS uid,
    pm.project_uid AS project_uid,
    gm.group_uid AS group_uid,
    CASE
        WHEN pm.permission_uid IS NOT NULL THEN pm.permission_uid
        ELSE gm.permission_uid
    END AS permission_uid
FROM
    recc_user u
    LEFT JOIN recc_project_member pm ON pm.user_uid=u.uid
    LEFT JOIN recc_project p ON p.uid=pm.project_uid 
    LEFT JOIN recc_group_member gm ON gm.user_uid=u.uid
ORDER BY u.uid;

ON vs WHERE

ON 은 JOIN 의 조건, WHERE 는 JOIN 후 결과에서 필터링할 조건.

SELF JOIN

테이블에서 자기자신을 조인을 시키는 것이다.

See also

Favorite site