서브쿼리(SUBQUERY)

나찬웅·2024년 10월 17일

DB

목록 보기
7/10

🚀 서브쿼리 란?

  • 메인쿼리 내부에 작성하는 쿼리

SUBQUERY(서브쿼리 == 내부 쿼리)

  • 하나의 SQL문 안에 포함된 또다른 SQL(SELECT)문
  • 메인쿼리(==외부 쿼리, 기존 쿼리)를 위해 보조 역할을 하는 쿼리문
  • 메인쿼리가 SELECT 문 일 때
  • SELECT, FROM, WHERE, HAVING 절에서 사용 가능


단일행 / 다중행 서브쿼리

  1. 단일행 서브쿼리(SINGLE ROW SUBQUERY)
    -- 서브쿼리의 조회 결과 값의 개수가 1개인 서브쿼리
    -- 단일 행 서브쿼리 앞에는 비교 연산자 사용
    -- <, >, <=, >=, =, !=, <>, ^=
  1. 다중행 서브쿼리 (MULTI ROW SUBQUERY)
    -- 서브쿼리의 조회 결과 값의 개수가 여러행일 때
    -- 다중행 서브쿼리 앞에는 일반 비교연산자 사용 X
  • IN / NOT IN : 여러 개의 결과값 중에서 한 개라도 일치하는 값이 있다면
    혹은 없다면 이라는 의미 (가장 많이 사용!)

  • ANY, < ANY : 여러개의 결과값 중에서 한 개라도 큰 / 작은 경우
    가장 작은 값 보다 큰가? / 가장 큰 값 보다 작은가?

  • ALL, < ALL : 여러개의 결과값의 모든 값 보다 큰 / 작은 경우
    가장 큰 값 보다 큰가? / 가장 작은 값 보다 작은가?

  • EXISTS / NOT EXISTS : 값이 존재하는가? / 존재하지 않는가?

  1. (단일행) 다중열 서브쿼리
    -- 서브쿼리 SELECT 절에 나열된 컬럼 수가 여러 개 일 때
  1. 다중행 다중열 서브쿼리
    -- 서브쿼리 조회 결과 행 수와 열 수가 여러개 일 때
  1. 상(호연)관 서브쿼리
    서브쿼리가 만든 결과 값을 메인 쿼리가 비교 연산할 때
    메인 쿼리 테이블의 값이 변경되면 서브쿼리의 결과 값도 바뀌는 서브쿼리

6. 스칼라 서브쿼리
SELECT절에 사용되는 서브쿼리 결과로 1행만 반환함
-- SQL 에서 단일 값을 '스칼라' 라고 함.
-- 즉, SELECT 절에 작성되는 단일행 단일열 서브쿼리를 스칼라 서브쿼리라고 함.

  1. 인라인 뷰 (INLINE-VIEW)
    -- FROM 절에서 서브쿼리를 사용하는 경우로
    -- 서브쿼리가 만든 결과의집합(RESULT SET)을 테이블 대신 사용.
  1. WITH
    -- 서브 쿼리에 이름 붙여주고 사용 시 이름을 사용하게 함
    -- 인라인뷰로 사용될 서브쿼리에 주로 사용됨
    -- 실행속도가 빨라진다는 장점이 있음.

9. RANK() OVER / DENSE_RANK() OVER
-- RANK() OVER : 동일한 순위 이후의 등수를 동일한 인원 수 만큼 건너 뛰고 순위 계산.
-- EX) 공동 1위가 2명이면 다음 순위는 2위가 아니라 3위로.


-- DENSE_RANK() OVER : 동일한 순위 이후의 등수를 이후 순위로 계산
-- EX) 공동 1위가 2명이어도 다음 순위 2위

예시)
-- 사원별 급여 순위
-- RANK() OVER (정렬순서)
--19 전형돈 2000000
--19 윤은해 2000000
--21 박나라 1800000


-- DENSE_RANK() OVER : 동일한 순위 이후의 등수를 이후 순위로 계산
--19 전형돈 2000000
--19 윤은해 2000000
--20 박나라 1800000

0개의 댓글