중첩 쿼리라고도 하는 하위 쿼리는 다른 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 |