Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 프로그래머스
- Oracel
- 실습
- R
- 알고리즘
- Kaggle
- 파이썬
- Numpy
- seaborn
- oracle
- 오라클
- 머신러닝
- 코딩테스트
- 빅분기
- SQL
- pandas
- 실기
- 데이터 분석
- python3
- 카카오
- 튜닝
- level 1
- sklearn
- Python
- matplotlib
- level 2
- 빅데이터 분석 기사
Archives
- Today
- Total
라일락 꽃이 피는 날
[Oracle] exists 를 활용한 서브 쿼리 본문
728x90
예제 1. 부서 테이블에서 부서 번호, 부서명, 부서 위치를 출력하는데, 사원 테이블에 존재하는 부서 번호에 대한 것만 출력
-- 1. exists 문을 사용하지 않고 수행
select *
from dept
where deptno in (select deptno
from emp);
서브 쿼리를 수행했을 때, 부서 번호 14개가 메인 쿼리로 리턴된다.
부서 번호의 종류가 3가지밖에 없지만 emp 테이블이 1억 건이라면,
위의 SQL 은 수행 시간이 불필요하게 오래 걸릴 것이다.
-- 2. exists 문은 사용해서 수행
select *
from dept d
where exists (select 'X'
from emp e
where e.deptno = d.deptno);
in 이 아니라 위와 같이 exists 문을 사용하게 되면 메인 쿼리부터 작동된다.
exists 문은 메인 쿼리의 테이블 건수가 몇 건 안 되고 서브 쿼리의 건수가 많을 때 유용한 SQL 문이다.
dept 테이블이 4건 밖에 없으므로 부서 번호가 emp 테이블에 존재하기만 하면 끝까지 스캔하지 않고 멈춰버린다.
예제 2. 부서 테이블에는 존재하는 부서 번호이나, 사원 테이블에는 존재하지 않는 부서 번호를 출력
select deptno
from dept d
where not exists (select 'X'
from emp e
where e.deptno = d.deptno);
728x90
'프로그래밍 > Oracle' 카테고리의 다른 글
[Oracle] 데이터 입력/수정 (0) | 2022.06.03 |
---|---|
[Oracle] having/from/select 절의 서브 쿼리 (0) | 2022.06.02 |
[Oracle] 다중 컬럼 서브 쿼리 (0) | 2022.06.02 |
[Oracle] 단일행/다중행 서브 쿼리 (0) | 2022.06.02 |
[Oracle] 집합 연산자 (0) | 2022.06.02 |