카테고리 없음

[SQL] 조인(JOIN)

왕초보코딩러 2024. 2. 5. 21:22
728x90

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 조건];

 

 

 

https://hongong.hanbit.co.kr/sql-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-joininner-outer-cross-self-join/

 

SQL 기본 문법: JOIN(INNER, OUTER, CROSS, SELF JOIN)

조인은 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 말한다. INNER JOIN(내부 조인)은 두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 한다.OUTER JOIN(외부

hongong.hanbit.co.kr

 

 


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

 

[SQL] SET연산 UNION, INTERSECT, EXCEPT, MINUS

일단 사전 뜻 부터   UNION : 통합 INTERSECT : 교차하다 EXCEPT : 제외하다 M...

blog.naver.com