티스토리 뷰
서브쿼리란?
emp 테이블에서 scott 의 월급보다 높은 월급을 받는 사람의 정보를 출력하시오 라는 쿼리를 실행하려면 몇 개의 쿼리가 필요할까요. scott 의 월급을 구하는 쿼리 하나와 emp 테이블에서 scott 의 월급보다 높은 사람들의 정보를 출력하는 쿼리 하나 총 두 개의 쿼리가 필요합니다. 이렇게 하나의 결과를 얻기 위해 사용해야 하는 쿼리가 2 개 이상일 때 서브쿼리 를 사용합니다.
subquery 는 다른 select 문의 절에 포함되는 select 문 입니다. 서브쿼리는 select, where having, from 같이 다양한 sql 절에 배치할 수 있습니다. 보통 쿼리가 실행될 때에는 서브쿼리가 먼저 실행되고 이후에 메인 쿼리가 실행됩니다.
서브쿼리는 그 출력값에 따라 단일 행과 복수 행으로 나누어집니다.
단일 행 서브쿼리
단일 행 서브쿼리는 한 행만 반환하는 쿼리를 의미 합니다. 그렇기 때문에 하나의 값과 비교하는 단일 행 비교 연산자를 사용합니다.
select * from empwhere sal > (select salfrom empwhere ename = 'SCOTT') ;
'SCOTT' 의 월급 - 3000
'SCOTT' 의 월급보다 높은 사원의 정보
서브쿼리 절은 다음처럼 두 개의 쿼리가 실행되는 구조 입니다. 먼저 'SCOTT' 의 월급을 구해서 3000 보다 월급이 높은 사원을 출력하는 구조 입니다.
복수 행 서브쿼리
서브쿼리가 두 개 이상의 행을 반환하는 경우를 복수 행 서브쿼리라고 칭합니다. 복수 행을 반환하는 경우에는 단일 행 비교 연산자를 사용할 수 없으며 복수 행 비교 연산자를 사용해야 합니다.
* ANY 와 ALL 은 단일행 연산자와 함께 사용합니다.
select * from emp
where sal in ( select sal from emp
where deptno = 10 );
부서번호 10인 사원들의 월급 리스트
월급이 위의 리스트 중 하나라도 같은 사원 정보
단일 행 서브쿼리와 같은 구조로 사용할 수 있습니다. 다른 부분은 여러 값들을 반환하기 때문데 다른 연산자를 사용하는 부분이겠지요.
select * from emp
where sal = ANY ( select sal from emp
where deptno = 10 );
= ANY 는 위의 IN 과 정확히 일치 합니다. 그래서 결과 값도 동일하게 출력됩니다.
select * from empwhere sal <= any ( select sal from empwhere deptno = 20 );
부서번호 20인 사원들의 월급 리스트
월급이 위의 리스트 중 하나보다 작은 사원들의 정보
결과를 보면 월급이 3000 보다 작은 사원은 모두 출력된 것을 알 수 있습니다. 서브쿼리의 결과가 800, 2975, 3000, 1100, 3000 이기 때문에 이 중 어떤 것보다 작기만 하면 출력됩니다. 그래서 <= any 는 서브쿼리의 결과 중 최대값보다 작은 것을 출력하게 합니다. 반대로 >= any 는 서브쿼리의 결과 중 최소값보다 크면 출력하게 합니다.
select * from empwhere sal <= all ( select sal from empwhere deptno = 20 );
부서번호 20인 사원들의 월급 리스트
월급이 위의 리스트 값 전부보다 작은 사원들의 정보
any 를 all 로 바꾼 것 뿐인데 결과가 많이 달라졌습니다. <= all 은 서브쿼리 결과값 전체보다 작거나 같은 것을 의미 하기 때문에 결과값의 최소값보다 작은 것을 출력하라는 의미가 됩니다. 반대로 >= all 은 결과값의 최대값보다 큰 것을 출력하라는 의미가 됩니다.
부족한 블로그에 방문해 주셔서 감사합니다.
잘못된 부분이나 질문이 있으시면
댓글로 말씀해주세요.
금방 확인하고 피드백 드리겠습니다.
좋은 하루 되세요. ^^
'#Archive' 카테고리의 다른 글
반드시 알아야하는 알고리즘 top 8 - 8. 몬테 카를로 알고리즘 (0) | 2018.01.04 |
---|---|
[SQL] 10. 테이블 늘려나가기 - 집합 연산자 (0) | 2018.01.03 |
[ORACLE] ORA-12560 : TNS 프로토콜 어댑터 오류 해결법 (9) | 2018.01.01 |
반드시 알아야하는 알고리즘 top 8 - 7. 최단거리 알고리즘 (7) | 2017.12.30 |
반드시 알아야하는 알고리즘 top 8 - 6. 탐욕 알고리즘, 그리디 알고리즘 (3) | 2017.12.29 |
- Total
- Today
- Yesterday
- 강원도여행
- 알고리즘
- 가평여행
- sql
- 영월여행
- Oracle
- 여름캠핑
- 가족여행
- 서울근교캠핑
- bukhansannationalpark
- 캠핑초보
- 파이썬
- 가평캠핑
- Koreancuisine
- 여름휴가추천
- python
- 자연힐링
- 카카오
- 가족캠핑
- 반려견캠핑
- 계곡캠핑
- 머신러닝
- 글램핑
- 커플여행
- 영월캠핑
- SeoulTravel
- 백준
- 강원도캠핑
- 캠핑장추천
- 여름휴가
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |