데이터베이스

[DataBase] 서브 쿼리에 대해서 알아보기 (스칼라 서브 쿼리 , 서브 쿼리 , 인라인 뷰)

joheamin 2025. 2. 14. 00:07

❓서브 쿼리란  

SELECT 문 안에서 다시 SELECT문을 사용하는 SQL문

 

 

서브 쿼리를 사용하는 이유

서브 쿼리의 사용법은 정말 무궁무진하며,
다양한 SQL문을 조회하기 위해 쿼리문을 작성 할 때
중간에 데이터를 한번 더 가공하고 필터링 할 일이 많을 것 이다.

이때 하나의 쿼리문 안에서 서브쿼리를 통하여 데이터를 전 처리 한다.

또는 찾고자 하는 데이터가 다른 테이블에 있을 때
서브 쿼리를 통하여 SELECT / FROM / WHERE 로 가져올 수 있다.

 

 

🔷 서브 쿼리의 종류

 

1️⃣ 스칼라 서브 쿼리

 

스칼라 서브 쿼리란

 SELECT 문에 사용하는 서브쿼리로 단 하나의 단일 행 또는 단일 컬럼을 반환 한다.

 

🔍 예제

직원 테이블과 부서 테이블이 있다.
      직원 테이블에서 각 직원의 이름과 해당하는 부서의 이름을 조회 하고싶다.

💡 스칼라 서브 쿼리를 사용하여 DEPT_ID를 통해 각 DEPT 테이블에 접근하여 각 직원의 부서 이름을 가져오자
SELECT EMP_NAME AS "이름",(SELECT DEPT_NAME
				 FROM DEPT D
				 WHERE D.DEPT_ID = E.DEPT_ID) AS "부서이름"
FROM EMPLOYEES E;​

 


👉 결과 

 

 


 

 

2️⃣ 서브 쿼리

 

서브 쿼리란

 WHERE 문에 사용하는 서브쿼리로 단일 행다중 행 둘다 반환 가능하다. 

 

🔍 예제

◾ 직원 테이블과 부서 테이블이 있다.
      월급이 1000000 이상인 부서를 조회하여 직원이름 , 부서이름 , 월급 을 조회 하고싶다.


🤔 WHERE 문에 서브 쿼리를 사용하여 조건으로 먼저 필터를 거친 뒤에 데이터를 꺼내오자 

SELECT E.EMP_NAME AS "이름",
	   D.DEPT_NAME AS "부서",
       D.SALALY AS "월급"
FROM EMPLOYEES E, DEPT D
WHERE E.DEPT_ID = (SELECT DEPT_ID
	   FROM DEPT D
       WHERE SALALY > 1000000);


👉 WHERE 에서 서브 쿼리를 통해 조건에 맞는 부서의 ID를 가지고와 직원의 부서 ID와 비교한다.
      FROM에 DEPT를 하나 가져와 이름 , 부서이름 , 월급을 출력

 

 

3️⃣ 인라인 뷰

 

❓ 인라인 뷰란

FROM문에서 사용하는 서브 쿼리로 단일 행 또는 다중 행을 반환한다.

 

🔍 예제 

◾위에 예제에서는 SELECT에서 메인 쿼리보다 서브쿼리에서 가져온 행을 더 많이 SELECT 한다.
     그렇다면 그냥 FROM 에서 원하는 테이블의 행을 가지고 온 뒤 
     메인 쿼리에서 WHERE문을 처리 하는 방법도 있다.
SELECT E.EMP_NAME , DEPT_NAME, SALALY
FROM (SELECT *
	  FROM DEPT)D,EMPLOYEES E
WHERE SALALY > 1000000 AND D.DEPT_ID = E.DEPT_ID;

👉 FROM에 서브쿼리에서 DEPT_NAME 과 SALALY를 가져와 메인 쿼리에서 조건 실행 후 조회한다.