09. SQL문 속 또 다른 SQL문, 서브쿼리
09-3. 다중행 서브쿼리
- 다중행 서브쿼리: 실행 결과 행이 여러 개로 나오는 서브쿼리.
- 서브쿼리 결과가 여러 개이므로, 다중행 연산자를 사용해야 메인쿼리 비교 가능(단일행 연산자 사용 불가).
다중행 연산자 | 설명 |
IN | 메인쿼리의 데이터가 서브쿼리의 결과 중 하나라도 일치한 데이터가 있다면 true |
ANY, SOME | 메인쿼리의 조건식을 만족하는 서브쿼리의 결과가 하나 이상이면 true |
ALL | 메인쿼리의 조건식을 서브쿼리의 결과 모두가 만족하면 true |
EXISTS | 서브쿼리의 결과가 존재하면(즉, 행이 1개 이상일 경우) true |
[IN 연산자]
메인쿼리의 데이터가 서브쿼리의 결과 중 하나라도 일치한 데이터가 있다면 true
- 각 부서별 최고 급여와 동일한 급여를 받는 사원 정보 출력하기
[ANY, SOME 연산자]
메인쿼리의 조건식을 만족하는 서브쿼리의 결과가 하나 이상이면 true
1) ANY, SOME을 등가 비교 연산자(=)와 함께 사용하는 경우
*위 IN 연산자 사용한 것과 결과 같음. 따라서 IN을 주로 사용함.
2) (메인쿼리) < ANY/SOME (서브쿼리)
= 서브쿼리 결과값의 최댓값보다 작은 결과 출력
= (메인쿼리) < (서브쿼리 안 MAX 함수 적용)
- 30번 부서 사원들의 최대 급여보다 적은 급여를 받는 사원 정보 출력하기
3) (메인쿼리) > ANY/SOME (서브쿼리)
= 서브쿼리 결과값의 최솟값보다 큰 결과 출력
= (메인쿼리) > (서브쿼리 안 MIN 함수 적용)
- 30번 부서 사원들의 최소 급여보다 많은 급여를 받는 사원 정보 출력하기
[ALL 연산자]
메인쿼리의 조건식을 서브쿼리의 결과 모두가 만족하면 true
1) (메인쿼리) < ALL (서브쿼리)
= 서브쿼리 결과값의 최솟값보다 작은 결과 출력
= (메인쿼리) < (서브쿼리 안 MIN 함수 적용)
- 부서 번호가 30번인 사원들의 최소 급여보다 더 적은 급여를 받는 사원 출력하기
2) (메인쿼리) > ALL (서브쿼리)
= 서브쿼리 결과값의 최댓값보다 큰 결과 출력
= (메인쿼리) > (서브쿼리 안 MAX 함수 적용)
- 부서 번호가 30번인 사원들의 최대 급여보다 더 많은 급여를 받는 사원 출력하기
[EXISTS 연산자]
서브쿼리의 결과가 존재하면(행이 1개 이상일 경우) true
- 서브쿼리의 결과 값이 존재하는 경우
서브쿼리 결과 값이 존재하므로, EMP 모든 행이 출력됨.
- 서브쿼리의 결과 값이 존재하지 않는 경우
서브쿼리 결과 값이 존재하지 않으므로, 아무 행도 출력되지 않음.
<다중 행 연산자 (ANY/SOME vs ALL) 비교 정리>
*M: 메인쿼리 / S: 서브쿼리
ANY/SOME | (M) = ANY/SOME (S) | S 결과값 중 하나라도 만족하는 데이터 모두 출력 | IN 연산자 사용한 것과 결과 같아, IN을 주로 사용. |
(M) < ANY/SOME (S) | S 결과값의 최댓값보다 작은 결과 출력 | (M) < (S 안 MAX 함수 적용) | |
(M) > ANY/SOME (S) | S 결과값의 최솟값보다 큰 결과 출력 | (M) > (S 안 MIN 함수 적용) | |
ALL | (M) = ALL (S) | 사용 불가능 | |
(M) < ALL (S) | S 결과값의 최솟값보다 작은 결과 출력 | (M) < (S 안 MIN 함수 적용) | |
(M) > ALL (S) | S 결과값의 최댓값보다 큰 결과 출력 | (M) > (S 안 MAX 함수 적용) |
'빅데이터 > Oracle SQL | Do it! 오라클로 배우는 데이터베이스 입문' 카테고리의 다른 글
[오라클로 배우는 데이터베이스 입문 | 09장 SQL문 속 또 다른 SQL문, 서브쿼리] 문제 풀이 (p262) (0) | 2023.03.04 |
---|---|
서브쿼리 | 다중열 서브쿼리 / FROM절 서브쿼리(인라인뷰)와 WITH절 / SELECT절 서브쿼리(스칼라 서브쿼리) (0) | 2023.03.03 |
서브쿼리 | 서브쿼리란? / 서브쿼리의 특징/ 서브쿼리의 종류와 사용 / 단일행 서브쿼리 (0) | 2023.03.01 |
[오라클로 배우는 데이터베이스 입문 | 08장 여러 테이블을 하나의 테이블처럼 사용하는 조인] 문제 풀이 (p239) (0) | 2023.02.28 |
조인 | SQL-99 조인 (NATURAL JOIN / JOIN ~ USING / JOIN ~ ON / OUTER JOIN) (0) | 2023.02.27 |