본문 바로가기

DEVELOPMENT/SQL

[SQL] INNER JOIN, OUTER JOIN

JOIN

 

JOIN은 두 개 이상의 테이블에서 데이터를 가져와서 연결하는 것을 의미한다. 이를 통해 테이블 간의 관계를 이해하고 복잡한 데이터를 쉽게 처리할 수 있다. 

JOIN을 사용하는 방법은 크게 두 가지로, INNER JOIN 과 OUTER JOIN이 있다.

INNER JOIN과 OUTER JOIN은 JOIN(조인)하는 대상 테이블 간에 일치하는 데이터를 가져오는 방식에서 차이가 있다.
INNER JOIN은 두 테이블 간에 일치하는 데이터만 가져온다. 즉, JOIN하려는 두 테이블에서 모두 데이터가 존재하는 경우에만 결과로 나타난다.
반면, OUTER JOIN은 JOIN하려는 두 테이블 중 하나에 데이터가 있어도 결과를 가져오는 것이다.

 

 

INNER JOIN(내부 조인)

 

INNER JOIN은 조인 중 가장 많이 사용된다. 따라서 보통 JOIN을 얘기할 때는 INNER JOIN을 말하는 것이다.
INNER JOIN은 두 개 이상의 테이블에서 공통된 값을 찾아서 연결하는 방식이다. 

 

*형식

SELECT <열 목록>
FROM <기준 테이블>
INNER JOIN <참조할 테이블>
ON <조인 조건>
[WHERE 검색조건];

 

*예시

SELECT *
FROM orders
INNER JOIN customers
ON orders.customer_id = customers.customer_id;

 

 

OUTER JOIN(외부 조인)

 

OUTER JOIN은 두 개 이상의 테이블에서 일치하지 않는 값을 포함하여 연결하는 방식이다. 

 

*형식

SELECT <열 목록>
FROM <첫 번째 테이블(LEFT)>
<LEFT | RIGHT | FULL> [OUTER] JOIN <두 번째 테이블(RIGHT)>
ON <조인 조건>
[WHERE 검색조건];

 

1. LEFT OUTER JOIN

왼쪽 테이블(LEFT)을 기준으로 오른쪽 테이블(RIGHT)을 연결하는 방식이다. 이를 통해 왼쪽 테이블에 있는 모든 데이터와 오른쪽 테이블에서 일치하는 데이터를 가져온다. 일치하지 않는 경우, 오른쪽 테이블의 데이터는 null 값으로 표시된다.

SELECT *
FROM orders
LEFT OUTER JOIN customers
ON orders.customer_id = customers.customer_id;

 

2. RIGHT OUTER JOIN

오른쪽 테이블(RIGHT)을 기준으로 왼쪽 테이블(LEFT)을 연결하는 방식이다. 이를 통해 오른쪽 테이블에 있는 모든 데이터와 왼쪽 테이블에서 일치하는 데이터를 가져온다. 일치하지 않는 경우, 왼쪽 테이블의 데이터는 null 값으로 표시된다.

SELECT *
FROM orders
RIGHT OUTER JOIN customers
ON orders.customer_id = customers.customer_id;

 

3. FULL OUTER JOIN

FULL OUTER JOIN은 LEFT OUTER JOIN과 RIGHT OUTER JOIN의 조합으로, 두 테이블 모두에서 일치하는 데이터와 일치하지 않는 데이터를 모두 가져온다. 이를 통해 두 테이블의 모든 데이터를 조합하여 결과를 반환한다. 일치하지 않는 경우, 빠진 데이터는 null 값으로 표시된다.

SELECT *
FROM orders
FULL OUTER JOIN customers
ON orders.customer_id = customers.customer_id;

 

 

테이블 결합 활용

 

*4개 테이블  LEFT OUTER JOIN

SELECT *
FROM employees AS A
LEFT OUTER JOIN departments AS B ON A.DEPARTMENT_ID = B.DEPARTMENT_ID
LEFT OUTER JOIN locations AS C ON B.LOCATION_ID = C.LOCATION_ID
LEFT OUTER JOIN countries AS D ON C.COUNTRY_ID = D.COUNTRY_ID
WHERE COUNTRY_NAME = 'United States of America';

 

 

'DEVELOPMENT > SQL' 카테고리의 다른 글

[SQL] 문자열 연산  (0) 2023.05.30
[SQL] 결과 행 제한  (0) 2023.05.30
[SQL] 패턴 매칭  (0) 2023.05.30
[SQL] 데이터베이스와 SQL  (0) 2023.05.30
[SQL] INSERT, SELECT, UPDATE, DELETE  (0) 2023.04.02