[DB] Sub Query
- DB
- 2017. 11. 15. 14:32
● Sub Query 1) 다른 Query문에 포함됨 Query 2) 반드시 ( ) 를 사용 3) 연산자의 오른쪽에 와야 한다 4) order by 사용 불가 5) 종류 - Subquery - 상관 Subquery : 서브쿼리로만 실행했을때 실행이 안되고 바깥의 쿼리가 있어야 실행가능, 성능차이 때문에 많이 쓰이지 않음 6) 유형 - 단일행 : 서브쿼리의 결과값이 하나일때 사용 - 다중행 : 서브쿼리의 결과값이 여러개일때 사용 - 다중열 7) 연산자 - 단일행 <, >, <=, >=, =, !=, <>, ... - 다중행 in, any, all, exists, not ▶ Sub Query TEST 1) scott의 급여보다 더 많이 받는 직원의 이름, 업무, 급여를 조회 select sal from emp where ename='SCOTT'; select ename, job, sal from emp where sal>3000; Sub Query 사용↓ select ename, job, sal from emp where sal>(select sal from emp where ename='SCOTT'); 2) 사번이 7521의 업무와 같고, 급여가 7934보다 많은 직원의 사번, 이름, 업무, 급여 조회 select job from emp where empno=7521; -- SALESMAN select sal from emp where empno=7934; -- 1300 select empno, ename, job, sal from emp where job='SALESMAN' and sal>1300; Sub Query 사용↓ select empno, ename, job, sal from emp where job=(select job from emp where empno=7521) and sal>(select sal from emp where empno=7934); 3) 업무별로 최소급여를 받는 직원의 사번, 이름, 급여, 부서번호 조회 select min(sal) from emp group by job; select empno, ename, sal, deptno from emp where sal=800 or sal=1250 or sal=5000 or sal=2450 or sal=3000; select empno, ename, sal, deptno from emp where sal in(800, 1250, 5000, 2450, 3000); Sub Query 사용(in)↓ select empno, ename, sal, deptno from emp where sal in(select min(sal) from emp group by job); 4) 업무별로 최소금액보다 많이 받는 직원의 사번, 이름, 급여, 부서번호 조회 select empno, ename, sal, deptno from emp where sal>800 or sal>1250 or sal>5000 or sal>2450 or sal>3000; Sub Query 사용(any=or)↓ select empno, ename, sal, deptno from emp where sal > any(select min(sal) from emp group by job); 5) 업무별 최대금액 이상 받는 직원의 사번, 이름, 업무, 부서번호 조회 select empno, ename, sal, deptno from emp where sal>=1300 and sal>=1600 and sal>=5000 and sal>=2975 and sal>=3000; Sub Query 사용(all=any)↓ select empno, ename, sal, deptno from emp where sal >= all(select max(sal) from emp group by job); 6) 급여와 보너스가 30번 부서에 있는 직원의 급여와 보너스가 같은 직원에 대해 사번, 이름, 부서번호, 급여, 보너스 조회 MILLER의 데이터 수정 UPDATE emp SET sal = 1500, comm=300 WHERE ename='MILLER';
select ename, deptno, sal, com from emp where deptno=30; select empno, ename, deptno, sal, comm from emp where sal in(select sal from emp where deptno=30) and comm in(select sal from emp where deptno=30); Sub Query 사용(다중열)↓ select empno, ename, deptno, sal, comm from emp where (sal,comm) in(select sal, comm from emp where deptno=30); 7) 적어도 한명의 직원으로부터 보고를 받을 수 있는 직원의 이름, 업무, 입사일자, 급여를 조회 select distinct mgr from emp; select ename, job, hiredate, sal from emp where empno=7839 or empno=7782 or empno=7698 or empno=7902 or empno=7566 or empno=7788; Sub Query 사용(exist)↓ select ename, job, hiredate, sal from emp e where exists(select * from emp where e.empno=mgr); -> e는 emp테이블의 별명을 준것이다. |
'DB' 카테고리의 다른 글
[DB] JOIN (0) | 2017.11.16 |
---|---|
[DB] SQL 문제3 (0) | 2017.11.16 |
[DB] DML (0) | 2017.11.15 |
[DB] SQL문제2 (0) | 2017.11.14 |
[DB] SQL 문제 (0) | 2017.11.13 |