서브쿼리
기술노트
🧩 서브쿼리 (Subquery)
서브쿼리는 SQL 쿼리문 안에 또 다른 `SELECT` 문이 중첩되어 있는 형태의 쿼리입니다. 메인 쿼리의 일부로 사용되어, 메인 쿼리에 필요한 데이터를 제공하는 역할을 합니다.
서브쿼리는 괄호 `()`로 묶어서 사용하며, 메인 쿼리가 실행되기 전에 먼저 실행되어 그 결과를 메인 쿼리에 전달합니다.
⚙️ 서브쿼리의 사용 위치
서브쿼리는 SQL 쿼리문의 다양한 절에서 사용될 수 있습니다.
- `SELECT` 절 : 스칼라 서브쿼리(단일 값 반환)로 사용되어, 각 행에 대한 추가적인 정보를 조회합니다.
```sql SELECT name, (SELECT COUNT(*) FROM Orders WHERE Orders.CustomerID = Customers.CustomerID) AS OrderCount FROM Customers; ```
- `FROM` 절 : 인라인 뷰(Inline View)라고도 불리며, 서브쿼리의 결과가 마치 하나의 테이블처럼 사용됩니다.
```sql SELECT T1.name, T2.total_sales FROM Customers T1 JOIN (SELECT CustomerID, SUM(Amount) AS total_sales FROM Orders GROUP BY CustomerID) T2 ON T1.CustomerID = T2.CustomerID; ```
- `WHERE` 절 : 특정 조건을 만족하는 데이터를 필터링하는 데 사용됩니다. `IN`, `EXISTS`, 비교 연산자 등과 함께 사용됩니다.
```sql SELECT * FROM Products WHERE Price > (SELECT AVG(Price) FROM Products); ```
- `HAVING` 절 : 그룹에 대한 조건을 지정할 때 사용됩니다.
📚 서브쿼리의 종류
- 스칼라 서브쿼리 : 단일 행, 단일 열의 값을 반환합니다. `SELECT` 절이나 `WHERE` 절에서 사용됩니다.
- 단일 행 서브쿼리 : 단일 행, 여러 열의 값을 반환합니다. `WHERE` 절에서 비교 연산자(=, >, < 등)와 함께 사용됩니다.
- 다중 행 서브쿼리 : 여러 행, 단일 열의 값을 반환합니다. `WHERE` 절에서 `IN`, `ANY`, `ALL` 등과 함께 사용됩니다.
- 다중 열 서브쿼리 : 여러 행, 여러 열의 값을 반환합니다. `FROM` 절에서 주로 사용됩니다.
- 상관 서브쿼리 (Correlated Subquery) : 메인 쿼리의 컬럼 값을 서브쿼리에서 사용하는 형태입니다. 메인 쿼리의 각 행마다 서브쿼리가 다시 실행됩니다.
💡 정보처리기사 핵심 Point
- 서브쿼리는 복잡한 데이터를 한 번의 쿼리로 조회할 수 있게 해주는 강력한 기능입니다.
- 정보처리기사 시험에서는 서브쿼리의 개념, 사용 위치, 그리고 각 종류별 특징을 묻는 문제가 자주 출제됩니다.
- 특히 `WHERE` 절에서 `IN`, `EXISTS`와 함께 사용되는 서브쿼리의 동작 방식을 정확히 이해해야 합니다.
- 서브쿼리를 과도하게 사용하면 성능 저하의 원인이 될 수 있으므로, 경우에 따라서는 `JOIN`으로 대체하는 것을 고려해야 합니다.