SMALL
안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
다중행 단일컬럼 서브쿼리
- 서브쿼리 결과가 n행 1열인 경우
- 값이 여러 개이므로 =, !=, >, < 등의 연산자는 사용 불가
- in, any / some, all, exists 연산자 사용 가능
(서브쿼리의 결과는 여러 행이지만, in연산자 안에서 가로로 나열됨)
송종기, 하이유 사원과 같은 부서원 조회 (사원명, 부서코드)
select
emp_name,
dept_code
from
employee
where
dept_code in (select dept_code from employee where emp_name in ('송종기', '하이유'));
차태연, 박나라, 이오리와 같은 직급의 사원 조회 (사원명, 직급명)
select
e.emp_name, j.job_name
from
employee e join job j
using(job_code)
where
job_code in (
select
job_code
from
employee
where
emp_name in ('차태연', '박나라', '이오리')
);
☞ any(...), some(...)
- 조건을 만족하는 값이 하나라도 있으면 true
select
emp_name, salary
from
employee
where
-- salary > any(3000000, 4000000, 5000000);
salary > some(3000000, 4000000, 5000000);
any()와 some()은 명칭만 다를 뿐 동일한 기능을 하기 때문에 결과 값이 동일합니다.
조건을 만족하는 값이 하나라도 있으면 true이기 때문에 위 코드에서는 최소값보다 크다면 true겠죠.
☞ all(...)
- 모든 값이 조건을 만족해야 true
select
emp_name, salary
from
employee
where
salary > all(3000000, 4000000, 5000000);
all()은 모든 값이 조건을 만족해야 true이므로 위 코드에서는 최대값보다 크면 true이기 때문에 500만원 이상의 월급을 받는 선동일, 송종기가 출력되었습니다.
D5의 모든 부서원의 급여보다 많은 급여를 받는 사원 조회
select
emp_name, dept_code, salary
from
employee
where
salary > all(
select
salary
from
employee
where
dept_code = 'D5'
);
'D5'에서 가장 높은 급여와 비교하기 때문에 > 연산자 사용 시 D5 부서의 급여에 대한 정보는 나오지 않을 것입니다.
>= 연산자를 사용한다면 'D5' 부서의 가장 높은 급여를 받는 사람의 정보도 같이 출력 될 것입니다.
LIST
'DataBase > Oracle' 카테고리의 다른 글
SUB-QUERY) 상호연관 서브쿼리 (exists, not exists) (0) | 2022.04.21 |
---|---|
SUB-QUERY) 단일/다중행 다중컬럼 서브쿼리 (0) | 2022.04.21 |
SUB-QUERY) 단일행 단일컬럼 서브쿼리 (0) | 2022.04.21 |
SUB-QUERY) 서브쿼리란?, 서브쿼리의 조건 (0) | 2022.04.21 |
SET OPERATOR) SET OPERATOR 조건, 집합 연산자 종류 (union, union all, intersect, minus) (0) | 2022.04.19 |