[DataBase] 서브 쿼리에 대해서 알아보기 (스칼라 서브 쿼리 , 서브 쿼리 , 인라인 뷰)
joheamin2025. 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를 가져와 메인 쿼리에서 조건 실행 후 조회한다.