[SQL] JOIN - inner, outer, union(all)

SHONG·2024년 3월 28일

SQL

목록 보기
7/15
post-thumbnail

정보처리기사 대비 sql 코테를 풀다 JOIN이 너무 헷갈려서 정리하기로 했다.

INNER 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 / RIGHT OUTER JOIN

어느 테이블을 왼쪽 / 오른쪽 기준으로 했는지에 따라 기준 테이블의 요소는 모두 출력하고
나머지 테이블에서 일치하는 결과만 출력한다.

LEFT JOIN

LEFT JOIN을 할 때는 왼쪽의 테이블로 SELECT문에 가장 많은 열을 가져오는 테이블을 적어줘야 한다.

SELECT a.column
FROM table1 a LEFT OUTER JOIN table2 b
ON a.column = b.column

RIGHT JOIN

위와 달리 오른쪽에 적는 테이블이 기준이 된다.

SELECT a.column
FROM table1 a RIGHT OUTER JOIN table2 b
ON a.column = b.column

3중 JOIN

  • 원하는 정보가 3개의 테이블로 나뉘어져 있다면 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

EXCLUSIVE LEFT JOIN

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 테이블의 레코드만 출력된다.

FULL OUTER JOIN = UNION/UNION ALL

MySQL에서는 FULL OUTER JOIN을 지원하지 않기 때문에 UNION을 쓴다.

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)

UNION ALL

문법

SELECT 컬럼명 FROM 테이블명
UNION ALL
SELECT 컬럼명 FROM 테이블명

중복을 포함해서 출력하고 싶을 땐 UNION ALL을 사용한다.

profile
핑계 대지 말자

0개의 댓글