DataBase

서브 쿼리 종류

Beencle 2023. 3. 22. 10:18

서브 쿼리의 종류는 3가지로 나뉘는데 사용하는 위치에 따라 나뉜다.

첫번째, SELECT절에서 사용되는 스칼라 서브 쿼리

스칼라 영어로 한번에 한가지라는 뜻으로 하나의 행을 반환하는 서브쿼리이다.

SELECT *,
(SELECT dept_name FROM Departments d WHERE d.dept_id = e.dept_id)    -- 이 부분이 스칼라 서브쿼리
FROM Employees e

이처럼 Employees의 테이블의 없는 컬럼을 다른 테이블과 조인하여 사용이 가능하다.

 

두번째, FROM절에서 사용되는 인라인 뷰

인라인 뷰는 FROM절에서 사용되는 서브쿼리로 하나의 임시 테이블을 만든다고 생각하면 된다.

그렇게 때문에 메인 쿼리에서는 인라인뷰(서브쿼리)에서 SELECT한 컬럼만 사용이 가능하다.

SELECT e.*, d.dept_name
FROM Employees e, 
     (SELECT dept_id, dept_name FROM Departments) d    -- 이 부분이 인라인뷰
WHERE e.dept_id = d.dept_id

위의 예제에서는 하나의 테이블과 인라인 뷰를 사용하여 조인하였기 때문에 두 테이블의 컬럼을 모두 사용한다.

 

세번째, WHERE절에서 사용되는 중첩 서브쿼리

WHERE절에서 사용되는 서브쿼리는 가장 일반적으로 단일행 서브쿼리, 다중행 서브쿼리로 나뉜다.

이 둘의 관한 글은 이전 작성하였으니 참고하면 된다.

[단일행 서브쿼리]

SELECT e.*, d.dept_name
FROM Employees e, (SELECT dept_id, dept_name FROM Departments) d
WHERE e.dept_id = d.dept_id

[다중행 서브쿼리]

SELECT *
FROM Employees e
WHERE e.dept_id IN (SELECT d.dept_id FROM Departments d WHERE dept_name IN ('총무', '개발'));