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
반응형
'자격증 > SQLP' 카테고리의 다른 글
SQLP 자격증 대비: 집계 함수와 윈도우 함수 완벽 정리 (0) | 2025.06.18 |
---|---|
SQL 기본문 총정리: 초보자를 위한 SELECT부터 INSERT까지 핵심 문법 안내 (0) | 2025.06.17 |
설계 품질 평가: 데이터베이스 설계의 우수성 평가 방법 (0) | 2025.06.16 |
물리적 설계: 데이터베이스 구현을 위한 최적화 단계 (0) | 2025.06.16 |
논리적 설계: 데이터베이스 설계에서의 핵심 단계와 중요성 (2) | 2025.06.16 |
개념적 설계란? 데이터베이스 설계에서의 중요성과 단계 (0) | 2025.06.16 |
데이터 모델링 개요: MySQL에서 효율적인 데이터 모델링의 기초 (0) | 2025.06.16 |