티스토리 뷰
반응형
🔍 MySQL SUBQUERIES 정리
주요 키워드: MySQL, SUBQUERY, 상관 서브쿼리, EXISTS, CTE, 파생 테이블
🧭 개요
SUBQUERY(서브쿼리)
는 다른 쿼리 내에서 실행되는 쿼리입니다.
복잡한 조건, 계산, 필터링 등에 활용되며 SELECT
, FROM
, WHERE
, HAVING
등 다양한 위치에서 사용할 수 있습니다.
1️⃣ SUBQUERY 활용 예시
📌 서브쿼리를 WHERE 절에 사용하는 경우
SELECT category_code
FROM tbl_menu
WHERE menu_name = '민트미역국';
-- '민트미역국'의 category_code를 반환
SELECT
menu_code,
menu_name,
menu_price,
category_code,
orderable_status
FROM tbl_menu
WHERE category_code = (
SELECT category_code
FROM tbl_menu
WHERE menu_name = '민트미역국'
);
-- '민트미역국'과 같은 category_code를 가진 메뉴 전체를 조회
📌 파생 테이블 (FROM절에 사용)
SELECT
COUNT(*) AS 'count'
FROM tbl_menu
GROUP BY category_code;
-- category_code별 메뉴 개수
SELECT MAX(count)
FROM (
SELECT COUNT(*) AS 'count'
FROM tbl_menu
GROUP BY category_code
) AS countmenu;
-- 카테고리 중 메뉴가 가장 많은 개수를 가진 값을 출력
2️⃣ 상관 서브쿼리
- 메인 쿼리의 각 행에 따라 서브쿼리가 다시 실행됨
SELECT
AVG(menu_price)
FROM tbl_menu
WHERE category_code = 4;
-- category_code = 4의 평균 가격
SELECT
menu_code,
menu_name,
menu_price,
category_code,
orderable_status
FROM tbl_menu a
WHERE menu_price > (
SELECT AVG(menu_price)
FROM tbl_menu
WHERE category_code = a.category_code
);
-- 각 카테고리의 평균 가격보다 높은 가격의 메뉴만 조회
3️⃣ EXISTS
- 서브쿼리의 결과가 존재하면 TRUE를 반환
SELECT category_name
FROM tbl_category a
WHERE EXISTS (
SELECT 1
FROM tbl_menu b
WHERE b.category_code = a.category_code
)
ORDER BY 1;
-- 메뉴가 존재하는 카테고리만 조회
4️⃣ CTE (Common Table Expression)
- 일시적인 이름을 가진 결과 테이블
- 파생 테이블보다 가독성과 재사용성이 뛰어남
WITH menucate AS (
SELECT
menu_name,
category_name
FROM tbl_menu a
JOIN tbl_category b ON a.category_code = b.category_code
)
SELECT *
FROM menucate
ORDER BY menu_name;
-- 메뉴명과 카테고리명을 미리 정의된 CTE(menucate)로 깔끔하게 조회
🔍 요약
유형 | 설명 |
---|---|
일반 SUBQUERY | WHERE, SELECT, FROM 절에 사용 |
파생 테이블 | FROM절에 정의된 하위 SELECT 결과에 별칭 부여 |
상관 서브쿼리 | 메인 쿼리의 각 행에 따라 실행됨 |
EXISTS | 서브쿼리 결과의 존재 유무에 따라 필터링 |
CTE | WITH절을 통해 선언, 가독성/재사용성이 뛰어남 |
📎 참고 자료
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- sql 고급
- database
- mysql 실습
- 데이터베이스
- 파생 테이블
- SQL
- Python
- sql 쿼리 합치기
- 중첩 쿼리
- google i/o 2025
- select 결과 제어
- sql 조작문
- 행 제한
- 다중 열 distinct
- sql 다중 테이블
- sql 쿼리 최적화
- 집합 연산
- 고유 값
- 파이썬
- requests 라이브러리
- MySQL
- mysql 분석 쿼리
- 파이썬 크롤러
- 카테고리별 합계
- 데이터 조회 최적화
- sql 그룹화
- api 크롤링
- replace
- 회고록
- 조건문
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
글 보관함