-
[2월 4주차-2/26(1)]SQL JOIN과 서브쿼리 정리Why Not SW CAMP 5기/수업 기록 2025. 2. 26. 17:09
데이터베이스에서 데이터를 효율적으로 조회하고 조작하기 위해 JOIN, 서브쿼리, CTE 등의 개념을 이해하는 것이 중요합니다. 이번 글에서는 JOIN과 서브쿼리, 그리고 CTE(Common Table Expression)에 대해 정리해보겠습니다.
🔹 JOIN
JOIN은 여러 개의 테이블을 조합하여 데이터를 조회하는 데 사용됩니다.
✅ INNER JOIN (교집합 개념)
두 개 이상의 테이블에서 공통된 값이 있는 행만 반환합니다.
SELECT a.customer_id, a.first_name, a.last_name, b.address_id, b.address, b.district, b.postal_code, c.city_id, c.city FROM customer AS a INNER JOIN address AS b ON a.address_id = b.address_id INNER JOIN city AS c ON b.city_id = c.city_id WHERE a.first_name = 'ROSA';✅ OUTER JOIN (부분집합 개념)
OUTER JOIN은 한쪽 테이블에만 존재하는 값도 포함하여 반환합니다.
- LEFT OUTER JOIN: 왼쪽 테이블의 모든 행과 일치하는 오른쪽 테이블의 데이터를 가져옵니다.
- RIGHT OUTER JOIN: 오른쪽 테이블의 모든 행과 일치하는 왼쪽 테이블의 데이터를 가져옵니다.
- FULL OUTER JOIN: 두 테이블에서 모든 데이터를 포함하여 반환합니다. 하지만 MySQL은 FULL OUTER JOIN을 지원하지 않으므로 LEFT OUTER JOIN과 RIGHT OUTER JOIN을 UNION으로 결합해야 합니다.
SELECT * FROM tableA LEFT JOIN tableB ON tableA.id = tableB.id UNION SELECT * FROM tableA RIGHT JOIN tableB ON tableA.id = tableB.id;✅ CROSS JOIN (카테시안 곱)
두 테이블의 모든 조합을 반환합니다. 거의 사용하지 않습니다.
SELECT * FROM tableA CROSS JOIN tableB;
🔹 서브쿼리 (Subquery)
서브쿼리는 SELECT, FROM, WHERE 절에서 사용되는 쿼리 내부의 쿼리입니다.
/* SELECT (subquery) -> 반드시 단일 행 FROM (subquery) -> 단일/다중 가능. IN, ANY, ALL, EXISTS 이용해야 함 WHERE (subquery) -> 단일/다중 가능. IN, ANY, ALL, EXISTS 이용해야 함 */ SELECT * FROM customer WHERE customer_id IN ( SELECT customer_id FROM customer WHERE first_name IN ('ROSA', 'ANA') );✅ 서브쿼리의 종류
- 인라인 뷰 (Inline View): FROM 절에서 사용하는 서브쿼리
- 스칼라 서브쿼리 (Scalar Subquery): SELECT 절에서 사용하는 서브쿼리
🔹 EXISTS vs IN vs ANY vs ALL 차이점
IN 서브쿼리 결과 중 하나라도 일치하면 참 ANY 서브쿼리 결과 중 하나라도 조건을 만족하면 참. 비교 연산 가능 (= ANY(...)는 IN과 동일) ALL 서브쿼리의 모든 결과에 대해 조건을 만족해야 참 (> ALL(...)은 최솟값보다 크다는 의미) EXISTS 서브쿼리가 값 하나라도 반환하면 참 (존재 여부만 확인)
🔹 CTE (Common Table Expression)
CTE는 서브쿼리를 더 가독성 높게 사용할 수 있도록 도와줍니다.
WITH cte_customer (customer_id, first_name, email) AS ( SELECT customer_id, first_name, email FROM customer WHERE customer_id >= 10 ) SELECT * FROM cte_customer;✅ CTE 활용하면 가독성이 향상되고, 여러 번 사용되는 서브쿼리를 최적화 가능
🔹 UNION, INTERSECT, EXCEPT (집합 연산)
UNION, INTERSECT, EXCEPT을 활용해 테이블을 결합할 수 있습니다. 단, 중복값이 제거된 결과가 반환됩니다.
SELECT column_name FROM tableA UNION SELECT column_name FROM tableB;- UNION: 두 쿼리의 합집합
- INTERSECT: 두 쿼리의 교집합
- EXCEPT: 첫 번째 쿼리에서 두 번째 쿼리를 제외한 차집합
🔹 마무리
이번 글에서는 SQL에서 가장 중요한 개념 중 하나인 JOIN, 서브쿼리, CTE, 그리고 집합 연산에 대해 정리해보았습니다.
✅ JOIN은 테이블을 결합하는 가장 일반적인 방법이며, INNER JOIN과 OUTER JOIN을 구분해서 사용할 것!
✅ 서브쿼리는 특정 조건을 만족하는 데이터를 조회할 때 유용하지만, EXISTS vs IN vs ANY vs ALL의 차이를 이해하고 사용해야 함
✅ CTE를 활용하면 서브쿼리보다 가독성이 좋아지고, 재사용성이 증가
✅ UNION, INTERSECT, EXCEPT은 테이블을 결합하는 유용한 연산자지만, 중복 제거 특성을 고려할 것!
'Why Not SW CAMP 5기 > 수업 기록' 카테고리의 다른 글
[2월 4주차-2/27(1)]다양한 SQL 함수 정리 (0) 2025.02.27 [2월 4주차-2/26(2)]MySQL 연동하기: Python으로 MySQL 데이터 가져오기+실습 (0) 2025.02.26 [2월 4주차-2/25(2)]🎓학사 관리 테이블 실습 - SQL 문제 풀이 (0) 2025.02.25 [2월 4주차-2/25(1)]MySQL 데이터 그룹화, 테이블 조작, 외래키 설정 및 데이터 유형 정리 (0) 2025.02.25 [2월 4주차-2/24(3)] MySQL 기초 문법 정리 🚀 (0) 2025.02.24