🧩SUBQUERY 서브쿼리
- 쿼리안의 쿼리
- 하나의 쿼리문으로 받아온 데이터를 바탕으로 다른 내용 검색 할 때
- 1) 사전에 추출된 내용에서 재 검색
- 2) 검색된 내용을 가상 컬럼을 만들어서 사용
- 서브쿼리 사용이유 ? 가져온 데이터를 재 정제하기 위함
사용해보기
--> 부서테이블 생성
create table dept( -- 부서
deptno varchar(10) primary key
,deptname varchar(20)
,loc varchar(10)
);

--> 사원테이블 생성 (부서테이블의 deptno를 외래키로)
create table emp( -- 사원
ename varchar(20)
,job varchar(50)
,deptno varchar(10)
,hiredate date
,FOREIGN KEY (deptno) references dept(deptno)
);

문제1 >> 'han' 의 근무 부서명은?
-- emp 테이블에서 han 의 deptno 를 알아낸다.
select deptno from emp where ename = 'han'; -- 1
-- deptno 를 통해 dept 의 deptname 을 알아낸다.
select deptname from dept where deptno = '1';
-- 해결>
select deptname from dept where deptno = (select deptno from emp where ename = 'han');

문제2>> 부서 위치가 'la' 또는 'boston' 인 부서 소속의 사람들의 이름과 직책은?
select ename,job from emp where deptno = (select deptno from dept where loc in('la','boston');

문제3>> 직책(job)이 manager 인 사원들(여러명일 경우 빠른 직원 기준)보다 입사일이 빠른 직원(ename, job, hiredate)은?
select ename, job, hiredate from emp
where hiredate < (select min(hiredate) from emp where job = 'manager') order by hiredate;

문제 4>> 부서별(deptno, deptname)로 직원이 몇명인지 확인
1) 상하 관계 쿼리
- 서브쿼리의 결과물이 본 쿼리의 일부로 사용될 경우
- 컬럼, 테이블 로 활용이 된다.
select d.deptno
, d.deptname
, (select count(deptno) from emp e where e.deptno=d.deptno)as cnt
from dept d;

2) group by 활용
select deptno
,count(deptno)
,(select deptname from dept d where d.deptno= e.deptno)
from emp e group by deptno;
