<서브쿼리 -다중행>
-
서브 쿼리에서 여러 행이 검색되는 쿼리문. 연산자를 제외하면 단일 행 서브 쿼리와 같음
1
2
3
|
SELECT [DISTINCT] 컬럼, 컬럼...
FROM 테이블
WHERE 컬럼 <다중행 연산자> (SELECT 컬럼 FROM 테이블);
|
cs |
-
다중행 연산자의 종류
-
IN: 검색된 값 중 하나만 일치하면 참
-
비교연산자+ANY(서브쿼리): 검색된 값 중 조건에 맞는 값이 하나 이상 있으면 참
-
비교연산자+ALL(서브쿼리): 모든 검색된 값과 조건에 맞아야 참
-
IN
-
employees 테이블의 90번 부서의 월급과 같은 월급을 받는 직원들을 출력
1
2
3
4
5
|
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary IN (SELECT salary
FROM employees
WHERE department_id = 90);
|
cs |
-
ANY: 하나의 조건만 만족해도 됨 (앞에 연산자가 꼭 붙어야함)
-
employees 테이블의 90번 부서의 어느 한 직원보다 급여가 같거나 많은 월급을 받는 직원들을 출력
1
2
3
4
5
|
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary >=ANY (SELECT salary
FROM employees
WHERE department_id = 90);
|
cs |
-
ALL: 모든 조건을 만족해야 함
-
employees 테이블의 90번 부서의 직원들보다 급여가 같거나 많은 월급을 받는 직원들을 출력
1
2
3
4
5
|
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary >=ALL (SELECT salary
FROM employees
WHERE department_id = 90);
|
cs |
<서브쿼리 다중행 예제>
-
부서번호 (department_id)가 20번인 직원들의 매니저번호(manager_id)와 같은 매니저를 가지는 직원들을 출력 (단 20번 부서의 직원은 제외)
1
2
3
4
5
6
7
|
SELECT employee_id, first_name, job_id 직종, salary 급여
FROM employees
WHERE manager_id IN (SELECT manager_id
FROM employees
WHERE department_id=20)
AND department_id !=20;
|
cs |
-
job_id가 'ST_MAN'인 직원들 중 어느 한 직원 보다도 급여가 작은 직원들을 출력
(ST_MAN 직책의 급여는 5800~8200사이. 따라서 8200보다 급여가 작은 직원들이 출력됨)
1
2
3
4
5
|
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary < ANY (SELECT salary
FROM employees
WHERE job_id='ST_MAN');
|
cs |
-
직책이 'IT_PROG'인 직원들보다 급여가 작은 직원들을 출력
(IT_PROG 직책의 급여는 4200~9000사이. 따라서 4200보다 급여가 작은 직원들이 출력됨)
1
2
3
4
5
|
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary < ALL (SELECT salary
FROM employees
WHERE job_id='IT_PROG');
|
cs |
'Learning > SQL' 카테고리의 다른 글
집합연산자 (UNION, INTERSECT, MINUS) (0) | 2020.06.18 |
---|---|
서브쿼리 - 다중열 (0) | 2020.06.18 |
서브쿼리 - 단일행 (0) | 2020.06.18 |
조인 (JOIN) - 리뷰 및 예제 (0) | 2020.06.18 |
조인 (JOIN) - 교차조인 (0) | 2020.06.18 |