- 오라클 11g XE 버전입니다
- 오라클 샘플 계정 HR에 접속한 후 진행했습니다 ( 아래 참고 )
> https://hongdori2.tistory.com/4
1. 서브쿼리 ( sub query )
( select .. from... ) 의 출력 컬럼 값을 select, from, where 등의 문장에 다시 활용 하는 것입니다
2. where 서브쿼리
- 다중행과 단일행을 비교할 때 any와 all이 유용하다
- < or > any( a, b, c, ... ) : a, b, c, ... 중 어떤 값보다 작은, 큰
- < or > all( a, b, c, ... ) : a, b, c, ... 중 모든 값보다 작은, 큰
- = in( a, b, c, ... ) : a, b, c, ... 의 값들에 속하는
예시)
select first_name, salary
from employees
where salary < any(select salary from employees where first_name='Peter');
> Peter라는 사람들이 동명이인으로 여러명 있을때, Peter 이름을 가진 사람들의 급여보다 높은 급여를 가진 사람들의 이름과 급여를 출력
3. from 서브쿼리
- rownum : 출력 열에 번호를 생성합니다
예시)
select r, first_name, hire_date
from (select rownum r, a.* from (select * from employees order by hire_date desc) a )
where r>=11 and r<=20;
> 사원 입사일 기준으로 최근 입사자 11등~20등 출력
select에 rownum을 사용하면
from → where → group by → having → select → order by
순서로 실행되는데 where가 먼저 실행되고 select가 실행되므로
select rownum, first_name, hire_date
from employees
where rownum >=11 and rownum <=20;
이라고 쓰면 행이 뒤죽박죽 되어 버린다
위 예시처럼 서브쿼리를 이용해 where보다 먼저 실행되는 from절에서 정렬 + rownum 을 생성한 테이블로 바꿔준다
4. select 서브 쿼리
- select 서브쿼리의 활용
예시)
select first_name, min(salary) from employees;
> 에러가 난다. 왜냐하면 first_name은 다중행이고 min(salary)는 단일행이기 때문이다.
select first_name, (select min(salary) from employees);
> 라고 써주면 error가 나지않고 min(salary) 값이 first_name 행만큼 나온다.
'DB > Oracle' 카테고리의 다른 글
[Oracle] 오라클 시퀀스, 뷰, synonym, 오라클 계정 생성 (0) | 2020.06.02 |
---|---|
[Oracle] 오라클 테이블 생성, 수정, 삭제 - DQL, DML, DDL, TCL (0) | 2020.06.02 |
[Oracle] 오라클 테이블 조회 10 - 오라클 join, 테이블 별칭, from, 등가 조인, 비등가 조인, 자체 조인, 외부 조인, 셀프 조인 (0) | 2020.06.01 |
[Oracle] 오라클 테이블 조회 9 - 다중행 함수, group by, having, sum, avg, max, min, count (0) | 2020.05.31 |
[Oracle] 오라클 테이블 조회 8 - 조건 함수, decode, case (0) | 2020.05.31 |
댓글