SQL:Join
조인이란 여러 테이이블에 흩어져 있는 정보 중 사용자가 필요한 정보만 가져와서 가상의 테이블처럼 만들어서 결과를 보여주는 것으로 2개의 테이블을 조합하여 하나의 열로 표현하는 것이다. (JOIN 은 가로 붙이기, UNION 은 세로 붙이기)
요약
- (PostgreSQL) 테이블 가로 결합(JOIN) (LEFT JOIN, RIGHT JOIN, FULL JOIN, CROSS JOIN)
- SQL JOIN - INNER JOIN / OUTER JOIN / LEFT JOIN / RIGHT JOIN / SELF JOIN
다음과 같이 정리할 수 있다.
- (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
테이블에서 자기자신을 조인을 시키는 것이다.