일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 프로그래머스
- 에이블러
- kaggle
- kt aivle school
- ML
- cnn
- 웹크롤링
- 딥러닝
- httr
- SQLD
- SQL
- 시계열
- 하계인턴
- Ai
- 한국전자통신연구원 인턴
- r
- 가나다영
- 소셜네트워크분석
- 지도학습
- dx
- ETRI
- 서평
- 기계학습
- Eda
- 한국전자통신연구원
- ggplot2
- arima
- 에이블스쿨
- 에트리 인턴
- 하둡
- KT 에이블스쿨
- 시각화
- KT AIVLE
- hadoop
- matplot
- 머신러닝
- 다변량분석
- python
- 빅분기
- 빅데이터분석기사
Archives
- Today
- Total
소품집
[SQL 활용] Subquery(서브쿼리) 본문
728x90
Main Query와 Subquery
- Subquery는 select 문 내에 다시 select문을 사용하는 이중 SQL 문이다.
- Subquery의 형태는 **FROM 구에 SELECT문을 사용하는 인라인 뷰(VIEW)**와 **select 문에 subquery를 사용하는 스칼라 서브쿼리(Scala subquery)**등이 있다.
- select * from (select rownum num, name from student) a where num<5;
- from 구에 select 문을 사용하여 가상의 테이블을 만드는 효과를 얻을 수 있다.
- where 구에 select 문을 사용하면 서브쿼리라고 한다.
- select * from student where majorno = (select majorno from major where majorno = 10) ;
- 서브쿼리 밖에 있는 select 문은메인쿼리(Main Query)이다.
단일 행 서브쿼리와 다중 행 서브쿼리
- 서브쿼리는 반환하는 행 수 가 한 개인 것과 여러 개인 것에 따라서단일 행 서브쿼리와다중 행 서브쿼리로 분류된다.
- 단일 행 서브쿼리는 단 하나의 행만 반환하는 서브쿼리로비교 연산자(=, <, ≤, ≥, <>)를 사용해야 한다.
- 다중 행 서브쿼리는 여러 개의 행을 반환하는 서브쿼리로IN, ANY, ALL, EXISTS를 사용해야 한다.
단일 행 Subquery
다중 행 Subquery
IN
- IN은 반환되는 여러 개의 행 중에서 하나만 참이 되어도 참인 연산이다.
select ename, dname, sal
from emp, dept
where emp,deptno = dept.deptno
and emp.empno
IN (select empno from emp where sal > 20000);
ALL
- 메인쿼리와 서브쿼리의 결과과 모두 동일하면 참이 된다.
- DEPTNO가 20, 30 보다 작거나 같은 것을 조회한다.
select *
from emp
where deptno <= ALL(20,30);
EXISTS
- EXISTS는 서브쿼리로 어떤 데이터의 존재 여부를 확인하는 것이다.
- 즉, EXISTS의 결과는 참과 거짓으로 반환된다.
- 급여가 2000 이상 있으면 참이 반환되고, 없으면 거짓이 반환하는 쿼리를 작성해보자.
select ename, dname, sal
from emp, dept
where emp.deptno = dept.deptno
and exists (select 1 from emp where sal>2000);
스칼라 서브쿼리
- 스칼라 서브쿼리는 반드시 한 행과 한 컬럼만 반환하는 서브쿼리이다.
- 만약 여러 행이 반환되면 오류가 발생한다.
```sql
select ename as 'name', sal as 'salary',
(select avg(sal) from mp) as 'average'
from emp
where empno = 1000;
```
select empno, ename, job, sal,
(select grade from salgrade where e.sal
between losal and hisal) as salgrade,deptno,
(select dname from dept where e.deptno = dept.deptno) as dname
from emp e;
연관(Correlated) Subquery
- 연관 Subquery는 Subquery 내에서 Main Query 내의 칼럼을 사용하는 것을 말한다.
select *
from emp e1
where sal > (select min(sal) from emp e2 where e2.deptno = e1.deptno)
order by deptno, sal
select * from emp e1 where sal > (select min(sal) from emp e2 where e2.deptno = e1.deptno) order by deptno, sal
메인쿼리에 사용한 데이터를 서브쿼리에서 사용하고 서브쿼리의 결과 값을 다시 메인쿼리로 돌려주는 방식을 상호연관 서브쿼리라고 한다. 성능을 떨어뜨리는 원인이 될 수 있고, 사용빈도가 높지 않음.
728x90
'자격증 > SQL' 카테고리의 다른 글
[SQL 기본] DECODE와 CASE문 (0) | 2021.03.11 |
---|---|
[SQL 활용] WINDOW FUNCTION (윈도우 함수) (0) | 2021.03.10 |
[SQL 활용] 계층형 조회 (Connect by) (0) | 2021.03.10 |
[SQL] JOIN(조인) (0) | 2021.03.09 |
[SQL] 연산자 쓰임 및 우선순위 (0) | 2021.03.09 |
Comments