본문 바로가기
Computer Science & Engineering/Oracle

[SQL_오라클] 서브쿼리

by Mr.꾸 2022. 6. 10.
반응형

[SQL_오라클] 서브 쿼리

 

********************************************************************

서브 쿼리

********************************************************************
중복 query => query 문 안에 query가 오는 것

  1. subquery 위치에 따른 분류
    1. SELECT 절 안에 오는 것 : scalar subquery
      1. 제약사항 - 값이 하나만 나와야 한다. scalar subquery에서 나오는 데이터는 하나의 튜플 안, 하나의 칼럼 안에 저장되어야 한다.
    2. FROM 절 안에 오는 것 : inline view
      1. WHY - View와 같이 subquery로 나오는 데이터 셋이 FROM 절에 읽혀 지기 때문에
    3. WHERE 절 안에 오는 것 : subquery
  2. 메인 query와의 연관성에 따른 분류
    1. 연관성 없는 subquery : 단순히 데이터를 제공하는 제공자 역할의 subquery
      1. subquery 먼저 실행
      2. 예)
        SELECT employee_id, first_name, last_name
        FROM employees
        WHERE salary < ( SELECT ROUNT(AVG(salary))
                                   FROM employee);
    2. 연관성 있는 subquery : 확인자 역할 
      1. sub query먼저 실행 불

      2. SELECT emp.employee_id, emp.first_name
        FROM employees emp
        WHERE emp.employee_id NOT IN
        (SELECT dep.employee_id
         FROM departments dep
         WHERE dep.employee_id = emp.employee_id);
  3. ANY => OR의 개념 : 아무 값보다
  4. ALL => AND의 개념 : 모든 값보다
  5. IN 연산자 안에 있는 sub query는 자동으로 DISTINCT를 해준다. 같은 값을 계속 비교하는 비 효율성을 없애기 위해서
    1. 만약 2가지 이상의 record를 비교하기 위해서는
      (A, B) IN (SELECT A, B...

* 사족 - 먼저 읽히는 테이블을 Driving Table이라고 한다.
확인자 서브 쿼리와 공급자 서브 쿼리 중 어떠한 것이 빠르다고 할 수 없다. 그때그때 다르다.

728x90

'Computer Science & Engineering > Oracle' 카테고리의 다른 글

데이터 베이스의 용도??  (0) 2022.06.10
[SQL_오라클] SET 연산자  (0) 2022.06.10
[SQL_오라클] JOIN  (0) 2022.06.10
[SQL_오라클] GROUP QUERY  (0) 2022.06.10
[SQL_오라클] 1일차 숙제  (0) 2022.06.10

댓글