Database/Theory

[Database/Theory]08. SQL syntax(6) - Sub query

양승길 2016. 6. 7. 22:30

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