-
[MySQL/2일차] 서브쿼리데이터베이스 DB/MySQL 2023. 1. 25. 14:10
서브쿼리
하나의 sql문 안에 다른 sql문이 중첩된 형태
-- 서브쿼리 -- -- JONES 보다 급여가 높은 사원 조회 -- select * from emp where sal > (select sal from emp where ename='JONES');
단일행 서브쿼리
실행 결과가 단 하나의 행인 서브쿼리
-- blake보다 입사가 빠른 회원 목록 -- select * from emp where hiredate < (select hiredate from emp where ename='BLAKE'); /* 20번 부서에 속한 사원 중 전체 사원의 평균 급여보다 높은 급여를 받는 사원 정보와 소속 부서 정보 함께 조회하기 */ select e.empno, e.ename, e.job, e.sal, d.deptno, d.dname, d.dname, d.loc from emp e inner join dept d on e.deptno = d.deptno where e.deptno = 20 and e.sal > (select avg(sal) from emp);
다중행 서브쿼리
실행 결과 행이 여러 개인 서브쿼리
in
-- 각 부서 별 최고 급여를 받는 사원 조회 - select * from emp where sal in(select max(sal) from emp group by deptno);
any / some - 서브쿼리의 모든 결과 중 하나만 true여도 true
-- 각 부서 별 최고 급여를 받는 사원 조회 - select * from emp where sal = any(select max(sal) from emp group by deptno); select * from emp where sal = some(select max(sal) from emp group by deptno);
-- 30번 부서 사원들의 최대 급여보다 적은 급여를 받는 사원 정보 -- select * from emp where sal < any(select sal from emp where deptno=30);
all - 서브쿼리의 모든 결과가 true여야 true
-- 부서번호가 30인 사원들의 최소 급여보다 더 적은 급여를 받는 사원 출력 -- select * from emp where sal < all(select sal from emp where deptno=30);
exists - 서브쿼리의 결과 값이 하나 이상 존재하면 조건식이 모두 true, 존재하지 않으면 모두 false
-- 부서번호가 10인 사원을 조회하였고, 10인 사원이 존재하므로 모든 사원의 정보 출력 -- select * from emp where exists(select dname from dept where deptno=10);
from 절에 사용하는 서브쿼리 Inline view
-- 10번부서 사원들의 정보 -- select e10.empno, e10.ename, e10.deptno, d.dname, d.loc from (select * from emp where deptno=10) e10 inner join (select * from dept) d
select 절에 사용하는 서브쿼리 scalar subquery
select empno, ename, job, sal, (select grade from salgrade where e.sal between losal and hisal) as 'salgrade', deptno from emp e;
연습문제
/* 서브쿼리를 이용하여 emp 테이블의 사원 중에 10번 부서에 속한 모든 사원들보다 일찍 입사한 사원 */ select * from emp where hiredate < all(select hiredate from emp where deptno=10);
'데이터베이스 DB > MySQL' 카테고리의 다른 글
[MySQL/3일차] 뷰 (0) 2023.01.26 [MySQL/3일차] 키, 제약조건 (0) 2023.01.26 [MySQL/2일차] DDL, DML(select 제외) (0) 2023.01.25 [MySQL/2일차] 외부 조인, 상호 조인 (0) 2023.01.25 [MySQL/1일차] select, 연산자, 함수, 조인 (0) 2023.01.19