서브쿼리(Subquery)란?
✅ 하나의 SQL 문에 포함되어 있는 또 다른 SQL 문
서브쿼리 사용시 주의사항
1. 서브쿼리를 괄호로 감싸서 사용한다.
2. 서브쿼리는 단일 행 또는 복수 행 비교 연산자와 함께 사용 가능하다.
3. 서브쿼리에서는 ORDER BY 를 사용하지 못한다.
서브쿼리는 위치에 따라 다음과 같이 나눌 수 있다.
SELECT 절 | 스칼라 서브쿼리(Scalar Sunquery) |
FROM 절 | 인라인 뷰(Inline View) |
WHERE 절, HAVING 절 | 중첩 서브쿼리(Nested Subquery) |
스칼라 서브쿼리(Scalar Sunquery)
주로 SELECT 절에 위치하지만 컬럼이 올 수 있는 대부분 위치에 사용할 수 있다. 컬럼 대신 사용되므로 반드시 하나의 값만을 반환해야 하며 그렇지 않은 경우 에러를 발생시킨다.
인라인 뷰(Inline View)
FROM 절 등 테이블명이 올 수 있는 위치에 사용 가능하다.
중첩 서브쿼리(Nested Subquery)
WHERE 절과 HAVING 절에 사용할 수 있다.
1️⃣ 중첩 서브쿼리는 메인 쿼리와의 관계에 따라 다음과 같이 나눌 수 있다.
쿼리명 | 메인 쿼리와의 관계 | 설명 |
비연관 서브쿼리(Uncorrelated Subquery) | 메인 쿼리와 관계를 맺고 있지 않음 | 서브쿼리 내에 메인 쿼리의 컬럼이 존재하지 않음 |
연관 서브쿼리(Correlated Subquery) | 메인 쿼리와 관계를 맺고 있음 | 서브쿼리 내에 메인 쿼리의 컬럼 존재 |
2️⃣ 중첩 서브쿼리는 반환하는 데이터 형태에 따라 다음과 같이 나눌 수 있다.
쿼리명 | 설명 |
단일 행(Single Row) 서브쿼리 | - 서브쿼리가 1건 이하의 데이터를 반환 - 단일 행 비교 연산자와 함께 사용 예) =, <, >, <=, >=, <> |
다중 행(Multi Row) 서브쿼리 | - 서브쿼리가 여러 건의 데이터를 반환 - 다중 행 비교 연산자와 함께 사용 예) IN, ALL, ANY, SOME, EXISTS |
다중 컬럼(Multi Column) 서브쿼리 | 서브쿼리가 여러 컬럼의 데이터를 반환 |
다중 행 비교 연산자 | 설명 |
IN | 서브쿼리의 결과에 존재하는 임의의 값과 동일한 조건을 의미한다. |
ALL | 서브쿼리의 결과에 존재하는 모든 값을 만족하는 조건을 의미한다. |
ANY | 서브쿼리의 결과에 존재하는 어느 하나의 값이라도 만족하는 조건을 의미한다. |
EXISTS | 서브쿼리의 결과를 만족하는 값이 존재하는지 여부를 확인하는 조건을 의미한다. |
뷰(View)
특정 SELECT 문에 이름을 붙여서 재사용이 가능하도록 저장해놓은 오브젝트이다. SQL에서 테이블처럼 사용할 수 있다.
혼돈하지 말아야 할 점은 뷰는 가상 테이블이라는 것이다. 따라서 실제 데이터를 저장하지는 않고 해당 데이터를 조회해오는 SELECT 문만 가지고 있다.
뷰 사용의 장점
장점 | 설명 |
독립성 | 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 된다. |
편리성 | 복잡한 질의를 뷰로 생성함으로써 관련 질의를 단순하게 작성할 수 있다. |
보안성 | 숨기고 싶은 정보가 존재하는 경우, 뷰를 생성할 때 해당 컬럼을 빼고 생성하여 정보를 숨길 수 있다. |
'[개발 언어 & 프레임워크] > SQL' 카테고리의 다른 글
[SQL] 그룹 함수 정리 (1) | 2023.01.17 |
---|---|
[SQL] 집합 연산자 - UNION ALL, UNION, INTERSECT, EXCEPT (0) | 2023.01.17 |
[SQL] JOIN 정리 (0) | 2023.01.16 |
[SQL] GROUP BY, HAVING 절 (0) | 2023.01.16 |
[SQL] SQL 연산자 정리 (0) | 2023.01.15 |