반응형

MySQL 서브 쿼리 개념, 사용 이유
'SELECT 어쩌고 FROM 어쩌고;' 같은 명령문을 우리는 쿼리라고 부르기로 했어요.
그리고 쿼리 안에 쿼리를 또 입력할 수 있는데, 쿼리 속 쿼리를 서브 쿼리라고 합니다.
서브쿼리 사용의 주이유는 하나의 쿼리 속에 여러 SELECT절을 때려 박으면 한 번에 처리할 수 있기 때문입니다.
보통 서브쿼리는 메인 쿼리보다 먼저 실행되지만 예외도 있습니다.
MySQL 서브 쿼리 사용법(문법)
서브쿼리는 마치 양파 껍질과 비슷합니다.
양파의 가장 겉껍질은 속에 수많은 껍질들을 감싸고 있습니다.
이때 가장 겉껍질과 같은 쿼리는 메인쿼리, Outer query이며
그리고 겉껍질 속에 있는 속껍질들은 서브쿼리, Subquery라고 합니다.
- 서브 쿼리의 문법 순서는 메인 쿼리와 같습니다.
*문법 순서: SELECT-FROM-WHERE-GROUP BY-HAVING-ORDER BY
- 서브 쿼리는 INSERT, UPDATE, DELETE문에도 사용 가능.
- 서브 쿼리는 괄호 () 안에 사용.
- 서브쿼리는 세미콜론 ; 생략 가능.
- 서브쿼리는 메인 쿼리의 SELECT, FROM, WHERE, HAVING, ORDER BY절에 사용 가능.
# 메인 쿼리의 GROUP BY 절에는 서브 쿼리 사용 불가!
SELECT (서브쿼리)
FROM (서브쿼리)
WHERE (서브쿼리)
HAVING (서브쿼리)
ORDER BY (서브쿼리)
MySQL 서브 쿼리 예제
서브 쿼리 종류가 다양한데, 이와 관련된 글은 추후에 정리해 보겠습니다.
고객 정보가 담긴 customer_info, 구매 정보가 담긴 purchase_info라는 샘플 테이블들입니다.
customer_info | ||
cust_id | name | tel_no |
148291 | Kim | 01011113333 |
188976 | Lily | 01022224444 |
192115 | Jin | 01099999999 |
195222 | Tom | 01055555555 |
purchase_info | |||
cust_id | purchased | product_id | price |
148291 | 2022-11-07 09:00:10+00:00 | K09 | 52000 |
188976 | 2023-01-01 11:05:20+00:00 | B10 | 100000 |
192115 | 2023-01-01 11:38:00+00:00 | A01 | 40000 |
195222 | 2023-01-04 19:27:12+00:00 | J12 | 10500 |
SELECT절 서브 쿼리(스칼라 서브쿼리) 예시입니다.
#고객 Kim의 고객 id, 연락처, 구매일
SELECT cust_id, tel_no
, (
SELECT purchased
FROM purchase_info
WHRE cust_id = '148%'
) purchased_date
FROM customer_info
WHERE name = 'Kim';
cust_id | tel_no | purchased |
148291 | 01011113333 | 2022-11-07 09:00:10+00:00 |
FROM절 서브 쿼리(인라인 뷰) 예시입니다.
# 23년 1월 시간별 평균 수익(revenue)
SELECT
date_purchased
, hour_purchased
, AVG(revenue)
FROM (
SELECT
DATE_FORMAT(purchased - INTERVAL 3 HOUR, '%Y-%m-%d') date_purchased
, DATE_FORMET(purchased - INTERVAL 3 HOUR, '%H') hour_purchased
, SUM(price) revenue
FROM purchase_info
WHERE purchased >= '2023-01-01' AND purchased < '2023-02-01'
GROUP BY 1, 2
) aaa
GROUP BY 1, 2;
date_purchased | hour_purchased | AVG(revenue) |
2023-01-01 | 11 | 70000 |
2023-01-04 | 19 | 10500 |
반응형
'SQL > MySQL' 카테고리의 다른 글
MySQL EXTRACT() 함수 사용법, 다양한 예제 정리 (0) | 2023.09.27 |
---|---|
MySQL 윈도우 재시작 초간단 방법(서버 재실행) (0) | 2023.09.23 |
MySQL 날짜 함수 YEAR() 설명, 문법, 예시 (0) | 2023.09.20 |
MySQL 자주 쓰는 숫자 데이터 타입(Numeric Data Types) 간단 정리 (0) | 2023.09.18 |
MySQL 외부 조인(LEFT, RIGHT, FULL JOIN, UNION, UNION ALL) 문법 예시 (0) | 2023.09.15 |