서브쿼리 뜻과 개념에 대해서 이야기해봅시다.
서브쿼리 뜻과 개념 알기
서브쿼리 뜻(Subquery)은 SQL(Structured Query Language)에서 1개의 쿼리 안에 또 다른 쿼리가 들어 있는 형태의 쿼리를 의미합니다.
서브쿼리(Subquery)는 내부 쿼리의 결과를 기반으로 데이터를 필터링 할 수 있고 검색이나 데이터를 조작하는데 자주 사용하는 다른 쿼리 안에 포함되어 있는 쿼리입니다.
서브 쿼리는 SELECT, FROM, WHERE 절에서 사용할 수 있습니다. SELECT 절, FROM 절, WHERE 절에서 사용하는 서브 쿼리들은 각각 스칼라 서브 쿼리(Scalar Subquery), 인라인 뷰(Inline View), 중첩 서브 쿼리(Nested Subquery) 3가지로 분류됩니다.
서브 쿼리는 SELECT 문 안에 또 다시 SELECT 문이 들어 있는 쿼리 문입니다.
[서브 쿼리 형태]
SELECT ...
FROM ...
WHERE ... (SELECT ...
FROM ...
WHERE ...)
서브쿼리 뜻과 개념 설명
서브쿼리 뜻(Subquery)은 SQL(Structured Query Language)에서 하나의 쿼리(Query) 안에 존재하는 또 다른 쿼리입니다.
서브 쿼리(Subquery)는 메인 쿼리 안에 들어가는 쿼리로 메인 쿼리는 바깥에 위치하고 서브 쿼리는 안에 배치되는 형태가 됩니다.
서브 쿼리는 3가지 종류로 구분됩니다. 3가지 종류의 서브 쿼리는 쿼리의 배치 위치에 따라 달라집니다. 서브 쿼리의 3가지 종류는 스칼라 서브 쿼리, 인라인 뷰, 중첩 서브 쿼리입니다.
[서브 쿼리의 3가지 종류]
구분 | 내용 |
스칼라 서브 쿼리 (Scalar Subquery) | SELECT 절에 배치되는 서브 쿼리 |
인라인 뷰 (Inline View) | FROM 절에 배치되는 서브 쿼리 |
중첩 서브쿼리 (Nested Subquery) | WHERE절이나 HAVING 절에 배치되는 서브 쿼리 |
스칼라 서브 쿼리 (Scalar Subquery)는 주로 SELECT 절에 위치하는 서브 쿼리이지만 컬럼이 올 수 있는 대부분의 위치에서 사용할 수 있는 쿼리입니다. 컬럼 대신 사용되기 때문에 반드시 하나의 값 만을 반환해야 하고 그렇지 않을 경우에는 에러를 발생하게 됩니다. 스칼라 서브 쿼리는 SELECT 절, UPDATE 문의 SET 절, ORDER BY 절에 배치될 수 있습니다. SELECT 절의 서브 쿼리를 사용하게 되면 서브 쿼리의 결과를 기본 쿼리 결과의 열로 포함할 수 있습니다.
인라인 뷰 (Inline View)는 FROM 절 등 테이블 명이 올 수 있는 위치에 사용할 수 있습니다. FROM 절의 서브 쿼리를 사용하는 경우 기본 쿼리에서 사용할 수 있는 임시 테이블이나 보기를 만들 수 있습니다.
중첩 서브 쿼리 (Nested Subquery)는 WHERE 절과 HAVING 절에서 사용할 수 있습니다. 중첩 서브 쿼리는 메인 쿼리와의 관계에 따라서 2개로 나눌 수 있습니다. 중첩 서브 쿼리의 2가지 분류는 비연관 서브 쿼리와 연관 서브 쿼리입니다.
[중첩 서브 쿼리의 종류]
구분 | 내용 |
비연관 서브 쿼리 (Uncorrelated Subquery) | 메인 쿼리와 관계를 맺고 있지 않은 형태 |
연관 서브 쿼리 (Correlated Subquery) | 메인 쿼리와 관계를 맺고 있는 형태 |
비연관 서브 쿼리 (Uncorrelated Subquery)는 서브 쿼리 안에 메인 쿼리의 컬럼이 없는 것을 의미합니다. 연관 서브 쿼리 (Correlated Subquery)는 서브 쿼리 안에 메인 쿼리의 컬럼이 존재하는 것입니다.
중첩 서브 쿼리의 경우, 반환하는 데이터의 형태에 따라서 단일 행(Single Row) 서브 쿼리, 다중 행(Multi-Row) 서브 쿼리, 다중 컬럼(Multi Column) 서브 쿼리로 분류할 수 있습니다.
단일 행 서브 쿼리는 항상 1건 이하의 결과 만을 반환하게 됩니다. 단일 행 서브 쿼리는 서브 쿼리가 1건 이하의 데이터를 반환하고 단일행 비교 연산자와 함께 사용합니다.
다중 행 서브 쿼리는 2건 이상의 행을 반환하게 됩니다.
다중행 서브쿼리는 IN, ALL, ANY, SOME, EXISTS와 같은 연산자와 함께 사용될 수 있습니다.
다중 컬럼 서브 쿼리는 서브 쿼리가 여러 컬럼의 데이터를 반환하게 됩니다.
서브 쿼리는 ORDER BY 절이나 INSERT 문의 VALUE절 등에서도 사용이 가능합니다. 다중 행 서브 쿼리의 경우 “=” 조건과 함께 사용할 수 없습니다. 그리고 다중 컬럼의 서브 쿼리의 경우 IN 절과 함께 사용할 수 있습니다. 메인 쿼리의 컬럼이 포함된 서브 쿼리는 연관 서브 쿼리, 메인 쿼리의 컬럼이 포함되지 않은 서브 쿼리는 비연관 서브 쿼리라고 합니다.
서브 쿼리의 결과가 복수 행의 결과를 반환하는 경우에는 IN, ALL, ANY와 같은 복수 행 비교 연산자와 함께 사용해야 합니다.
단일 행 서브 쿼리의 비교 연산자로는 =, <, <=,>,>=,<>가 되어야 합니다. IN, ALL과 같은 비교 연산자는 다중 행 서브 쿼리의 비교 연산자입니다. 단일 행 서브 쿼리의 비교 연산자는 다중 행 서브 쿼리의 비교 연산자로 사용할 수 없지만 반대는 가능합니다. 비 연관 서브 쿼리가 주로 메인 쿼리의 값을 제공하기 위한 목적으로 사용됩니다. 메인 쿼리의 결과가 서브 쿼리로도 제공될 수도 있고, 서브 쿼리의 결과가 메인 쿼리로 제공될 수도 있기 때문에 실행 순서는 상황에 따라 달라 질 수 있다고 보아야 합니다.