Join
title: 2025-11-19 (날짜) author: 강병호 (이름) date: 2025-11-19 (날짜) category: TIL/강병호/2025/11 (파일 경로 : TIL/{이름}/{연}/{월}) layout: post (자유) —
두 개 이상의 테이블을 조건으로 연결하여 하나의 결과를 생성하는 연산입니다. 주로 두 테이블에 공통으로 존재하는 컬럼을 기준으로 연결합니다.
SELECT *
FROM Orders o
JOIN Customers c ON o.customer_id = c.id;
위와 같이 Orders 테이블과 Custormers 테이블을 order의 customer_id 와 customer 의 id 를 연결하여 주문 + 그 주문의 고객 정보 를 함께 보고 싶은 경우에 사용한다.
-
Inner Join : 내부 조인이라 불리며 두 테이블을 연결 시 가장 많이 사용한다.
SELECT <열 목록> FROM <첫 번째 테이블> INNER JOIN <두 번째 테이블> ON <조인 조건> [WHERE 검색 조건]
- Outer Join : 외부 조인으로 한쪽에만 데이터가 있어도 결과가 나오는 것
- FULL : 왼쪽 외부 조인과 오른쪽 외부 조인의 합
- RIGHT : 오른쪽 테이블의 모든 값 출력
- LEFT : 왼쪽 테이블의 모든 값 출력
SELECT <열 목록> FROM <첫 번째 테이블(LEFT 테이블)> <LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)> ON <조인 조건> [WHERE 검색 조건]
-
Cross Join : 상호 조인으로 한 쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인 시키는 기능이다. 카티션 곱이라 불리기도 하며 상호 조인 결과의 전체 행 개수는 두 테이블의 각 행의 개수를 곱한 수 이다.
SELECT * FROM <첫 번째 테이블> CROSS JOIN <두 번째 테이블>
-
Self Join : 자체 조인으로 자기 자신과 조인한다. 본인 테이블로 조인을 수행하면 된다.
SELECT <열 목록> FROM <테이블> 별칭A INNER JOIN <테이블> 별칭B [WHERE 검색 조건]
-
SEMI JOIN : 왼쪽 테이블의 행 중 오른쪽 테이블에서 최소한 하나 이상 일치하는 행이 있을 때 왼쪽 테이블의 행 반환. 주로, 오른쪽 테이블에 존재하는 데이터인지 확인하는
SELECT <열 목록> FROM <테이블> 별칭A [WHERE EXISTS ( SELECT 1 FROM 테이블 별칭B WHERE 검색조건 )]; -
ANTI JOIN : SEMI와 반대로 일치하는 행이 전혀 없. 는 경우에 왼쪽 테이블의 행 반환
SELECT <열목록> FROM <테이블> [WHERE <열목록> NOT IN ( SELECT <열목록> FROM <테이블> )];