자격증/SQLP

SQL 조인과 서브쿼리 완전 정복: 실무에서 자주 쓰는 패턴 정리

Ant_U 2025. 6. 17. 14:06
728x90
반응형

 

조인과 서브쿼리란?

SQL에서 조인(JOIN)과 서브쿼리(SUBQUERY)는 둘 이상의 테이블을 함께 사용하는 강력한 도구입니다.

  • 조인(JOIN): 여러 테이블을 논리적으로 연결하여 하나의 결과로 만듭니다.
  • 서브쿼리(SUBQUERY): 다른 쿼리 내부에 중첩되어 사용되는 쿼리입니다.

둘 다 복잡한 데이터 구조에서 원하는 데이터를 추출하는 데 필수적인 역할을 합니다.


조인(JOIN)의 종류와 사용법

1. INNER JOIN

두 테이블 모두에 존재하는 데이터만 반환합니다.

SELECT users.name, orders.amount
FROM users
INNER JOIN orders ON users.id = orders.user_id;

2. LEFT JOIN (또는 LEFT OUTER JOIN)

왼쪽 테이블의 모든 데이터를 가져오고, 오른쪽 테이블에 없는 값은 NULL로 채웁니다.

SELECT users.name, orders.amount
FROM users
LEFT JOIN orders ON users.id = orders.user_id;

3. RIGHT JOIN

오른쪽 테이블의 모든 데이터를 기준으로 합니다. (MySQL에서 잘 사용되진 않음)

4. FULL OUTER JOIN

MySQL은 직접 지원하지 않지만, UNION을 활용해 흉내낼 수 있습니다:

SELECT * FROM A LEFT JOIN B ON A.id = B.a_id
UNION
SELECT * FROM A RIGHT JOIN B ON A.id = B.a_id;

서브쿼리(SUBQUERY) 사용법

서브쿼리는 SELECT, FROM, WHERE 절 어디에서든 사용될 수 있습니다.

1. WHERE 절에 사용되는 서브쿼리

SELECT name FROM users
WHERE id IN (SELECT user_id FROM orders WHERE amount > 100);

2. FROM 절에 사용되는 서브쿼리

SELECT avg_orders.user_id, avg_orders.avg_amount
FROM (
  SELECT user_id, AVG(amount) AS avg_amount
  FROM orders
  GROUP BY user_id
) AS avg_orders;

3. SELECT 절에서 컬럼처럼 사용

SELECT name,
  (SELECT COUNT(*) FROM orders WHERE orders.user_id = users.id) AS order_count
FROM users;

조인 vs 서브쿼리: 언제 어떤 걸 써야 할까?

  • 조인은 데이터를 "옆으로 병합"할 때 유리합니다. 예: 사용자와 주문을 나란히 보여줄 때
  • 서브쿼리는 특정 조건 하의 통계나 중첩된 조건이 필요할 때 유용합니다. 예: 평균 이상의 주문 사용자 찾기

성능 팁: MySQL 옵티마이저는 내부적으로 서브쿼리를 조인으로 변환할 수 있기 때문에, 테스트를 통해 더 효율적인 방법을 선택하는 것이 좋습니다.


결론 및 실무 팁

조인과 서브쿼리는 SQL 실무에서 가장 많이 사용되는 문법 중 하나입니다. 상황에 따라 적절히 선택하면 쿼리의 가독성과 성능을 모두 높일 수 있습니다.

실무 팁:

  • 조인은 명확한 관계가 있는 테이블 간 연결에 활용하세요.
  • 서브쿼리는 필터링, 계산, 조건 비교 등에 유리합니다.
  • 쿼리 성능은 EXPLAIN 명령으로 꼭 점검하세요.

공식 문서 링크

MySQL 공식 문서 - JOIN
MySQL 공식 문서 - Subqueries

728x90
반응형