본문 바로가기
CS/데이터베이스

[Oracle] 서브쿼리 - 데이터 입력/수정/삭제/통합

by 김크롱 2020. 9. 18.

서브쿼리 - 데이터 입력/수정/삭제/통합

 

데이터 입력

- 여러 행을 한 번에 테이블에 입력

기본

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으로 수정