서브쿼리 종류 3가지
- 1. 서브쿼리 (where)
- 2. 인라인뷰 (from절에 들어가는 subquery)
- 3. 스칼라 서브쿼리 (select절에 있는 subquery)
1. 서브쿼리 (where)
-- 1. 서브쿼리 (where)
-- 중복해서 만들지 않는다. 변경에 대처하기 힘들다.
-- 연관관계를 가지게 테이블을 두개로 만든다.
-- (다른 테이블을 참조하는 키를 FK(참조키))
-- (내 테이블에서 행을 유일하게 결정하는 키 PK)
-- RDB - Relation DataBase
-- DALLAS에 사는 직원을 출력해주세요.
select *
from emp
where deptno = 20;
select deptno
from dept
where loc = 'DALLAS';
-- where절에 들어가는 것, ()
-- 실행된 return값이 들어가는 것
select *
from emp
where deptno = (select deptno
from dept
where loc = 'DALLAS');
-- 리서치부서 인간들 찾기
select *
from dept;
select *
from emp
where deptno = 20;
select deptno
from dept
where DNAME = 'RESEARCH';
select *
from emp
where deptno = (select deptno
from dept
where DNAME = 'RESEARCH');
-- 김재수의 교수님 이름과 이메일 찾기
select profno
from student
where name = '김재수';
select name, email
from professor
where profno = (
select profno
from student
where name = '김재수');2. 인라인뷰 (from절에 들어가는 subquery)
-- 2. 인라인뷰 (from절에 들어가는 subquery)
select ename, sal*12 '연봉'
from emp
where 연봉 = 9600;
select e.*
from (
select ename, sal*12 '연봉'
from emp
) e -- >e라고 하는 테이블로 지정, 별칭임
where e.연봉 = 9600;
-- 예제) 2000보다 작은 연봉 찾기
select *
from
(
select avg(sal) 'avg_sal'
from emp
group by deptno
) e
where e.avg_sal < 2000;3. 스칼라 서브쿼리 (select절에 있는 subquery)
-- 3. 스칼라 서브쿼리 (select절에 있는 subquery)
select *
from dept;
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