08. SQL syntax(6) - Sub Query
Main Query안에 확장된 또 다른 Query문
DML, Query과 CREATE TABLE, VIEW에서 이용가능
1. Single Row Sub Query :
한 가지의 값을 전달하는 Query
1 2 3 4 5 | select id, name from c_emp where dept_id=( select dept_id from c_emp where name='이순신'); | cs |
1 2 3 4 | select id, name, salary from c_emp where salary < ( select avg(salary) from c_emp); | cs |
2. Multiple Row Sub Query :
한 가지 이상의 값들을 전달하는 Query
1 2 3 4 5 | select name, dept_id from c_emp where dept_id in (select id from s_dept where dept_name in('총무부', '영업부') ); | cs |
1 2 3 4 5 | select name, dept_id from c_emp where dept_id in (select id from s_dept where dept_name in('총무부', '영업부') ); | cs |
* 필요성
해당되는 값이 1개 이상인 것을 요구할때
3. Multiple Column Sub Query :
한 가지의 값을 전달하는 Query
1 2 3 4 5 | select name, salary, dept_id from c_emp where (dept_id, salary) in (select dept_id, min(salary) from c_emp group by dept_id); | cs |
* 필요성
Sub Query는 해당 값들만을 이용하여 Query를 처리한다.
이에 대하여 해당되는 Column의 해당되는 값을 맞춰야 된다.
1 2 3 4 5 | select name, salary, dept_id from c_emp where salary in (select min(salary) from c_emp group by dept_id); | cs |
1 | select min(salary) from c_emp group by dept_id; | cs |
4. Inline View :
From에 적용하는 Sub Query. Virtual Table을 작성한다.
1 2 3 4 5 | select c.name, c.salary, c.dept_id from c_emp c, (select dept_id, min(salary) min from c_emp group by dept_id) vt where c.dept_id=vt.dept_id and c.salary = vt.min; | cs |
반응형
'Database > Theory' 카테고리의 다른 글
[Database/Theory] 10. Join(1) (0) | 2016.06.16 |
---|---|
[Database/Theory] 09. SQL syntax(7) - Rownum (0) | 2016.06.08 |
[Database/Theory]07. SQL syntax(5) -Join (0) | 2016.06.07 |
[Database/Theory]06. SQL syntax(4) - Constraint, rest (0) | 2016.06.07 |
[Database/Theory]05. SQL syntax(3) - Function (0) | 2016.06.06 |