중첩 쿼리라고도 하는 하위 쿼리는 다른 SQL 쿼리 내에 포함된 SQL 쿼리입니다. 기본적으로 이는 또 다른 'SELECT' 문 내의 'SELECT' 문으로, 데이터 검색 작업의 유연성과 깊이를 향상시키는 강력한 도구를 제공합니다. 하위 쿼리는 한 쿼리의 결과를 다른 쿼리의 조건으로 사용하여 단일 쿼리에 대한 여러 쿼리가 필요한 작업을 수행해야 하는 경우 필수적입니다.
| 연산자 | 설명 |
| IN | 서브쿼리의 결과값을 포함하고 있으면 출력한다. |
| EXISTS | 서브쿼리 결과값의 행 존재 여부를 확인하여 출력한다. |
| ANY(SCME) | 서브쿼리 결과값이 여러 개 나온 경우, 서브쿼리의 결과값이 하나라도 만족하면 출력한다. |
| ALL | 서브쿼리 결과값이 여러 개 나온 경우, 서브쿼리의 결과값을 모두 만족하는 값을 출력한다. |
1. 스칼라 서브쿼리 예제
| 직원ID | 이름 | 연봉 |
| 1 | Alice | 70,000 |
| 2 | Bob | 80,000 |
| 3 | Charlie | 55,000 |
SELECT 이름, 연봉
FROM 직원
WHERE 연봉 > (SELECT AVG(연봉) FROM 직원);
| 이름 | 연봉 |
| Bob | 80,000 |
2. 인라인 뷰 서브쿼리 예제
| 지역 | 판매액 |
| 동부 | 1,500 |
| 서부 | 1,200 |
| 동부 | 900 |
| 북부 | 800 |
SELECT 지역, 총판매액
FROM (
SELECT 지역, SUM(판매액) AS 총판매액
FROM 판매
GROUP BY 지역
) AS 지역별판매
ORDER BY 총판매액 DESC;
| 지역 | 총판매액 |
| 동부 | 2,400 |
| 서부 | 1,200 |
| 북부 | 800 |
3. 중첩 서브쿼리 예제
| 주문ID | 제품ID |
| 1 | A |
| 2 | A |
| 3 | B |
| 4 | C |
| 제품ID | 판매수량 |
| A | 30 |
| B | 20 |
| C | 10 |
SELECT 제품ID
FROM 제품판매
WHERE 판매수량 > (
SELECT AVG(판매수량) FROM 제품판매
);
| 제품ID |
| A |
1. IN 연산 예제
| EmployeeID | Name | DepartmentID |
| 1 | Alice | 101 |
| 2 | Bob | 102 |
| 3 | Charlie | 103 |
| 4 | David | 101 |
| DepartmentID | DepartmentName |
| 101 | Sales |
| 102 | Engineering |
SELECT Name, DepartmentID
FROM Employees
WHERE DepartmentID IN (SELECT DepartmentID FROM Departments WHERE DepartmentName IN ('Sales', 'Engineering'));
| Name | DepartmentID |
| Alice | 101 |
| Bob | 102 |
| David | 101 |
2. EXISTS 연산 예제
| EmployeeID | Name | DepartmentID |
| 1 | Alice | 101 |
| 2 | Bob | 102 |
| 3 | Charlie | 103 |
| 4 | David | 101 |
| DepartmentID | DepartmentName |
| 101 | Sales |
| 102 | Engineering |
SELECT Name
FROM Employees e
WHERE EXISTS (
SELECT 1
FROM Departments d
WHERE d.DepartmentID = e.DepartmentID AND d.DepartmentName = 'Sales'
);
| Name |
| Alice |
| David |
3. ANY 연산 예제
| EmployeeID | Salary |
| 1 | 70000 |
| 2 | 80000 |
| 3 | 75000 |
| 4 | 90000 |
SELECT Name
FROM Employees e
WHERE e.Salary > ANY (SELECT Salary FROM Salaries WHERE Salary < 80000);
| Name |
| Bob |
| Charlie |
| David |
4. ALL 연산 예제
| EmployeeID | Name | DepartmentID |
| 1 | Alice | 101 |
| 2 | Bob | 102 |
| 3 | Charlie | 103 |
| 4 | David | 101 |
| DepartmentID | DepartmentName |
| 101 | Sales |
| 102 | Engineering |
SELECT Name
FROM Employees e
WHERE e.Salary > ALL (SELECT Salary FROM Salaries WHERE EmployeeID != e.EmployeeID);
| Name |
| David |
서브쿼리는 SQL에서 더 동적이고 효율적인 데이터 조작 및 쿼리를 가능하게 하는 기본 개념입니다. 다양한 유형의 서브쿼리를 적절하게 활용하는 방법을 이해하는 것은 복잡한 데이터 구조를 다루고 SQL 쿼리 내에서 고급 데이터 분석 작업을 직접 수행하는 능력을 크게 향상시킬 수 있습니다. 동적 조건에 기반한 데이터 필터링, 즉석에서 임시 테이블 생성, 또는 데이터의 다른 세그먼트 간 결과 비교 등, 서브쿼리는 강력한 해결책을 제공합니다. 2024년에 정보처리기사를 따기 위해 노력하는 모두에게 행운을 빕니다!

| [정보처리기사 실기 공부] 절차형 SQL (0) | 2024.05.20 |
|---|---|
| [정보처리기사 실기 공부] 그룹 함수와 윈도우 함수 (0) | 2024.05.16 |
| [정보처리기사 실기 공부] SELECT 쿼리 활용 (1) (0) | 2024.05.12 |
| [정보처리기사 실기 공부] SQL 기본 문법과 종류 (2) (0) | 2024.05.01 |
| [정보처리기사 실기 공부] SQL 기본 문법과 종류 (1) (0) | 2024.04.25 |