728x90

서브쿼리란 ? 쿼리 안의 쿼리를 말함/ 조건 2개를 보여줘야할 때 사용

 

단일행 서브쿼리 : 수행결과가 오직 하나의 로우만 반환하는 서브쿼리

 

예제)

show user
//scott의 근무 부서는 어디?
//scott은 emp. 근무부서는 dept에 있을때
select deptno,dname from dept
where deptno=(select deptno from emp
              where ename='SCOTT');

//scott와 같은 부서에서 근무하는 직원이름 부서는?
select ename, deptno from emp
where deptno=(select deptno from emp where ename='SCOTT');

//s와 동일 직급가진 직원이름은?
select ename,job from emp
where job=(select job from emp where ename='JONES');

//s 급여와 동일하거나 더 많이 받는 사원명, 급여는?
select sal from emp where ename='SCOTT';
select ename,sal from emp
where sal>=(select sal from emp where ename='SCOTT');

다중행 서브쿼리 : 서브쿼리에서 반환되는 행이 하나 이상인 경우

다중행 연산자와 함께 사용해야함

-in : 비교조건이 서브쿼리 결과중 하나라도 일치할 때 참

-any, some : 결과와 하나 이상이 일치하면 참

-all : 모두 일치하면 참

-exist : 만족하는 값이 하나라도 존재하면 참

 

예제) 

//월급이 3000이상인 직원이름, 월급, 부서

select ename,sal,deptno from emp
where sal>=(select distinct sal from emp where sal=3000);

//부서별로 급여를 많이 받는사원

select deptno, max(sal) from emp 
group by deptno;

//직급이 매니저인 부서번호, 부서명, 위치
select deptno, dname,loc
from dept
where deptno in (select deptno from emp where job='MANAGER');

//30번 부서 최고 월급자보다 많이 받는 사람
select ename,sal from emp
where sal> (select max(sal) from emp where deptno=30);

728x90

'MS SQL' 카테고리의 다른 글

SQLD transaction 관리  (0) 2021.11.10
SQL rollup, cube 함수  (0) 2021.11.10
SQL - 트랜잭션  (0) 2021.11.03
SQL 명령어 분류 - DDL, DML, DCL, TCL  (0) 2021.11.03
SQL- 그룹함수(group by)  (0) 2021.11.03

+ Recent posts