Subquery 란?
- SELECT문 안에 다시 SELECT문이 기술된 쿼리
- 상위 SELECT문 안에 하위 SELECT문이 포함된 형태라 중첩된(nested) 쿼리라고도 부름
- 다른 테이블에서 조회한 데이터 값(서브쿼리)을 메인 쿼리에서 조건으로 사용한다쿼리문 구조
Subquery의 종류
1. 중첩 서브쿼리(Nested Subquery) : WHERE절에 나타나는 서브 쿼리
- 단일 행 서브 쿼리(Single Row Subquery) : 하나의 행을 검ㅅ색하는 서브 질의
- 다중 행 서브 쿼리(Multiple Row Subquery) : 하나 이상의 행을 검색하는 서브 질의
- 다중 열 서브 쿼리(Multiple Column Subquery) : 하나 이상의 열을 검색하는 서브 질의
2. 인라인 뷰(Inline View): FROM절에 나타나는 서브쿼리
3. 스칼라 서브 쿼리(Scalar Subquery): SELECT절에 나타나는 서브쿼리
Subquery의 규칙
- 서브 쿼리는 괄호로 묶어서 사용
- 단일 행 연산자 또는 다중 행 연산자로 서브쿼리 연결
- 서브쿼리를 실행한 다음에 메인 쿼리가 실행된다.
- 여러 서브 쿼리를 중첩해서 사용 가능
<단일 행 서브쿼리>
- 서브쿼리 select 절에서 단일 행 결과를 메인 쿼리에 전달
- where에 사용되는 열의 개수와 데이터 타입 일치 필요
- 단일 행 연산자 사용 (위의 표 참고)
<다중 행 서브쿼리>
- 서브쿼리 select절에서 다중 행 결과를 메인쿼리에 전달
- 단일 행 연산자는 사용할 수 없고, 다중 행 연산자만 사용
다중 행 연산자 | 설명 |
IN | 서브쿼리 결과 중 같은 값이 포함되어 있으면 TRUE |
NOT IN | 서브쿼리 결과 중 같은 값이 포함되어 있지 않았으면 TRUE |
EXISTS | 서브쿼리 결과가 존재하면 TRUE |
ANY(SOME) | 서브쿼리 결과값이 메인쿼리의 WHERE 조건에 하나라도 만족하면 출력 |
ALL | 서브쿼리 결과값 모두가 메인쿼리의 WHERE 조건에 만족해야 출력 |
<실습>
💫 IN, NOT IN 예제
( DBeaver - database - logi)
💫 EXISTS 연산자 예제
: WHERE 다음에 바로 EXISTS (서브쿼리) 구조로 사용
💫 ANY 연산자 예제
메인쿼리 where의 비교 연산자 ' > '로 인해
서브쿼리 결과값의 문자열을 비교 조건으로 사용하여
cate2 가 '식육제품/기타' 이후의 문자열로 시작하는 데이터들을 출력한다.
- 서브쿼리는 메인쿼리의 조건을 만들기위한 쿼리일뿐 메인쿼리의 결과에 항상 포함되지 않는다 -
💫 ALL 연산자 예제
<Inline View>
'SQL' 카테고리의 다른 글
[MYSQL] 프로그래머스 SQL 문제풀기 (0) | 2024.03.18 |
---|---|
[MYSQL] LEFT,MID,RIGHT/ SUBSTR (0) | 2024.03.14 |
[MYSQL] GOALESCE(), 소수점 처리, DATEDIFF(), TIMESTAMPDIFF() (0) | 2024.02.16 |
[MYSQL] DATE_FORMAT() (0) | 2024.02.14 |
[MYSQL] JOIN 연산 (0) | 2023.12.20 |