본문 바로가기

SQL & DB

DB) SQL 기초 (SUBQUERY(서브쿼리) 사용이유와 사용법)

🧩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;