Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 서브쿼리
- count
- Python
- SubQuery
- 금융IT
- where
- is null
- alias
- IELTS
- GROUP BY
- Round
- MySQL
- 투자자산운용사
- join
- order by
- MAX
- ifnull
- 날짜 포맷
- SQL
- inner join
- having
- 해외결제
- 트래블테크
- IS NOT NULL
- LIMIT
- IN
- 금융 플랫폼
- 도서추천
- date_format
- programmers
Archives
- Today
- Total
Every Step Matters
[SQL] 서브 쿼리 (SubQuery) : (4) 스칼라 서브 쿼리 (단 하나의 값만 반환, SELECT절에 작성) 본문
Database/SQL
[SQL] 서브 쿼리 (SubQuery) : (4) 스칼라 서브 쿼리 (단 하나의 값만 반환, SELECT절에 작성)
imnyoung 2026. 1. 7. 16:27
오늘은 스칼라 서브 쿼리에 대해 알아보려고 한다. 서브 쿼리 시리즈의 마지막 포스팅이다.
서브 쿼리 시리즈의 이전 글은 아래 링크를 참고하길 바란다.
[SQL] 서브 쿼리 (SubQuery) : (3) 인라인 뷰 (FROM절에 작성)
오늘은 서브 쿼리 중에서도 인라인 뷰에 대해 알아보도록 하자.서브 쿼리 시리즈의 다른 글은 아래 링크를 참고하길 바란다. [SQL] 서브 쿼리 (SubQuery) : (1) 기본 개념과 주요 예시1. 서브 쿼리란?하
imnyoungit.tistory.com
스칼라 서브쿼리(Scalar Subquery)란?
스칼라 서브쿼리는 단 하나의 값(1행 1열) 을 반환하는 서브쿼리이다. SELECT, WHERE, HAVING 절에서 일반 값처럼 사용할 수 있는 서브쿼리 중에서도 주로 SELECT절에서 사용되는 쿼리를 일반적으로 스칼라 서브쿼리라고 한다.
스칼라 서브쿼리의 기본 형태
스칼라 서브쿼리의 기본 형태는 다음과 같다.
SELECT 컬럼,
(SELECT 단일값 FROM ...)
FROM 테이블;
⚠️ 반드시 결과가 1행 1열 이어야 한다.
스칼라 서브쿼리의 사용 이유
[ 핵심 사용 이유 3가지 ]
1. 전체 평균/최대/최소 값을 각 행과 함께 보여줄 때
2. 기준값과의 차이를 계산할 때
3. JOIN 없이 문제를 가장 단순하게 표현하고 싶을 때

예시와 함께 살펴보자
예시 : FISH_INFO
다음과 같은 컬럼으로 구성된 FISH_INFO 테이블이 있다고 하자. (프로그래머스의 FISH_INFO 테이블과 동일)
| Column name | Type | Nullable | Description |
| ID | INTEGER | FALSE | 잡은 물고기의 ID |
| FISH_TYPE | INTEGER | FALSE | 물고기의 종류(숫자) |
| LENGTH | FLOAT | TRUE | 잡은 물고기의 길이(cm) |
| TIME | DATE | FALSE | 물고기를 잡은 날짜 |
잡은 물고기의 길이가 10cm 이하일 경우에는 LENGTH가 NULL 이며, LENGTH에 NULL 만 있는 경우는 없다.
1) 전체 평균/최대/최소 값을 각 행과 함께 보여주는 경우
문제 : 각 물고기의 길이와 함께 전체 물고기의 평균 길이, 최대 길이, 최소 길이를 같이 조회
SELECT id,
length,
(SELECT AVG(length) FROM fish_info) AS avg_length,
(SELECT MAX(length) FROM fish_info) AS max_length,
(SELECT MIN(length) FROM fish_info) AS min_length
FROM fish_info
WHERE length IS NOT NULL;
2) 기준값과의 차이를 계산할 때
문제 : 길이가 10cm 보다 큰 물고기 중 각 물고기의 길이가 전체 평균 길이보다 얼마나 큰지(또는 작은지) 계산하기
SELECT id,
length,
length - (SELECT AVG(length) FROM fish_info) AS diff_from_avg -- 스칼라 서브쿼리를 계산식 내부에서 사용
FROM fish_info
WHERE length IS NOT NULL;
3) JOIN 없이 문제를 가장 단순하게 표현하고 싶을 때
문제 : 10cm 초과인 물고기의 길이와 함께 전체 평균 길이를 기준으로 한 비율(%)을 조회
SELECT id,
length,
ROUND(
length / (SELECT AVG(length) FROM fish_info) * 100,
1
) AS length_ratio_percent
FROM fish_info
WHERE length IS NOT NULL;
기준 테이블이 자기 자신일 때 JOIN을 쓰면 오히려 쿼리가 길어진다.
이때 스칼라 서브쿼리를 이용하면 가독성 면에서 우수하다.
Reference
'Database > SQL' 카테고리의 다른 글
| [프로그래머스 SQL Lv.2] 3월에 태어난 여성 회원 목록 출력하기 (MySQL) (0) | 2026.01.07 |
|---|---|
| [프로그래머스 SQL Lv.4] 서울에 위치한 식당 목록 출력하기 (MySQL) (0) | 2026.01.07 |
| [SQL] 서브 쿼리 (SubQuery) : (3) 인라인 뷰 (FROM절에 작성) (0) | 2026.01.07 |
| [SQL] 서브 쿼리 (SubQuery) : (2) 중첩 서브 쿼리 (WHERE절에 작성) (0) | 2026.01.06 |
| [프로그래머스 SQL Lv.3] 업그레이드 할 수 없는 아이템 구하기 (MySQL) (0) | 2026.01.05 |