1.서브쿼리
-- 1.서브쿼리 (where)
-- 중복해서 안만드는, 변경에 대처하기 힘들다.
-- 연관관계를 가지게 테이블을 두개로 만든다.
-- (다른 테이블을 참조하는 키를 FK)
-- (내 테이블에서 행을 유일하게 결정하는 키 pk)
-- DALLAS에 사는 직원을 출력해주세요.
select *
from emp
where deptno = 20;
select deptno
from dept
WHERE LOC ='DALLAS';
select *
from emp
where DEPTNO = (select DEPTNO
from dept
where LOC = 'DALLAS');
-- RESEARCH 부서의 직원을 출력해주세요
select *
from dept
where dname ='RESEARCH';
select *
from emp
where deptno = (select deptno
from dept
where dname = 'RESEARCH');
2.인라인 뷰
-- 2. 인라인뷰 (from절에 들어가는 subquery)
select e.*
from (
select ename, sal*12 '연봉'
from emp
) e
where e.연봉 = 9600;
select *
from
(
select avg(sal) 'avg_sal'
from emp
group by DEPTNO
) e
where e.avg_sal < 2000;
-- having은 그룹된 결과만을 가지고 사용한다
3.스칼라 서브쿼리
-- 3. 스칼라 서브쿼리 (select 절에 있는 subquery)
select *
from emp
order by deptno;
select d.deptno, d.dname, d.loc, (select count(*)
from emp
where DEPTNO = d.deptno) '직원수'
from dept d;
select count(*)
from emp
where DEPTNO = 10;

Share article