SQL: JOIN

김기현·2025년 6월 15일

Database

목록 보기
10/24

조인은 두 개 이상의 테이블을 서로 연결하여 의미 있는 결과를 얻기 위한 기술이다. 실무에서 거의 모든 복잡한 쿼리에서 사용된다.

JOIN

조인이란?

여러 개의 테이블에서 데이터를 연결하여, 공통된 컬럼을 기준으로 통합된 결과를 조회하는 기능이다.

예를 들어 users테이블과 orders테이블을 사용자 ID로 연결하여 사용자 정보 + 주문 정보를 함께 보고 싶을 때 사용한다

주요 조인 종류

종류설명기준
INNER JOIN공통된 값이 있는 행만 반환두 테이블에 모두 존재하는 값
LEFT JOIN (또는 LEFT OUTER)왼쪽 테이블의 모든 행 + 일치하면 오른쪽도왼쪽 기준
RIGHT JOIN (또는 RIGHT OUTER)오른쪽 테이블의 모든 행 + 일치하면 왼쪽도오른쪽 기준
FULL OUTER JOIN양쪽 모두 포함 (MySQL은 직접 지원 X)양쪽 모두
CROSS JOIN두 테이블의 모든 조합카르테시안 곱

예제

-- 사용자 테이블
CREATE TABLE users
(
    id       INT PRIMARY KEY,
    username VARCHAR(50)
);

-- 주문 테이블
CREATE TABLE orders
(
    id      INT PRIMARY KEY,
    user_id INT,
    product VARCHAR(100),
    FOREIGN KEY (user_id) REFERENCES users (id)
);

-- 샘플 데이터
INSERT INTO users
VALUES (1, 'kim'),
       (2, 'lee'),
       (3, 'park');

INSERT INTO orders
VALUES (101, 1, 'apple'),
       (102, 2, 'pineapple');

INNER JOIN

양쪽에 모두 존재하는 행만 반환한다.

SELECT users.username, orders.product
FROM users
         INNER JOIN orders ON users.id = orders.user_id;
usernameproduct
kimapple
leepineapple

park은 주문이 없기에 제외됨.

LEFT JOIN

왼쪽 테이블의 모든 행과 일치하는 오른쪽

SELECT users.username, orders.product
FROM users
         LEFT JOIN orders ON users.id = orders.user_id;
usernameproduct
kimapple
leepineapple
parkNULL

park도 포함되지만, 주문이 없기에 NULL.

RIGHT JOIN

오른쪽 테이블의 모든 행 + 일치하는 왼쪽

SELECT users.username, orders.product
FROM users
         RIGHT JOIN orders ON users.id = orders.user_id;
usernameproduct
kimapple
leepineapple

여기에서 orders에 없는 user_id가 있으므로 INNER JOIN과 결과가 같다.

FULL OUTER JOIN

MySQL은 FULL OUTER JOIN을 지원하지 않지먼, UNION으로 흉내낼 수 있다.

-- FULL OUTER JOIN 흉내내기
SELECT users.username, orders.product
FROM users
         LEFT JOIN orders ON users.id = orders.user_id

UNION

SELECT users.username, orders.product
FROM users
         RIGHT JOIN orders ON users.id = orders.user_id;

CROSS JOIN

두 테이블의 모든 조합(곱집합)

SELECT users.username, orders.product
FROM users
         CROSS JOIN orders;
usernameproduct
kimapple
kimpineapple
leeapple
leepineapple
parkapple
parkpineapple

실무에서는 거의 사용하지 않으며, 더미 데이터를 만드는 등 특수한 경우에서만 사용한다.

WHERE 절을 이용한 조인 (구식 방식)

SELECT u.username, o.product
FROM users u,
     orders o
WHERE u.id = o.user_id;
  • 내부적으로는 INNER JOIN과 같다.
  • 하지만 가독성이 떨어져서 권장되지 않는다.
profile
백엔드 개발자를 목표로 공부하는 대학생

0개의 댓글