다중쿼리

Hyuntae Jung·2022년 7월 26일
0

MS SQL

목록 보기
20/41
post-thumbnail

1. IN 연산자

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을 통해 다중행 서브쿼리를 조회할 수 있다.

2. ALL 연산자

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

같은 의미이다.

3. ANY 연산자

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

deptNo30에 해당하는 값 중 어느 하나보다 큰 것이 추출된다.


SELECT empName, salary
  FROM employee
WHERE salary > SOME (SELECT salary
								   FROM employee
								 WHERE deptNo = 30);

SOMEANY와 동일한 기능을 한다.

4. EXISTS 연산자

: 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
					);

5. EXISTS와 IN의 차이

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

0개의 댓글