7. SUBQUERY
1) SubQUERY
- 하나의 SELECT문 안에 포함된 또 다른 SELECT문
- 제한: 연산자 좌측 괄호 내에 위치, ORDER BY절 포함 불가
- 사용 가능 연산자: =, >, >=, <, <=, <> / IN, NOT IN
- 문형
SELECT 대상 컬럼
FROM 테이블명
WHERE 형식 연산자 (SELECT 대상 컬럼 FROM 테이블명...);
2) Single Row SubQUERY
- Main Query로 전달되는 행이 단 하나인 경우(단일 행 연산자 사용)
- 예시
SELECT name, title, dept_id
FROM s_emp
WHERE dept_id = ( SELECT dept_id FROM s_emp WHERE name= '김정미');
3) Multi Row SubQUERY
- Main Query로 전달되는 행이 여러개인 경우(다중 행 연산자 사용)
- 예시
SELECT name, dept_id
FROM s_emp
WHERE dept_id IN ( SELECT id FROM s_dept WHERE region_id = 3);
4) Multi-column 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);
5) FROM절에서의 SubQUERY
- 테이블 일부의 행과 컬럼 선택(INLINE VIEW)
- 예시
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;
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) CREATE절에서의 SubQUERY
- 기존 테이블을 이용해서 원하는 테이블 생성시 사용
- 컬럼명 생략시 SELECT문의 컬럼명과 동일(제외 조건을 이용해서 컬럼명 복사 가능)
- 예시
CREATE TABLE emp_113 (id, name, mailid, start_date)
AS SELECT id, name, mailid, start_date
FROM s_emp
WHERE dept_id = 113;
8) DML문에서의 SubQUERY
- INSERT 예시
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 예시
UPDATE s_emp
SET dept_id = (SELECT dept_id FROM s_emp WHERE title = '사장' )
WHERE name = '안창환';
'프로그래밍 > SQL' 카테고리의 다른 글
[SQL 요약 정리] 1-9. TRANSACTION CONTROL (0) | 2019.02.08 |
---|---|
[SQL 요약 정리] 1-8. CONSTRAINT (0) | 2019.02.08 |
[SQL 요약 정리] 1-6. JOIN (0) | 2019.02.08 |
[SQL 요약 정리] 1-5. SUBGROUP으로 데이터분류 (0) | 2019.02.08 |
[SQL 요약 정리] 1-4. 내장 함수(STORED FUNCTION) (0) | 2019.02.08 |