데이터베이스 -8

김정현·2024년 5월 13일
0

데이터베이스

목록 보기
6/16

서브 쿼리

특징

1) 서브 쿼리는 연산자와 같은 비교 또는 조회 대상의 오른쪽에 놓이며 괄호 ( )로 묶어서 사용합니다.
2) 특수한 몇몇 경우를 제외한 대부분의 서브쿼리에서는 ORDER BY 절을 사용할 수 없습니다.
3) 서브쿼리의 SELECT절에 명시한 열은 메인쿼리의 비교 대상과 같은 자료형과 같은 개수로 지정해야 합니다. 즉 메인쿼리의 비교 대상 데이터가 하나라면 서브쿼리의 SELECT절 역시 같은 자료형인 열을 하나 지정해야 합니다.
4) 서브쿼리에 있는 SELECT문의 결과 행 수는 함께 사용하는 메인쿼리의 연산자 종류와 호환 가능해야 합니다. 예를 들어 메인쿼리에 사용한 연산자가 단 하나의 데이터로만 연산이 가능한 연산자라면 서브쿼리의 결과 행 수는 반드시 하나여야 합니다.

실행 결과가 하나인 단일행 서브 쿼리

  1. 단일행 서브 쿼리(single-row subquery)는 실행 결과가 단 하나의 행으로 나오는 서브쿼리를 뜻합니다.
  2. 서브쿼리에서 출력되는 결과가 하나이므로 메인쿼리와 서브쿼리 결과는 다음과 같이 단일행 연산자를 사용하여 비교
  3. 단일행 서브쿼리와 날짜형 데이터
  4. 단일행 서브쿼리와 함수

실행 결과가 여러 개인 다중행 서브 쿼리

  1. 다중행 서브쿼리(multiple-row subquery)는 실행 결과 행이 여러 개로 나오는 서브쿼리를 가리킵니다.

  2. 단일행 서브쿼리와 달리 서브쿼리 결과가 여러 개이므로 단일행 연산자는 사용할 수 없고 다중행 연산자를 사용해야 메인쿼리와 비교할 수 있습니다.

  3. IN 연산자
    -부서별 최대 급여 직원 목록

  4. ANY, SOME 연산자
    -쿼리 결과 값이 하나라도 참이면 참

SELECT * FROM EMP
WHERE SAL < ANY (SELECT SAL FROM EMP WHERE DEPTNO=30);
  1. ALL 연산자
    -쿼리 결과 값이 모두 참 -> 참
    -30번 부서의 최대 급여보다 더 많이 받는 직원 목록
SELECT * FROM EMP
WHERE SAL > ALL (SELECT SAL FROM EMP WHERE DEPTNO=30);

모든 조건이 참이여야함

  1. EXISTS 연산자
    -서브쿼리의 레코드가 있으면 참
    -30번 부서가 부서 테이블에 존재하면 직원 목록

비교할 열이 여러 개인 다중열 서브쿼리

  1. 서브쿼리의 SELECT절에 비교할 데이터를 여러 개 지정하는 방식
  2. 다중열 서브쿼리 사용하기

FROM절에 사용하는 서브쿼리와 WITH절

  1. 인라인 뷰(inline view) : 가상 테이블, 서브 쿼리결과를 가지고 가상 테이블 생성
SELECT * FROM 
(SELECT * FROM EMP WHERE DEPTNO IN (10, 20))
  1. WITH절 사용하기
  2. 상호 연관 서브쿼리
    -메인쿼리의 결과 데이터를 서브 쿼리에서 사용

SELECT 절에 사용하는 서브쿼리

  1. 스칼라 서브쿼리(scalar subquery)
    스칼라: 단일값 :단일행 서브쿼리

  2. SELECT절에 서브쿼리 사용하기

  3. SELECT 절에 명시하는 서브쿼리는 반드시 하나의 결과만 반환하도록 작성

0개의 댓글