서브쿼리 - 데이터 입력/수정/삭제/통합
데이터 입력
- 여러 행을 한 번에 테이블에 입력
기본
INSERT INTO table1(column1 column2, column3, column4)
SELECT column1, column2 column3, column4
FROM table2
WHERE column4=100;
: table1에 table2의 데이터를 입력
- INSERT INTO table () VALUES (); 문에서 VALUES를 서브쿼리로 대체.
- table1의 COLUMN 순서대로 입력
* 테이블 구조만 복사
CREATE TABLE newtable
as
SELECT *
FROM oldtable
WHERE 1=2;
데이터 수정
기본
UPDATE table1
SET column1 = (SELECT column1
FROM table1
WHERE column2='KOREA')
WHERE column3='100';
: column3가 100인 경우 column1을 column2가 'KOREA'인 경우의 column1으로 수정
여러 컬럼 수정
UPDATE table1
SET column1,column2,column3 = (SELECT column1,column2,column3
FROM table1
WHERE column4='KOREA')
WHERE column5='100';
데이터 삭제
기본
DELETE FROM table1
WHERE column1 > (SELECT column1
FROM table1
WHERE column2='KOREA');
: 'KOREA' 보다 column1이 큰 경우 삭제
DELETE FROM table1 t1
WHERE column1 > (SELECT AVG(column1)
FROM table1 t11
WHERE t11.column2=t1.column2);
: t11.column2가 t1.column2와 같을 때, column1의 평균보다 크면 삭제
데이터 통합
기본
MERGE INTO table1 t1
USING (SELECT column1, SUM(column2) as nickname
FROM table2
GROUP BY column1) t2
ON (t1.column1=t2.column1)
WHEN MATCHED THEN
UPDATE SET t1.column3=t2.nickname;
--UPDATE문으로 수정할 경우
UPDATE table1 t1
SET column1 = (SELECT SUM(column1)
FROM table2 t2
WHERE t2.column2=t1.column2);
: 서브쿼리의 column1과 t1의 column1으로 조인되면 t1의 column3를 서브쿼리의 nickname으로 수정
'CS > 데이터베이스' 카테고리의 다른 글
[Oracle] 계층형 질의문 - 데이터 서열 (순서 - 정렬) (0) | 2020.09.22 |
---|---|
[Oracle] 계층형 질의문 - 데이터 서열 (순서 - 분기제거) (0) | 2020.09.22 |
[Oracle] 한번에 데이터 입력, 수정, 삭제 (MERGE) (0) | 2020.09.17 |
[Oracle] 데이터 저장과 취소 (COMMIT, ROLLBACK) (0) | 2020.09.17 |
[Oracle] 데이터 삭제 (DELETE, TRUNCATE, DROP) (0) | 2020.09.17 |