MySQL에서 JOIN은 여러 테이블을 결합하여 필요한 데이터를 효율적으로 조회할 수 있는 중요한 SQL 연산자입니다. 데이터베이스에서 여러 테이블 간의 관계를 명확하게 표현하고, 이 관계를 기반으로 유용한 결과를 얻기 위해 JOIN을 사용합니다.
MySQL에서 JOIN의 종류와 각 JOIN의 사용법에 대해 자세히 설명하고, 실제 예시를 통해 각 JOIN을 언제 어떻게 활용할 수 있는지 살펴보겠습니다.
1. INNER JOIN (내부 조인)
INNER JOIN은 두 테이블에서 공통된 값이 있을 때만 데이터를 결합합니다. 즉, 양쪽 테이블에서 일치하는 데이터만 결과로 반환됩니다. INNER JOIN은 가장 기본적이고 자주 사용되는 JOIN입니다.
SELECT users.user_id, users.username, orders.order_id
FROM users
INNER JOIN orders ON users.user_id = orders.user_id;
위 쿼리는 users
테이블과 orders
테이블을 user_id 컬럼을 기준으로 결합합니다. 결과는 users
와 orders
에 모두 존재하는 user_id를 가진 데이터만 반환됩니다.
2. LEFT JOIN (왼쪽 외부 조인)
LEFT JOIN은 왼쪽 테이블의 모든 데이터를 반환하며, 오른쪽 테이블에 일치하는 데이터가 없다면 NULL
값을 반환합니다. 즉, 왼쪽 테이블을 기준으로 결합하며, 오른쪽 테이블에는 일치하는 값이 없어도 왼쪽 테이블의 모든 행이 결과로 나옵니다.
SELECT users.user_id, users.username, orders.order_id
FROM users
LEFT JOIN orders ON users.user_id = orders.user_id;
위 쿼리는 users
테이블을 기준으로 orders
테이블과 결합합니다. 만약 users
테이블에 주문 내역이 없는 사용자가 있다면, 그 사용자에 대해서는 order_id 값이 NULL
로 반환됩니다.
3. RIGHT JOIN (오른쪽 외부 조인)
RIGHT JOIN은 LEFT JOIN의 반대입니다. 오른쪽 테이블의 모든 데이터를 반환하며, 왼쪽 테이블에 일치하는 데이터가 없다면 NULL
값을 반환합니다. 즉, 오른쪽 테이블을 기준으로 결합하며, 왼쪽 테이블에는 일치하는 값이 없어도 오른쪽 테이블의 모든 행이 결과로 나옵니다.
SELECT users.user_id, users.username, orders.order_id
FROM users
RIGHT JOIN orders ON users.user_id = orders.user_id;
위 쿼리는 orders
테이블을 기준으로 users
테이블과 결합합니다. 만약 orders
테이블에 주문 내역은 있지만, 해당하는 사용자가 users
테이블에 없다면, 그 주문은 NULL
사용자 정보와 함께 반환됩니다.
4. FULL OUTER JOIN (전체 외부 조인)
FULL OUTER JOIN은 두 테이블에서 일치하는 데이터와 일치하지 않는 데이터를 모두 반환하는 JOIN입니다. MySQL은 FULL OUTER JOIN을 직접적으로 지원하지 않지만, LEFT JOIN과 RIGHT JOIN을 결합하여 동일한 결과를 얻을 수 있습니다.
SELECT users.user_id, users.username, orders.order_id
FROM users
LEFT JOIN orders ON users.user_id = orders.user_id
UNION
SELECT users.user_id, users.username, orders.order_id
FROM users
RIGHT JOIN orders ON users.user_id = orders.user_id;
위 쿼리는 users
테이블과 orders
테이블을 각각 LEFT JOIN과 RIGHT JOIN으로 결합한 후, UNION으로 결과를 합칩니다. 이 방법을 통해 FULL OUTER JOIN과 동일한 결과를 얻을 수 있습니다.
5. CROSS JOIN (교차 조인)
CROSS JOIN은 두 테이블 간의 모든 가능한 조합을 반환합니다. 즉, A
테이블의 모든 행과 B
테이블의 모든 행을 결합하여 결과를 생성합니다. 결과적으로 두 테이블의 행 수를 곱한 만큼의 데이터가 반환됩니다.
SELECT users.user_id, orders.order_id
FROM users
CROSS JOIN orders;
위 쿼리는 users
테이블의 모든 사용자와 orders
테이블의 모든 주문을 결합하여 모든 가능한 조합을 반환합니다. 교차 조인은 일반적으로 두 테이블 간의 관계를 나타낼 때는 사용되지 않지만, 특별한 경우에 사용될 수 있습니다.
6. SELF JOIN (자기 조인)
SELF JOIN은 테이블을 자기 자신과 결합하는 방식입니다. 이 방법은 같은 테이블 내에서 특정 조건을 기준으로 데이터를 결합할 때 사용됩니다.
SELECT A.user_id, A.username, B.username AS friend
FROM users A
JOIN users B ON A.friend_id = B.user_id;
위 쿼리는 users
테이블에서 friend_id
를 기준으로 사용자와 친구를 매칭하는 예시입니다. 자기 자신과 결합하여 데이터를 비교하는 경우 사용됩니다.
'개발 > DB' 카테고리의 다른 글
MySQL에서 데이터 정규화와 비정규화 (1) | 2025.07.28 |
---|---|
MySQL의 ACID 속성 이해하기 (1) | 2025.07.27 |
MySQL에서 JOIN의 종류와 사용법 (0) | 2025.05.25 |
MySQL 트랜잭션의 이해와 활용 (0) | 2025.05.24 |
MySQL 쿼리 성능을 향상시키는 인덱스 활용법 (1) | 2025.05.23 |