서브쿼리(Subquery)
하나의 쿼리 안에 포함된 또 다른 쿼리
- SELECT 절 : 스칼라 서브쿼리(Scalar Subquery)
- FROM 절 : 인라인 뷰(Inline View)
- WHERE, HAVING 절 : 중첩 서브쿼리(Nested Subquery)
스칼라 서브쿼리
주로 SELECT 절에 위치하지만, 컬럼이 올 수 있는 대부분 위치에 사용 가능. 컬럼 대신 사용되므로 반드시 하나의 값만을 반환해야 하며 그렇지 않으면 에러 발생
인라인 뷰
FROM 절 등 테이블명이 올 수 있는 위치에 사용 가능
중첩 서브쿼리
WHERE, HAVING 절에 사용 가능
동작 방식 기준의 종류
- 비연관(Uncorrelated) 서브쿼리 : 메인쿼리와 관계를 맺고 있지 않은 형태로 메인쿼리에 서브쿼리가 실행된 결과값을 제공하는 용도로 사용
- 연관(Correlated) 서브쿼리 : 메인쿼리와 관계를 맺고 있는 형태로 메인쿼리가 먼저 수행되어 얻은 데이터를 서브쿼리의 조건에 맞는지 확인할 때에 사용
반환 데이터 기준의 종류
- 단일 행(Single Row) 서브쿼리 : 1건 이하의 데이터를 반환하는 서브쿼리로 단일 행 비교 연산자 사용. =, <, >, <=, >=, <>
- 다중 행(Multi Row) 서브쿼리 : 여러 건의 데이터를 반환하는 서브쿼리로 다중 행 비교 연산자 사용. IN, ALL, ANY, SOME, EXISTS
- 다중 컬럼(Multi Column) 서브쿼리 : 여러 컬럼의 데이터를 반환하는 서브쿼리로 메인쿼리의 조건절에 여러 컬럼을 동시에 비교할 때 서브쿼리와 메인쿼리에서 비교하는 컬럼 개수와 위치가 동일해야 함
서브쿼리 주의 사항
서브쿼리를 괄호로 감싸서 사용
서브쿼리는 단일 행, 다중 행과 같은 비교 연산자와 함께 사용
서브쿼리에서는 Order by를 사용할 수 없음 → Order by는 SELECT 구문에서 한 개만 가능하고 메인쿼리의 마지막 문장에 위치해야 함
뷰(View)
논리 테이블로서, 사용자에게(생성이 아닌 사용 관점에서) 테이블과 동일
실제 데이터를 갖고 있진 않지만, 테이블이 수행하는 임무를 수행하기 때문에 ‘가상 테이블(Virtual Table)’이라고도 불림
뷰의 장점
독립성 : 테이블 스키마가 변경되었을 경우 애플리케이션은 변경하지 않고 관련 뷰만 수정
편리성 : 복잡한 쿼리 구문을 뷰명으로 단축시킴으로써 가독성을 높이고 편리하게 사용할 수 있음
보안성 : 보안이 필요한 컬럼을 가진 테이블일 경우 해당 컬럼을 제외한 별도의 뷰를 생성하여 제공함으로써 보안을 유지할 수 있음
뷰의 단점
뷰 자체 인덱스 불가 : 논리적으로 존재하는 뷰에 물리적인 데이터를 대상으로 하는 인덱스를 생성할 수 없음
뷰 정의 변경 불가 : 정의를 변경하려면 삭제 후 재작성해야 함
데이터 변경 제약 존재 : 뷰의 내용에 대한 삽입, 삭제, 변경 제약이 있음
집합 연산자
테이블을 집합의 개념으로 보고, 두 테이블 연산에 집합 연산자를 사용하는 방식으로 두 개 이상의 질의 결과를 하나의 결과로 만듦
UNION ALL : 각 쿼리의 결과 집합의 합집합. 중복된 행도 그대로 출력
UNION : 각 쿼리의 결과 집합의 합집합. 중복된 행은 한 줄로 출력
INTERSECT : 각 쿼리의 결과 집합의 교집합. 중복된 행은 한 줄로 출력
MINUS/EXCEPT : 앞에 있는 쿼리의 결과 집합에서 뒤에 있는 쿼리의 결과 집합을 뺀 차집합. 중복된 행은 한 줄로 출력
'SQL' 카테고리의 다른 글
SQL 활용 기타 기법 (0) | 2025.03.09 |
---|---|
SQL 활용 그룹 함수와 윈도우 함수 (0) | 2025.03.08 |
SQL 기본 SELECT 문 조건 절 (0) | 2025.03.06 |
SQL 기본 함수 (0) | 2025.03.05 |
SQL 기본 RDB와 SELECT 문 (0) | 2025.03.04 |