정보처리기사 대비 sql 코테를 풀다 JOIN이 너무 헷갈려서 정리하기로 했다.
조인하는 테이블의
ON절 조건이 일치하는 결과만 출력한다. (A∩B)
SELECT a.column
FROM table1 AS a INNER JOIN table2 AS b -- 그냥 join으로 써도 된다
ON a.column = b.column
-- 함축 구문
SELECT a.column
FROM table1 a, table2 b
WHERE a.column = b.column
어느 테이블을 왼쪽 / 오른쪽 기준으로 했는지에 따라 기준 테이블의 요소는 모두 출력하고
나머지 테이블에서 일치하는 결과만 출력한다.
LEFT JOIN을 할 때는 왼쪽의 테이블로 SELECT문에 가장 많은 열을 가져오는 테이블을 적어줘야 한다.
SELECT a.column
FROM table1 a LEFT OUTER JOIN table2 b
ON a.column = b.column
위와 달리 오른쪽에 적는 테이블이 기준이 된다.
SELECT a.column
FROM table1 a RIGHT OUTER JOIN table2 b
ON a.column = b.column
OUTER JOIN을 연속으로 사용해준다.LEFT JOIN으로 했다면 그 다음에는 INNER JOIN이나 다른 조인을 사용할 수 없다.SELECT a.column
FROM table1 a
LEFT OUTER JOIN table2 b
ON a.column = b.column
LEFT OUTER JOIN table3 c
ON b.column = c.column
LEFT JOIN을 할 때 기준이 되는 왼쪽테이블에서 공통되는 레코드를 없앨 수 있다.
SELECT a.column
FROM table1 a LEFT OUTER JOIN table2 b
ON a.column = b.column
WHERE b.column IS NULL
-- 조인된 b 테이블 colunm의 값이 NULL일 경우에만 출력
-- 공통되는 경우 NULL이 아니기 때문에 a 테이블의 레코드만 출력된다.
MySQL에서는
FULL OUTER JOIN을 지원하지 않기 때문에UNION을 쓴다.
문법
SELECT 컬럼명 FROM 테이블명
UNION
SELECT 컬럼명 FROM 테이블명
UNION은 여러개의 SELECT문의 결과를 하나의 테이블로 표현해준다.(SELECT * FROM table1 a LEFT JOIN table2 b ON a.column = b.column)
UNION
(SELECT * FROM table1 a RIGHT JOIN table2 b ON a.column = b.column)
문법
SELECT 컬럼명 FROM 테이블명
UNION ALL
SELECT 컬럼명 FROM 테이블명
중복을 포함해서 출력하고 싶을 땐 UNION ALL을 사용한다.