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건 이상의 행을 반환
ㄷ) 다중 컬럼 서브 쿼리 : 여러 컬럼의 데이터를 반환