[Database] SubQuery 종류
2024. 7. 14. 17:58ㆍ백엔드/Database
많은 개발자들이 SQL 쿼리를 작성할 때 서브 쿼리를 자주 사용합니다. 서브쿼리는 사용되는 위치에 따라 다양한 명칭으로 불리기도 합니다.
저는 보통 특별한 명칭을 사용하기보다는 그냥 서브 쿼리라고 부르는 편인데요, 오늘은 서브 쿼리의 종류에 대해 알아보려 합니다. 🤔
# 서브쿼리 (SubQuery)
- 다른 SQL 쿼리에 포함된 쿼리로 메인 쿼리의 일부로 작동
- 괄호로 감싸져서 사용
- SELECT, INSERT, UPDATE, DELETE의 WHERE, FROM, HAVING, SET 절, EXISTS 연산자 등 다양한 구문에서 사용 가능
- 별칭 사용 가능
- 서브 쿼리는 메인 쿼리와 분리되어 가독성이 향상되지만 서브쿼리가 많거나 복잡해지는 경우 서버에 부하를 줄 수 있음
# 사용 위치에 따른 서브쿼리 명칭
사용위치 | 명칭 |
SELECT 절 | 스칼라 서브쿼리 (Scalar Sub Query) |
FROM 절 | 인라인 뷰 (Inline View) |
WHERE 절 | 중첩 서브쿼리 |
스칼라 서브쿼리 (Scalar Sub Query)
- SELECT 절에서 사용되는 서브 쿼리
- 단일 값을 반환
- 메인 쿼리의 각 행에 대해 하나의 값을 반환하여 추가적인 계산이나 필드를 생성하는 데 유용
SELECT
이름,
(SELECT MAX(점수)
FROM 점수_테이블
WHERE 점수_테이블.학번 = 학생_테이블.학번) AS 최고점수
FROM
학생_테이블;
인라인 뷰 (Inline View)
- FROM 절에서 사용되는 서브 쿼리로 메인 쿼리에서 사용
- 중간 결과를 생성
- 별칭 지정 필수
SELECT
학급,
평균점수
FROM
(SELECT 학급, AVG(점수) AS 평균점수
FROM 점수_테이블
GROUP BY 학급) AS 학급_평균
WHERE
평균점수 >= 80;
중첩 서브쿼리
- WHERE 절에서 사용되는 서브 쿼리 로 메인 쿼리의 조건을 설정
- 단일 행 서브쿼리와, 다중 행 서브쿼리가 존재
유형 | 반환 행 수 | 사용 연산자 |
단일 행 | 하나의 행 | =, <, >, <=, >= |
다중 행 | 여러 행 | IN, ANY, ALL |
단일 행 서브쿼리
- 단일 값을 반환
- 메인 쿼리에서 비교 연산자(=, <, >, <=, >=)를 사용하여 조건을 설정
SELECT
이름
FROM
학생_테이블
WHERE
학번 = (SELECT 학번
FROM 점수_테이블
WHERE 학급 = 'A'
ORDER BY 점수 DESC
LIMIT 1);
다중 행 서브쿼리
- 여러 행을 반환
- 메인 쿼리에서 IN, ANY, ALL 등의 연산자를 사용하여 다중 값을 조건으로 설정
SELECT
이름
FROM
학생_테이블
WHERE
학번 IN (SELECT 학번
FROM 등록_테이블
WHERE 학기 = '2024-1');
'백엔드 > Database' 카테고리의 다른 글
[Database] 데이터베이스 index(인덱스) 알아보기 (0) | 2024.03.02 |
---|