Subquery
- 다른 쿼리를 내부에 작성하여 사용하는 쿼리
- SELECT문을 이용한 데이터 조회는 검색 조건에 따른 또 다른 테이블을 만드는 것을 의미
- 검색 결과의 테이블을 활용하여 다시 쿼리를 실행하는 것이 서브쿼리라 할 수 있음
종류
1. 스칼라 서브쿼리(Scalar Subquery)
: SELECT절에서 사용되는 서브쿼리
2. 인라인 뷰(Inline View)
: FROM절에서 사용되는 서브쿼리
3. 중첩 서브 쿼리(Nested Subquery)
: WHERE, HAVING절에서 사용되는 서브쿼리
특징
1. 스칼라 서브쿼리(Scalar Subquery)
- 서브쿼리에서 나오는 결과값이 1개의 행이어야 함
- 2개 이상의 행이나 NULL값은 사용할 수 없음
2. 인라인 뷰(Inline View)
- 서브쿼리의 테이블에서 조회한 컬럼만 사용 가능
- 별칭 필수
3. 중첩 서브 쿼리(Nested Subquery)
- 단일행, 복수행 서브쿼리 가능
- 1개의 값을 표현할 경우 단일행 서브쿼리, 여러 개의 값이 필요할 경우 복수형 서브쿼리라 함
Scalar Subquery
사용 시 주의사항
- SELECT문으로만 작성 가능
- 괄호(
()
) 안에 작성해야 함
- ORDER BY절에서는 사용할 수 없음
사용법
SELECT
[Column Name]
, [Column Name]
, (Scalar Subquery)
, [Column Name]
FROM
[Table Name]
;
예시
SELECT
mb_id
, address
, (
SELECT
korea_name
FROM
company_table b
WHERE b.company_code = a.company_code
)
, mb_tell
FROM
member_table a
;
- member_table a와, company_table b를 지정하여 2개의 테이블 company_code의 같은 값을 비교하여 korea_name을 출력
Inline View
- FROM절에서 사용되는 서브쿼리
- 서브쿼리에서 조회한 결과를 하나의 테이블처럼 사용하고 싶을 때 사용
- SQL문이 실행될 때 임시적으로 생성되는 동적 뷰
- 테이블에서 조회한 컬럼만 조회 가능
사용 시 주의사항
- SELECT문으로만 작성 가능
- 괄호(
()
) 안에 작성해야 함
- 인라인 뷰 서브쿼리에서 조회한 컬럼만 메인쿼리에서 조회 가능
- 사용자 별칭 지정해야 함(AS 뒤에 별칭 명시)
- 메인쿼리에서 인라인 뷰 서브쿼리의 컬럼을 조회할 경우 별칭 지정해야 함
(메인 쿼리에 인라인 뷰 서브쿼리의 별칭을 지정하고 조회)
사용법
SELECT
[Inline View Alias].[Column Name]
, [Inline View Alias].[Column Name]
, [Inline View Alias].[Column Name]
FROM
[Inline View] AS [Alias]
예시
SELECT
a.mb_id
, a.address
FROM
(
SELECT
mb_id
, address
FROM
member_table
) AS a
;