7.1 SUBQERY의 개념
하나의 SELECT문 안에 포함되어 있는 또 다른 SELECT 문장
SubQUERY는 괄호로 묶여 있어야 한다
SubQUERY구문에서는 ORDER BY절 포함 불가
SubQUERY는 연산자의 오른쪽
SubQUERY에서 사용할 수 있는 연산자의 종류
단일행 연산자 | = , > , >= , < , <=, <> |
복수행 연산자 | IN , NOT IN |
SELECT 검색할 컬럼들
FROM 테이블명
WHERE 형식 연산자 ( SELECT 검색할 컬럼들
FROM 테이블명
... );
7.2 Single Row SibQUERY
Single Row SibQUERY란 SubQUERY에서 Main QUERY로 전달되는 행이 단 하나인 경우
이런 경우는 단일행 연산자를 사용한다
SELECT name, title, dept_id
FROM s_emp
WHERE dept_id = ( SELECT dept_id
FROM s_emp
WHERE name = '김정미');
-- s_emp 테이블에서 이름, 직책, 부서
-- 부서가 111인 사람들 중에
-- 이름이 '김정미' 인 사람을 출력
7.3 Multi Row SubQUERY
Multi Row SubQUERY란 SubQUERY에서 Main QUERY로 전달되는 행이 여러개인 경우
이런 경우는 다중행 연한자를 사용한다
SELECT name, dept_id
FROM s_emp
WHERE dept_id IN ( SELECT id
FROM s_dept
WHERE region_id = 3);
7.4 Multi - column SubQUERY
Multi - column SubQUERY란 SubQUERY구문을 작성할 때 WHERE절에서 비교하는 칼럼이 하나가 아니라
여러 개의 칼럼을 동시에 비교하는 경우
이런 경우를 pair-wise되었다고 한다
SELECT name, dept_id, salary
FROM s_emp
WHERE (salary, dept_id) IN
( SELECT MIN(salary), dept_id
FROM s_emp
GROUP BY dept_id);
7.5 FROM절에서의 SubQUERY
SELECT e.name, e.title, d.name
FROM (SELECT name, title, dept_id
FROM s_emp
WHERE title = '사원') e, s_dept d
WHERE e.dept_id = d.id;
한 테이블에 데이터의 양이 많은 경우에는 FROM절에 테이블 전체를 기술하여 사용하면 효율이 떨어질 수 있다
이럴 때는 일부의 행과 컬럼을 선택하여 FROM절에 SubQUERY로 효율적인 검색이 가능
이런 SubQUERY를 INLINE VIEW라고 부른다
7.6 HAVING절에서의 SubQUERY
SELECT dept_id, AVG(salary)
FROM s_emp
GROUP BY dept_id
HAVING AVG(salary) > (SELECT AVG(salary)
FROM s_emp
WHERE dept_id = 113);
7.7 CREATE절에서의 SubQUERY
CREATE TABLE emp_113 (id, name, mailid, start_date)
AS SELECT id, name, mailid, start_date
FROM s_emp
WHERE dept_id = 113;
테이블을 생성할 때 이미 만들어져 있는 기존의 테이블을 이용해서 특정 컬럼 또는 행만으로 원하는 테이블을 생성
데이터는 제외하고 테이블만 생성하려는 조건절이 항상 거짓이게 하면 된다
(생성할 테이블의 컬럼명을 생략하면, SELECT문의 컬럼명과 동일하게 된다)
7.8 DML문에서의 SubQUERY
INSERT INTO emp_113
(id, name, mailid, start_date)
SELECT id, name, mailid, start_date
FROM s_emp
WHERE start_date < '16/01/01' ;
UPDATE s_emp
SET dept_id = (SELECT dept_id
FROM s_emp
WHERE title = '사장' )
WHERE name = '안창환' ;
'SQL > 기초' 카테고리의 다른 글
SQL 정리 9일차 TRANSACTION CONTROL (0) | 2023.08.29 |
---|---|
SQL 정리 8일차 CONSTRAINT (0) | 2023.08.27 |
SQL 정리 6일차 JOIN (0) | 2023.08.16 |
SQL 정리 5일차 GROUP BY, HAVING (0) | 2023.08.13 |
SQL 정리 4일차 -2- 날짜형 함수, 변환형 함수 (0) | 2023.08.11 |