반응형
[SQL_오라클] 서브 쿼리
********************************************************************
서브 쿼리
********************************************************************
중복 query => query 문 안에 query가 오는 것
- subquery 위치에 따른 분류
- SELECT 절 안에 오는 것 : scalar subquery
- 제약사항 - 값이 하나만 나와야 한다. scalar subquery에서 나오는 데이터는 하나의 튜플 안, 하나의 칼럼 안에 저장되어야 한다.
- FROM 절 안에 오는 것 : inline view
- WHY - View와 같이 subquery로 나오는 데이터 셋이 FROM 절에 읽혀 지기 때문에
- WHERE 절 안에 오는 것 : subquery
- SELECT 절 안에 오는 것 : scalar subquery
- 메인 query와의 연관성에 따른 분류
- 연관성 없는 subquery : 단순히 데이터를 제공하는 제공자 역할의 subquery
- subquery 먼저 실행
- 예)
SELECT employee_id, first_name, last_name
FROM employees
WHERE salary < ( SELECT ROUNT(AVG(salary))
FROM employee);
- 연관성 있는 subquery : 확인자 역할
- sub query먼저 실행 불
- 예
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);
- 연관성 없는 subquery : 단순히 데이터를 제공하는 제공자 역할의 subquery
- ANY => OR의 개념 : 아무 값보다
- ALL => AND의 개념 : 모든 값보다
- IN 연산자 안에 있는 sub query는 자동으로 DISTINCT를 해준다. 같은 값을 계속 비교하는 비 효율성을 없애기 위해서
- 만약 2가지 이상의 record를 비교하기 위해서는
(A, B) IN (SELECT A, B...
- 만약 2가지 이상의 record를 비교하기 위해서는
* 사족 - 먼저 읽히는 테이블을 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 |
댓글