Terriermon - Digimon

서브쿼리 subquery

2024. 1. 24. 11:14자격증/SQLD

 

SELECT 절 스칼라 서브쿼리( Scalar Suquery )
FROM 절 인라인 뷰 (Inline View)
WHERE 절, HAVING 절 중첩 서브쿼 (Nested Subquery)

 

1. 스칼라 서브쿼리 ( Scalar Suquery )

: 주로 SELECT 절에 위치하지만 컬럼이 올 수 있는 대부분 위치에 사용할 수 있다. 컬럼 대신 사용되므로 반드시 하나의 값만을 반환해야 하며 그렇지 않은 경우 에러를 발생시킨다.

 

 

SELECT * FROM PRODUCT;

 

 

SELECT * FROM PRODUCT_REVIEW;

 

 

SELECT M.PRODUCT_CODE,
(SELECT S.PRODUCT_NAME
FROM PRODUCT S
WHERE S.PRODUCT_CODE = M.PRODUCT_CODE ) AS PRODUCT_NAME,
    M.MEMBER_ID,
    M.CONTENT
    FROM PRODUCT_REVIEW M;

 

 

스칼라 쿼리를 이용하여 PRODUCT_rEVIEW 테이블에 존재하지 않는 PRODUCT_NAME 데이터를 출력

 

 

오류 발생

 

스칼라 서브쿼리를 이용하여 PRODUCT_REVIEW 테이블에 존재하지 않는 PRODUCT_NAME, PRICE 데이터를 출력

 

2. 인라인 뷰

FROM 절 등 테이블명이 올 수 있는 위치에 사용 가능하다.

 

3. 중첩 쿼리

1) WHERE절과 HAVING 절에 사용할 수 있다. 중첩 서브쿼리는 메인 쿼리와의 관계에 따라 다음과 같이 나눌 수 있다.

비연관 서브쿼리( Un-Correlated SubQuery ) 메인 쿼리와 관계를 맺고 있지 않음
연관 서브쿼리( Corrleated SubQuery ) 메인 쿼리와 관계를 맺고 있음

 

ㄱ) 비연관 서브쿼리 : 서브쿼리 내에 메인 쿼리의 컬럼이 존재하지 않음

 

SELECT * FROM AGENCY;

 

 

SELECT * FROM ENTERTAINER;

 

 


SELECT NAME, JOB, BIRTHDAY, AGENCY_CODE
    FROM ENTERTAINER
    WHERE AGENCY_CODE = ( SELECT AGENCY_CODE
                            FROM AGENCY
                            WHERE AGENCY_NAME = 'EDAM엔터테이먼트');

 

 

ㄴ) 연관 서브 쿼리 : 서브쿼리 내에 메인 쿼리의 컬럼 존재

 

SELECT * FROM CAFE_ORDER;

 

 

다음 쿼리는 음료별 가장 많은 주문 수량을 가진 주문번호를 조회한다.

 

2) 중첩 서브쿼리는 반환하는 데이터 형태에 따라 다음과 같이 나눌 수 있다.

 

단일 행(Single Row) 서브쿼리 서브쿼리가 1건 이하의 데이터를 반환
단일 행 비교 연산자와 함께 사용
ex) =, <, >, <=, >=, <>
다중 행(Multi Row) 서브쿼리 서브쿼리가 여러 건의 데이터를 반환
다중 행 비교 연산자와 함께 사용
IN, ALL, ANY, SOME, EXISTS
다중 컬럼(Multi Column) 서브쿼리 서브쿼리가 여러 컬럼의 데이터를 반환

 

 

 

 

 

ㄱ) 단일 행 서브쿼리 : 항상 1건 이하의 결과만 반환

 

 

ㄴ) 다중 행 서브 쿼리: 2건 이상의 행을 반환

 

 

ㄷ) 다중 컬럼 서브 쿼리 : 여러 컬럼의 데이터를 반환

반응형

'자격증 > SQLD' 카테고리의 다른 글

rank 함수  (0) 2024.01.30
속성의 분류  (0) 2024.01.25
TRIM 함수  (0) 2024.01.23
NULL 함수 관련  (0) 2024.01.22
식별자 분류  (0) 2024.01.17