SQL Server/실기 정리
SQL Server 33강 - 단일행 서브쿼리 (Single Row Subquery) 사용하기
코딩하는냥이
2025. 6. 4. 11:48
반응형
이번 글에서는 서브쿼리(Subquery) 중에서도 하나의 값만 반환하는 단일행 서브쿼리를 활용하여
메인 쿼리의 WHERE 조건절에 하나의 값을 동적으로 대입하는 실습을 진행했습니다.
📌 예제 코드 ①
SELECT *
FROM nasdaq_company
WHERE symbol = (
SELECT symbol
FROM nasdaq_company
WHERE symbol IN ('MSFT')
);
💬 설명
- 내부 서브쿼리는 'MSFT'만 포함된 symbol을 반환
- 외부 쿼리는 해당 symbol과 일치하는 데이터를 조회
- 서브쿼리 결과가 단 하나의 값만 반환되므로 = 연산자 사용 가능
📌 예제 코드 ②
SELECT *
FROM nasdaq_company
WHERE symbol = (
SELECT symbol
FROM nasdaq_company
WHERE symbol IN ('MSFT', 'AMD', 'AMZN')
);
⚠️ 주의!
- 이 쿼리는 실행 시 에러가 발생할 수 있습니다
- 이유: 서브쿼리가 여러 개의 값을 반환하는데 = 단일값 비교 연산자를 사용했기 때문입니다
- 이럴 경우에는 반드시 IN을 사용하거나 TOP 1, MIN, MAX 등의 단일값 함수로 감싸야 함
💻 바른 예시 (복수 값 대응)
-- 여러 symbol을 대상으로 할 경우에는 IN을 사용해야 함
SELECT *
FROM nasdaq_company
WHERE symbol IN (
SELECT symbol
FROM nasdaq_company
WHERE symbol IN ('MSFT', 'AMD', 'AMZN')
);
💡 포인트 정리
- 단일행 서브쿼리는 서브쿼리 결과가 정확히 1개의 값일 때 사용
- 결과가 2개 이상일 경우 = 연산자 사용 시 오류 발생
- 복수 개의 결과가 예상된다면 IN, EXISTS, 또는 JOIN 방식 사용 고려
- 서브쿼리는 항상 결과 개수를 예상하고 조건에 맞게 사용해야 함
📌 정리하자면, 이번 강의에서는 단일행 서브쿼리를 활용하여
WHERE 조건에 하나의 값을 서브쿼리로 지정하는 방법을 실습했습니다.
서브쿼리 결과가 하나일 때는 =, 여러 개일 경우는 IN을 사용해야 오류 없이 안전하게 작동한다는 점을 명확히 배웠습니다.