JOIN: 테이블 합치기
여러 번 조인 가능
1. 결합 연산: 테이블을 가로 방향으로 합친다
2. 집합 연산: 테이블을 세로 방향으로 합친다
1. 결합 연산: JOIN
1. EQUI JOIN, Non-EQUI JOIN
2. INNER JOIN
3. OUTER JOIN(LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN)
4. CROSS JOIN
< EQUI JOIN(등가 조인) >
두 테이블 간에 일치하는 것을 조인한다
SELECT *
FROM [테이블1], [테이블2]
WHERE [테이블1].[컬럼명] = [테이블2].[컬럼명]
join 조건을 WHERE절에 쓴다.
등호(=)을 사용
< Non-EQUI JOIN(비등가 조인) >
join 조건이 등호(=)가 아닌 부등호를 사용
FROM ON/USING 사용
ON 뒤에 join 조건을 쓴다
< INNER JOIN >
join 조건으로 둘 다 있는 것만 조인(교집합)
SELECT
FROM [테이블 이름1] INNER JOIN [테이블 이름2]
ON [join 조건];
ON [join 조건]말고
join 조건 컬럼 이름이 테이블 1과 2가 모두 같다면 USING()을 사용할 수 있다
#두 개가 같음
SELECT
FROM table1 INNER JOIN table2
ON table1.id = table2.id;
SELECT
FROM table1 INNER JOIN table2
USING(id)
< OUTER JOIN >
LEFT OUTER JOIN
왼쪽(테이블 이름1)을 기준으로 조인
SELECT
FROM [테이블 이름1] LEFT OUTER JOIN [테이블 이름2]
ON [join 조건];
RIGHT OUTER JOIN
오른쪽(테이블 이름2)를 기준으로 조인
SELECT
FROM [테이블 이름1] RIGHT OUTER JOIN [테이블 이름2]
ON [join 조건];
FULL OUTER JOIN
테이블 모두의 컬럼이 나타나게 조인
SELECT
FROM [테이블1] FULL OUTER JOIN [테이블2]
ON [join 조건];
테이블에도 AS 사용 가능
테이블 이름을 줄여 가독성 면에서 좋다
SELECT
FROM [테이블 이름1] AS t1 LEFT OUTER JOIN [테이블 이름2] AS t2
ON [join 조건];
별칭을 사용하면 다른 모든 절에서도 별칭으로 사용해줘야 한다
< CROSS JOIN >
테이블의 각 row들을 모든 경우로 조합
join 조건이 없다면 CROSS JOIN이 실행된다
SELECT
FROM [테이블1] CROSS JOIN [테이블2];
#아무것도 써주지 않으면 CROSS JOIN이 된다
SELECT *
FROM [테이블1], [테이블2];
+ < NATURAL JOIN >
같은 이름의 컬럼을 가지고 조인
(별도의 join 조건이 필요 없음)
SELECT
FROM [테이블1] NATURAL JOIN [테이블2];
+ < SELF JOIN >
자기 자신과 조인
SELECT
FROM [자기 테이블] AS 별칭 JOIN [자기 테이블] AS 별칭
ON [join 조건];
2. 집합 연산
컬럼 구조가 같은(테이블의 컬럼 수, 컬럼의 데이터 형식) 테이블에서만 사용이 가능하다
1. INTERSECT
2. UNION
3. MINUS
< INTERSECT - 교집합 >
SELECT * FROM [테이블 1]
INTERSECT
SELECT * FROM [테이블 2];
< UNION - 합집합(중복 제거, 정렬) >
SELECT * FROM [테이블 1]
UNION
SELECT * FROM [테이블 2];
< UNION ALL - 합집합(중복 포함, 정렬 X) >
SELECT * FROM [테이블 1]
UNION ALL
SELECT * FROM [테이블 2];
< MINUS 차집합 >
먼저 쓴 SELECT문에는 있고, 뒤에 쓴 SELECT문에는 없는 집합을 조회한다
#테이블1 - 테이블2
SELECT * FROM [테이블 1]
MINUS
SELECT * FROM [테이블 2];
#테이블2 - 테이블1
SELECT * FROM [테이블 2]
MINUS
SELECT * FROM [테이블 1];
MySQL에서는 INTERSECT와 MINUS 가 지원되지 않는다.
MS-SQL에서 MINUS와 동일한 연산이 EXCEPT이다.
MINUS와 EXCEPT의 차이
https://blog.naver.com/nitrogehne/150165162134