자격증/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 명령으로 꼭 점검하세요.
공식 문서 링크
728x90
반응형