본문 바로가기
Computer Science/Database

[SQL] SOME, ALL, EXISTS, NOT EXISTS, UNIQUE, WITH

by JuHy_ 2020. 6. 16.
 

[SQL] Subquery 사용법

Subquery란? Subquery는 하나의 쿼리 안에 들어가 있는 다른 쿼리를 말한다. 이 때, SELECT 절에서 사용되는 Subquery는 Scalar Subquery, FROM 절에서 사용되는 Subquery는 Inline View, 그리고 WHERE 절에서 사..

ju-hy.tistory.com

Subquery를 사용하면 쿼리 안에서 다른 쿼리를 사용하여 불러온 데이터를 활용할 수 있다.

조건문에서의 단순한 비교 연산이나 IN 키워드 외에 더 다양한 Subquery 활용법을 알아보자.

 

 

 

SOME, ALL

SOME 키워드를 사용하면 조회한 데이터에 하나라도 조건을 만족하는지,

ALL 키워드를 사용하면 조회한 모든 데이터가 조건을 만족하는지 검사할 수 있다.

 

SELECT name
FROM instructor
WHERE salary > SOME(SELECT salary 
		FROM instructor 
		WHERE dept_name='Comp.Sci.')

예를 들어, 위 쿼리는 컴퓨터공학과 교수 최소 한명보다 연봉이 높은 교수들의 이름을 조회하는 쿼리이다.

 

SELECT name
FROM instructor
WHERE salary > ALL(SELECT salary 
		FROM instructor 
		WHERE dept_name='Comp.Sci.')

반대로, ALL 키워드를 붙이면 모든 컴퓨터공학과 교수들보다 연봉이 높은 교수들의 이름을 조회할 수 있다.

 

 

 

EXISTS, NOT EXISTS

EXISTS, NOT EXISTS 키워드를 통해서는 Subquery의 결과가 존재하는지 존재하지 않는지 검사할 수 있다.

 

SELECT name
FROM instructor AS A
WHERE dept_name='Comp.Sci.' AND
	EXISTS (SELECT *
		FROM instructor AS B
		WHERE A.name = B.name)

예를 들어, 위 쿼리는 컴퓨터공학과 교수 중 동명이인이 존재하는 교수를 찾는 쿼리이다.

 

SELECT name
FROM instructor AS A
WHERE dept_name='Comp.Sci.' AND
	NOT EXISTS (SELECT *
		FROM instructor AS B
		WHERE A.name = B.name)

반대로, 위 쿼리는 컴퓨터공학과 교수 중 동명이인이 존재하지 않는 교수를 찾는 쿼리이다.

 

 

 

UNIQUE

UNIQUE 키워드를 통해서는 Subquery의 결과가 중복된 항목을 갖고있는지 검사할 수 있다.

 

SELECT A.name
FROM instructor AS A
WHERE UNIQUE(SELECT B.name
	FROM instructor AS B
	WHERE A.name = B.name)

예를 들어, 위 쿼리는 동명이인이 존재하는 교수들의 이름을 출력하는 쿼리이다.

 

 

 

WITH

WITH 키워드를 사용하면 Subquery의 결과를 새로운 테이블로 만들어 사용할 수 있다.

 

WITH avg_salary(value) AS
	(SELECT AVG(salary) FROM instructor)
SELECT salary
FROM instructor, avg_salary
WHERE instructor.salary > avg_salary.value

예를 들어, 위 쿼리는 교수들의 평균 연봉을 계산하여 avg_salary 테이블을 만든 뒤,

이를 통해 평균 연봉보다 높은 연봉의 교수들을 조회하는 쿼리이다.