-
[DML]SELECT-서브쿼리SQLD/SQL 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)를 사용할 수 없다.
반대로 다중 행 서브쿼리는 단일행 비교연산자 (=,<,>,<=,>=,<>) 를 사용할 수 있다.
'SQLD > SQL' 카테고리의 다른 글
[DML]SELECT-연산자 (0) 2023.08.30 [DML]SELECT구문 (0) 2023.08.29 [DML]INSERT,UPDATE,DELETE (0) 2023.08.29 [DDL]ALTER,DROP,TRUNCATE,RENAME (0) 2023.08.29 [DDL]CREATE (0) 2023.08.28