서브 쿼리 Subquery

Bleu·2023년 9월 6일

sql

목록 보기
4/7

subquery

: sql문 내select 문을 삽입하는 것
: 주로 from 절이나 where 절에서 사용

  • main query : 실제 조회하고자 하는 query
  • sub query : main query 에서 사용 할 데이터를 조회하기 위한 query

종류

  • 단일 햏 서브 쿼리
    : 서브쿼리의 조회 결과가 한 행
  • 다중 행 서브 쿼리
    : 서브 쿼리의 조회 결과가 여러 행
  • inline view
    : 서브 쿼리를 from 절에 table 대신 사용

단일 행 서브쿼리

: 서브 춰리의 조회 결과가 0개 또는 1개인 쿼리

SELECT	department_name
FROM	department
WHERE	dpeartment_id = SELECT dpeartment_id
						FROM employee
						WHERE employee_name=‘홍길동')

다중 행 서브쿼리

: 서브 쿼리의 조회 결과 행이 0개 이상인 쿼리
→ in, all, any 연산자등과 사용됨

DELETE FROM:	employee
WHERE	salary IN (SELECE salary
				   FROM employee
				   WHERE department_id =30
  • where절 에서의 연산자
    → in (단일행에서의 == 대신 사용)
    → 비교연산자 any : 조회된 값들 중 하나만 참이면 참 (where 컬럼 > any(서브쿼리) )-> or 이라고 생각
    → 비교연산자 all : 조회된 값들 모두와 참이면 참 (where 컬럼 > all(서브쿼리) )

인 라인 뷰 Inline view

→ from절 상에 오는 서브쿼리
→ select 결과를 논리적 테이블로 처리

SELECT	e.employee_name ,
		d.department_name
FROM 	employee e,
		(select department_id from department where location=‘ 서울 ’) d
WHERE	e.department_id = d.department_id

동작 방식에 따른 구분

  • 비상관(비연관) 서브쿼리
    → 서브쿼리에 메인쿼리의 컬럼이 사용되지 않음
    → 메인쿼리에 사용할 값을 서브쿼리가 제공하는 역할을 함
  • 상관(연관) 서브쿼리
    → 서브쿼리에서 메인쿼리의 컬럼을 사용
    → 메인쿼리가 먼저 수행되어 읽혀진 데이터를 서브쿼리에서 조건이 맞는지 확인하고자 할때 주로 사용

서브쿼리는 반드시 ( ) 로 묶어줘야 한다.




상관 query


상관query 란…

상관(연관) 쿼리

: 메인 쿼리 table의 조회 값을 서브 쿼리의 조건에서 사용하는 쿼리

  • 메인 쿼리를 실행하고 그 결과를 바탕으로 서브 쿼리의 조건절을 비교
    • 메인 쿼리의 where을 실행하면서 subquery가 같이 실행된다. 이때 메인쿼리 where 절에서 비교하는 그 행의 컬럼값들을 가지고 subquery가 실행됨

EXISTS, NOT EXISTS 연산자

(상관(연관)쿼리와 같이 사용됨)

→ 서브쿼리의 결과를 만족하는 값이 존재하는지 여부를 확인하는 조건
→ 조건을 만족하는 행이 여러개라도 한행만 있으면 더이상 검색하지 않음

  • 보통 데이터 테이블의 값이 이력 테이블(Transaction TB)에 있는지 여부를 조회할 때 사용
    • 메인 쿼리: 데이터 테이블 - 부모
    • 서브 쿼리: 이력 테이블 - 자식
    • 메인 쿼리에서 조회할 행이 서브 쿼리의 테이블에 있는지(또는 없는지) 확인
  • 고객(데이터) 주문(이력) → 특정 고객이 주문을 한 적이 있는지 여부

  • 장비(데이터) 대여(이력) → 특정 장비가 대여 된 적이 있는지 여부




0개의 댓글