본문 바로가기

DB/SQLD

[SQLD] SQL 활용 - Join

1️⃣ EQUI(등가) 조인(교집합)

1) EQUI(등가) 조인

 ∙ 조인은 여러 개의 릴레이션을 사용해서 새로운 릴레이션을 만드는 과정이다. 

 ∙ 조인의 가장 기본은 교집합을 만드는 것이다.

 ∙ 2개의 테이블 간에 일치하는 것을 조인한다.

 

EQUI 조인은 "="을 사용해서 2개의 테이블을 연결한다.

 

2) INNER JOIN

 ∙ EQUI 조인과 마찬가지로 ISO 표준 SQL로 INNER JOIN이 있다. INNER JOIN은 ON구를 사용해서 테이블을 연결한다.

 

 

 

3) INTERSECT 연산

 ∙ INTERSECT 연산은 2개의 테이블에서 교집합을 조회한다. (2개의 테이블에서 공통된 값을 조회한다.)

 

 

 

 

2️⃣ Non-EQUI(비등가) 조인

 ∙ Non_EQUI는 2개의 테이블 간에 조인하는 경우 "="을 사용하지 않고 ">", "<", ">=", "<=" 등을 사용한다.

 ∙ Non-EQUI 조인은 정확하게 일치하지 않는 것을 조인하는 것이다.

 

3️⃣ OUTER JOIN

 ∙ Outer Join은 2개의 테이블 간에 교집합(EQUI Join)을 조회하고 한쪽 테이블에만 있는 데이터도 포함시켜서 조회한다.

 ∙ 왼쪽 테이블에만 있는 행도 포함하면 LEFT OUTER JOIN, 오른쪽 테이브르이 행만 포함시키면 RIGHT OUTER JOIN 이라고 한다. 

 ∙ FULL OUTER JOIN은 LEFT OUTER JOIN과 RIGHT OUTER JOIN 모두를 하는 것이다.

 ∙ Oracle DB에서는 OUTER JOIN을 할 때 "(+)" 기호를 사용해서 할 수 있다.

 

4️⃣ CROSS JOIN

 ∙ CROSS JOIN은 조인 조건구 없이 2개의 테이블을 하나로 조인한다.

 ∙ 조인구가 없기 때문에 카테시안 곱이 발생한다.

 ∙ 예를 들어, 행이 14개 있는 테이블과 행이 4개 있는 테이블을 조인하면 56개의 행이 조회된다.

 ∙ CROSS JOIN은 FROM 절에 "CROSS JOIN"구를 사용하면 된다.

 

5️⃣ UNION을 사용한 합집합 구현

1) UNION

 ∙ UNION 연산은 2개의 테이블을 하나로 만드는 연산이다.(즉, 2개의 테이블을 하나로 합치는 것이다. )

 ∙ 주의사항은 2개의 테이블의 칼럼 수, 칼럼의 데이터 형식 모두가 일치해야 한다. 만약 2개의 테이블에 UNION 연산이 사용될 때 칼럼수 혹은 데이터 형식이 다르면 오류가 발생한다.

 ∙ UNION 연산은 2개의 테이블을 하나로 합치면서 중복된 데이터를 제거한다.

 ∙ UNION은 정렬(SORT) 과정을 발생시킨다.

2) UNION ALL

∙ UNION ALL은 2개의 테이블을 하나로 단순하게 합치는 것이다. 하지만 UNION처럼 중복을 제거하거나 정렬을 유발하지 않는다.

 

중복 발생!

 

6️⃣차집합을 만드는 MINUS

 ∙ MINUS 연산은 2개의 테이블에서 차집합을 조회한다. (즉, 먼저 쓴 SELECT문에는 있고 뒤에 쓰는 SELECT문에는 없는 집합을 조회하는 것이다.)

 ∙ MS-SQL에서는 MINUS와 동일한 연산이 EXCEPT이다.

 

'DB > SQLD' 카테고리의 다른 글

[SQLD] SQL 활용 - Table Partition  (0) 2020.03.21
[SQLD] SQL 활용 - Window Function  (0) 2020.03.12
[SQLD] SQL 활용 - Group Function  (0) 2020.03.12
[SQLD] SQL 활용 - Subquery  (0) 2020.03.11
[SQLD] SQL 활용 - Connect by(계층형 조회)  (0) 2020.03.11