# 조인의 종류

# 조인

정의

조인이란 하나의 테이블이 아닌 두개 이상의 테이블을 묶어서 하나의 결과물을 만드는 것을 말합니다.

  • MySQL에서는 JOIN 이라는 쿼리로, MongoDB에서는 lookup 이라는 쿼리로 이를 처리할 수 있습니다.
  • MongoDB의 lookup 연산은 되도록 사용하지 말아야 하는데, MongoDB는 조인 연산에 대해 관계형 데이터베이스보다 성능이 떨어집니다.
  • 따라서 여러 테이블을 조인하는 작업이 많을 경우 MongoDB보다는 관계형 데이터베이스를 써야합니다.

image

# 내부조인 INNER JOIN

정의

왼쪽 테이블과 오른쪽 테이블의 두행이 모두 일치하는 행이 있는 부분만 표기합니다.

  • 내부 조인은 두 테이블 간 교집합을 나타냅니다.
  • ON 절과 함께 사용되며, ON의 조건을 만족하는 데이터만 가져옵니다.
  • 표준 SQL과는 달리 MySQL에서는 JOIN, INNER JOIN, CROSS JOIN이 모두 같은 의미로 사용됩니다.

명시적인 내부 조인



 
 

SELECT *
FROM A_TABLE
INNER JOIN B_TABLE
ON 조건

암시적인 내부 조인


 
 

SELECT *
FROM A_TABLE, B_TABLE
WHERE A_TABLE.id = B_TABLE.id;

# 왼쪽 조인 LEFT OUTER JOIN

정의

왼쪽 테이블의 모든 행이 결과 테이블에 표기됩니다.

  • 만약 오른쪽 테이블에 일치하는 항목이 없으면 해당 값은 null 값이 됩니다.


 
 


SELECT *
FROM A_TABLE
LEFT JOIN B_TABLE
ON 조건
WHERE 조건

# 오른쪽 조인 RIGHT OUTER JOIN

정의

오른쪽 테이블의 모든 행이결과 테이블에 표기됩니다.

  • 만약 왼쪽 테이블에 일치하는 항목이 없으면 해당 값은 null 값이 됩니다.


 
 


SELECT *
FROM A_TABLE
RIGHT JOIN B_TABLE
ON 조건
WHERE 조건

# 합집합 조인 FULL OUTER JOIN

정의

두 개의 테이블을 기반으로 조인 조건에 만족하지 않는 행까지 모두 표기합니다.

  • 이때 일치하는 항목이 없으면 누락된 쪽에 null 값이 포함되어 출력됩니다.


 
 


SELECT *
FROM A_TABLE
FULL OUTER JOIN B_TABLE
ON 조건
WHERE 조건
  • MySQL에서는 FULL JOIN을 지원하지 않기에 다음과 같이 사용해야 합니다.


 
 
 


 
 

SELECT *
FROM A_TABLE
LEFT JOIN B_TABLE
ON 조건
UNION
SELECT *
FROM A_TABLE
RIGHT JOIN B_TABLE
ON 조건

# UNION

  • 중복되지 않은 유일한 값을 추출하는 경우 or 중복되는 모든 값까지 추출하는 경우에 쓰인다.

# UNION

  • 중복되지 않은 유일한 값을 추출


 

 



 

SELECT *
FROM A_TABLE
LEFT JOIN B_TABLE

UNION

SELECT *
FROM A_TABLE
RIGHT JOIN B_TABLE

# UNION ALL

  • 중복되는 모든 값 추출


 

 



 

SELECT *
FROM A_TABLE
LEFT JOIN B_TABLE

UNION ALL

SELECT *
FROM A_TABLE
RIGHT JOIN B_TABLE

# CROSS JOIN

정의

Cartesian Product(카디션 곱)이라고도 하며 조인되는 두 테이블에서 곱집합을 반환합니다.

image

  • m열을 가진 테이블과 n열을 가진 테이블이 교차 조인되면 m*n 개의 열을 생성합니다.


 

SELECT *
FROM A_TABLE 
CROSS JOIN B_TABLE;

# 참고자료