SQLD/SQL
[DML]SELECT-서브쿼리
김귤🐵
2023. 9. 7. 18:01
서브쿼리
서브쿼리란?
- 하나의 쿼리 안에 존재하는 또 다른 쿼리이다.
- SELECT,FROM,WHERE,HAVING,ORDER BY,UPDATE문의 SET절 에서 사용될 수 있다.
서브쿼리 사용시 주의 사항
- 서브쿼리는 괄호()로 감싸서 사용해야한다.
- 서브쿼리는 ORDER BY절을 사용할 수 없다. 메인쿼리절에서만 사용 가능하다.
서브쿼리의 종류
사용되는 위치에 따라 다음과 같이 나눌 수 있다.
SELECT 절 | 스칼라 서브쿼리(Scalar Subquery) |
FROM 절 | 인라인 뷰(Inline View) |
WHERE 절 | 중첩 서브쿼리(Nested Subquery) |
1.스칼라 서브쿼리
- SELECT절에서 사용하는 스칼라 서브쿼리는 한 행, 한 컬럼만을 반환한다.
- 컬럼을 쓸 수 있는 대부분의 곳에서 사용할 수 있다.
2.인라인 뷰
- FROM절에서 사용하는 인라인 뷰는 동적으로 생성된 테이블인 것처럼 사용할 수 있다.
- 인라인 뷰는 테이블명이 올 수 있는 곳에서 사용할 수 있다.
3.중첩 서브쿼리
WHERE절에서 사용하는 중첩 서브쿼리는 메인 쿼리와의 관계에 따라 다음과 같이 나뉜다.
서브쿼리 종류 | 설명 |
비연관 서브쿼리 (Un-Correlated) |
서브쿼리가 메인쿼리 컬럼을 갖고 있지 않은 형태 메인쿼리에게 서브쿼리가 실행된 값을 제공하는 목적으로 주로 사용된다. |
연관 서브쿼리 (Correlated) |
서브쿼리가 메인쿼리의 컬럼을 갖고 있는 형태 메인쿼리에서 읽혀진 데이터를 서브쿼리에서 조건이 맞는지 확인하고자 할 때 사용된다. |
또한 중첩서브쿼리는 반환되는 데이터 타입에 따라 다음과 같이 나눌 수 있다.
서브쿼리 종류 | 설명 |
단일 행 서브쿼리 (Single Row) |
서브쿼리가 1건 이하의 데이터를 반환 단일 비교연산자 사용 (=,<,>,<=,>=,<>) |
다중 행 서브쿼리 (Multi Row) |
서브쿼리가 여러 건의 데이터를 반환 다중 비교 연산자 사용 (IN,ALL,ANY,SOME,EXISTS) |
다중 컬럼 서브쿼리 (Multi Column) |
서브쿼리에서 여러개의 컬럼의 데이터를 반환한다. 다중 비교 연산자 사용 (IN,ALL,ANY,SOME,EXISTS) *오라클에서만 사용 가능 |
⚠️참고 사항
단일 행 서브쿼리는 다중행 비교연산자(IN,ALL,SOME,EXISTS)를 사용할 수 없다.
반대로 다중 행 서브쿼리는 단일행 비교연산자 (=,<,>,<=,>=,<>) 를 사용할 수 있다.