SELECT empName, salary, deptNo
FROM employee
WHERE deptNo =(SELECT DISTINCT deptNo
FROM department
WHERE salary > 500);
SELECT empName, salary, deptNo
FROM employee
WHERE deptNo IN (SELECT DISTINCT deptNo
FROM employee
WHERE salary > 500);
IN을 통해 다중행 서브쿼리를 조회할 수 있다.
select empName, salary from employee
where salary > (select max(salary)
from employee
where deptNo = 30);
-- 30번 부서에서 근무하는 모든 사원들보다 더많은 급여를 받는 사원의 이름과 급여 조회
select empName, salary from employee
where salary > ALL (select salary from employee
where deptNo = 30);
같은 의미이다.
SELECT MIN(salary)
FROM employee
WHERE deptNo = 30;
SELECT empName, salary
FROM employee
WHERE salary > (SELECT MIN(salary)
FROM employee
WHERE deptNo = 30);
-- 30번 부서의 급여중 어느 하나보다 크면 사원의 이름과 급여를 조회
SELECT salary
FROM employee
WHERE deptNo = 30;
SELECT empName, salary
FROM employee
WHERE salary > ANY (SELECT salary
FROM employee
WHERE deptNo = 30);
deptNo
가30
에 해당하는 값 중 어느 하나보다 큰 것이 추출된다.
SELECT empName, salary
FROM employee
WHERE salary > SOME (SELECT salary
FROM employee
WHERE deptNo = 30);
SOME
도ANY
와 동일한 기능을 한다.
: IN 연산자 보다 쿼리 속도가 빠르다.
EXISTS
가 참일 경우SELECT
,FROM
의 결과가 출력된다.
SELECT *
FROM department
WHERE EXISTS (SELECT *
FROM employee
WHERE employee.deptNo = 10);
SELECT *
FROM department
WHERE EXISTS (SELECT *
FROM employee
WHERE employee.deptNo = department.deptNo
);
SELECT empName, e.deptNo from employee e
WHERE e.deptNo IN(SELECT d.deptNo
FROM department d
WHERE e.deptNo = d.deptNo);
EXISTS는 참, 거짓만 따지는 연산자로 IN보다 연산속도가 빠르다.
강의: ms sql 2014 제대로 배우기 1