SUBQUERY

김덕근·2023년 1월 17일
0

DB

목록 보기
7/14

SUBQUERY (서브쿼리)

- 하나의 SQL문 안에 포함된 또다른 SQL(SELECT)문
- 메인쿼리(기존쿼리)를 위해 보조 역할을 하는 쿼리문
-- SELECT, FROM, WHERE, HAVGIN 절에서 사용가능

서브쿼리 유형

단일행 (단일열) 서브쿼리 : 서브쿼리의 조회 결과 값의 개수가 1개일 때 
-> 조회 결과가 1행1열

다중행 (단일열) 서브쿼리 : 서브쿼리의 조회 결과 값의 개수가 여러개일 때
-> 행은 여러개 컬럼은 1개

(단일행) 다중열 서브쿼리 (단일행 = 결과값은 한 행) 
서브쿼리 SELECT 절에 나열된 컬럼 수가 여러개 일 때
-> 컬럼이 여러개, 행은 1개

다중행 다중열 서브쿼리 : 서브쿼리 조회 결과 행 수와 열 수가 여러개 일 때
-> 행도 여러개 컬럼도 여러개


상관 서브쿼리 : 서브쿼리가 만든 결과 값을 메인 쿼리가 비교 연산할 때 
                 메인 쿼리 테이블의 값이 변경되면 서브쿼리의 결과값도 바뀌는 서브쿼리
                 --> 메인이 먼저, 서브가 나중에 해석된다.
                 
스칼라 서브쿼리 : 상관 쿼리이면서 결과 값이 하나인 서브쿼리

서브쿼리 유형에 따라 서브쿼리 앞에 붙은 연산자가 다름


1. 단일행 서브쿼리 (SINGLE ROW SUBQUERY)

서브쿼리의 조회 결과 값의 개수가 1개인 서브쿼리
단일행 서브쿼리 앞에는 비교 연산자 사용

<, >, <=, >=, =, !=, ^=, <>

2. 다중행 서브쿼리 (MULTI ROW SUBQUERY)

서브쿼리의 조회 결과 값의 개수가 여러행일 때

IN / NOT IN : 여러 개의 결과값 중에서 한 개라도 일치하는 값이 있다면
                혹은 없다면 이라는 의미(가장 많이 사용!)
> ANY, < ANY : 여러개의 결과값 중에서 한개라도 큰 / 작은 경우
                 가장 작은 값보다 큰가? / 가장 큰 값 보다 작은가?
> ALL, < ALL : 여러개의 결과값의 모든 값보다 큰 / 작은 경우
                 가장 큰 값 보다 큰가? / 가장 작은 값 보다 작은가?
EXISTS / NOT EXISTS : 값이 존재하는가? / 존재하지 않는가?

3. 다중열 서브쿼리 (MULTIPLE COLUMN SUBQUERY)

WHERE절에 작성된 컬럼 순서에 맞게
서브쿼리의 조회된 컬럼과 비교하여 일치하는 행만 조회
(컬럼 순서가 중요!)


SELECT 절에도 서브쿼리 사용할 수 있음

집합연산자 중 선택함수(DECODE or CASE문) 사용!

DECODE(컬럼명, 값1, 1인경우, 값2, 2인경우,.... 일치하지 않는경우)
CASE WHEN 조건1 THEN 값1
     WHEN 조건2 THEN 값2	
     ELSE 값
END 별칭	 

집합 연산자(UNION, 합집합) 사용 방법

쉽긴하지만 정렬을 하려고하면 RESULT SET을 SELECT하는 구문이 또 필요함

profile
안녕하세요!

0개의 댓글