๋ฐ์ดํ„ฐ๋ถ„์„๊ฐ€ ๊ณผ์ •/SQL

DAY05. SQL Basic DML (INSERT, UPDATE, DELETE), Sequence

LEE_BOMB 2021. 9. 15. 16:21
๋ฐ์ดํ„ฐ ์กฐ์ž‘์–ด (DML)

- INSERT, UPDATE, DELETE : commit ๋Œ€์ƒ (๊ตฌ์กฐ๋ณ€๊ฒฝ)

- SELECT : commit ๋Œ€์ƒ ์•„๋‹˜ (๋‹จ์ˆœ ๊ฒ€์ƒ‰. ๊ตฌ์กฐ ๋ณ€๊ฒฝ ์—†์Œ)

- ๋‹จ์ผ query / sub query ์ด์šฉ

INSERT/UPDATE/DELETE - ๋ฉ”์ธ์ฟผ๋ฆฌ

SELECT์ ˆ - 1์ฐจ ์„œ๋ธŒ์ฟผ๋ฆฌ

โ€‹

ํ…Œ์ด๋ธ” ์‚ญ์ œ

DROP TABLE dept01 PURGE;

โ€‹

ํ…Œ์ด๋ธ” ์ƒ์„ฑ

CREATE TABLE DEPT01(
DEPTNO NUMBER(4),
DNAME VARCHAR2(30),
LOC VARCHAR2(20)
);

โ€‹

1. ๋ ˆ์ฝ”๋“œ ์‚ฝ์ž…(insert)

1) ๊ธฐ๋ณธ qeury ์ด์šฉ

INSERT INTO dept01(deptno, dname, loc)
VALUES(10, 'ACCOUNTING', 'NEW YORK');

โ€‹

๋ชจ๋“  ์นผ๋Ÿผ์— ์ž๋ฃŒ ์ž…๋ ฅ : ์นผ๋Ÿผ๋ช… ์ƒ๋žต

INSERT INTO DEPT01
VALUES (20, 'RESEARCH', 'DALLAS');
SELECT * FROM dept01;

โ€‹

โ€‹

1. EMP ํ…Œ์ด๋ธ”์˜ 4๊ฐœ ์นผ๋Ÿผ์˜ ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜์—ฌ SAM01 ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜์‹œ์˜ค.

CREATE TABLE sam01
AS
SELECT empno, ename, job,sal FROM emp
WHERE 1=0;

โ€‹

2. SAM01 ํ…Œ์ด๋ธ”์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์‹œ์˜ค.

INSERT INTO SAM01 VALUES(1000, 'APPLE', 'POLICE', 10000);
INSERT INTO SAM01 VALUES(1001, 'BANANA', 'NURSE', 15000);
INSERT INTO SAM01 VALUES(1002, 'ORANGE', 'DOCTOR', 25000);
SELECT * FROM sam01;
DESC sam01;

โ€‹

์•”์‹œ์ (๋ฌต์‹œ์ ) NULL ์ž…๋ ฅ

INSERT INTO dept01 (deptno, dname)
VALUES (30, 'SALES'); -- loc์นผ๋Ÿผ ์ƒ๋žต, null๊ฐ’์ด ์ž๋™์œผ๋กœ ์‚ฝ์ž…

โ€‹

โ€‹๋ช…์‹œ์  NULL ์ž…๋ ฅ

INSERT INTO dept01
VALUES (40, 'OPERATIONS', NULL);
INSERT INTO dept01
VALUES (50, '', 'CHICAGO'); -- ''์•ˆ์˜ ๊ณต๋ฐฑ๋„ ๋ฌธ์ž์ทจ๊ธ‰๋˜๋ฏ€๋กœ ๊ณต๋ฐฑ๋„ ์—†์–ด์•ผํ•จ

SELECT*FROM dept01;

โ€‹

โ€‹

3. ๋ฌธ์ œ 1์—์„œ ์ƒ์„ฑํ•œ SAM01 ํ…Œ์ด๋ธ”์˜ JOB ์นผ๋Ÿผ์ด NULL๊ฐ’์„ ๊ฐ–๋Š” 2๊ฐœ์˜ ํ–‰์„ ์ถ”๊ฐ€ํ•˜์‹œ์˜ค.

SELECT * FROM sam01;
INSERT INTO sam01 VALUES(1030, 'VERY', '', 25000);
INSERT INTO sam01 VALUES(1040, 'CAT', '', 2000);

โ€‹

โ€‹

2) sub query๋ฅผ ์ด์šฉํ•ด ํ…Œ์ด๋ธ” ์‚ฝ์ž…

1. ์„œ๋ธŒ ์ฟผ๋ฆฌ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์šฐ์„  ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๋˜ ๋ฐ์ดํ„ฐ๋Š” ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  ๋นˆ ํ…Œ์ด๋ธ”๋งŒ ์ƒ์„ฑ

CREATE TABLE DEPT02
AS
SELECT * FROM DEPT WHERE 1=0;

โ€‹

๋ ˆ์ฝ”๋“œ ์ถ”๊ฐ€ (ASํ‚ค์›Œ๋“œ ์—†์Œ. DDL๊ณผ DML์˜ ์ฐจ์ด)

INSERT INTO dept02
SELECT*FROM dept;

โ€‹

4. ๋ฌธ์ œ 1์—์„œ ์ƒ์„ฑํ•œ SAM01 ํ…Œ์ด๋ธ”์— ์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ EMP ์— ์ €์žฅ๋œ ์‚ฌ์› ์ค‘ 10๋ฒˆ ๋ถ€์„œ ์†Œ์†์‚ฌ์›์˜ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜์‹œ์˜ค.

SELECT*FROM sam01;

INSERT INTO sam01
SELECT empno, ename, job, sal
FROM emp
WHERE deptno=10;

โ€‹

 

โ€‹

โ€‹2. ๋‹ค์ค‘ ํ…Œ์ด๋ธ”์— ๋‹ค์ค‘ ํ–‰ ์ž…๋ ฅํ•˜๊ธฐ

1) ๋‹ค์ค‘ ํ…Œ์ด๋ธ” ์ƒ์„ฑ

CREATE TABLE emp_hir
AS
SELECT empno, ename, hiredate
FROM emp
WHERE 1=0;
CREATE TABLE emp_mgr
AS
SELECT empno, ename, mgr
FROM emp
WHERE 1=0;

โ€‹

โ€‹2) ๋‹ค์ค‘ ๋ ˆ์ฝ”๋“œ ์‚ฝ์ž…

INSERT ALL
INTO emp_hir VALUES(empno, ename, hiredate) -- 2. ๊ฐ๊ฐ ํ…Œ์ด๋ธ”์— ๋ฟŒ๋ ค์„œ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์Œ
INTO emp_mgr VALUES(empno, ename, mgr)
SELECT empno, ename, hiredate, mgr -- 1. ์„œ๋ธŒ์ฟผ๋ฆฌ์—์„œ ์ถœ๋ ฅํ•œ ์นผ๋Ÿผ์„ ๊ฐ๊ฐ ํ…Œ์ด๋ธ”์— ๋ฟŒ๋ ค์„œ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์Œ
FROM EMP
WHERE DEPTNO=20;

SELECT * FROM emp_hir;
SELECT * FROM emp_mgr;

โ€‹

โ€‹

โ€‹3. ๋ ˆ์ฝ”๋“œ ์ˆ˜์ • (UPDATE)

CREATE TABLE emp01 -- empํ…Œ์ด๋ธ”์˜ ๋‚ด์šฉ+๊ตฌ์กฐ๋ฅผ ๋ชจ๋‘ ์˜ฎ๊ฒจ์˜ด
AS
SELECT * FROM emp;

โ€‹

WHERE์ ˆ ์—†์Œ -> ์ „์ฒด ๋ ˆ์ฝ”๋“œ ์ˆ˜์ •

1. ๋ชจ๋“  ์‚ฌ์›์˜ ๋ถ€์„œ๋ฒˆํ˜ธ๋ฅผ 30๋ฒˆ์œผ๋กœ ์ˆ˜์ •

UPDATE emp01
SET deptno=30;

โ€‹

2. ๋ชจ๋“  ์‚ฌ์›์˜ ๊ธ‰์—ฌ๋ฅผ 10% ์ธ์ƒ์‹œํ‚ค๋Š”

UPDATE emp01
SET sal = sal*1.1;

โ€‹

3. 3. ๋ชจ๋“  ์‚ฌ์›์˜ ์ž…์‚ฌ์ผ์„ ์˜ค๋Š˜๋กœ ์ˆ˜์ •

UPDATE emp01
SET hiredate = sysdate;

โ€‹โ€‹

WHERE์ ˆ ์žˆ์Œ -> ํŠน์ • ๋ ˆ์ฝ”๋“œ ์ˆ˜์ •

1. ๋ถ€์„œ๋ฒˆํ˜ธ๊ฐ€ 10๋ฒˆ์ธ ์‚ฌ์›์˜ ๋ถ€์„œ๋ฒˆํ˜ธ๋ฅผ 30๋ฒˆ์œผ๋กœ ์ˆ˜์ •

UPDATE emp01
SET deptno=30
WHERE deptno=10;

โ€‹

2. ๊ธ‰์—ฌ๊ฐ€ 3000 ์ด์ƒ์ธ ์‚ฌ์›๋งŒ ๊ธ‰์—ฌ๋ฅผ 10% ์ธ์ƒ

UPDATE emp01
SET sal = sal * 1.1
WHERE sal >= 3000;

โ€‹

3. 1987๋…„์— ์ž…์‚ฌํ•œ ์‚ฌ์›์˜ ์ž…์‚ฌ์ผ์„ ์˜ค๋Š˜๋กœ ์ˆ˜์ •ํ•œ๋‹ค. ์‚ฌ์›์˜ ์ž…์‚ฌ์ผ์„ ์˜ค๋Š˜๋กœ ์ˆ˜์ •ํ•œ ํ›„์— ํ…Œ์ด๋ธ” ๋‚ด์šฉ ๋ณด๊ธฐ

UPDATE emp01
SET hiredate = SYSDATE
WHERE SUBSTR(hiredate, 1, 2)='87';

โ€‹

5. SAM01 ํ…Œ์ด๋ธ”์— ์ €์žฅ๋œ ์‚ฌ์› ์ค‘ ๊ธ‰์—ฌ๊ฐ€ 10000 ์ด์ƒ์ธ ์‚ฌ์›๋“ค์˜ ๊ธ‰์—ฌ๋งŒ 5000์›์”ฉ ์‚ญ๊ฐํ•˜์‹œ์˜ค.

UPDATE sam01
SET sal = sal-5000
WHERE sal>=10000;

โ€‹โ€‹

ํ…Œ์ด๋ธ”์—์„œ 2๊ฐœ ์ด์ƒ์˜ ์นผ๋Ÿผ ๊ฐ’ ๋ณ€๊ฒฝ

1. SCOTT ์‚ฌ์›์˜ ๋ถ€์„œ๋ฒˆํ˜ธ 20๋ฒˆ, ์ง๊ธ‰์€ MANAGER๋กœ ํ•œ๊บผ๋ฒˆ์— ์ˆ˜์ •

UPDATE emp01
SET deptno=20, JOB='MANAGER'
WHERE ename='SCOTT';

โ€‹

2. SCOTT ์‚ฌ์›์˜ ์ž…์‚ฌ์ผ์ž๋Š” ์˜ค๋Š˜, ๊ธ‰์—ฌ๋ฅผ 50, ์ปค๋ฏธ์…˜์„ 4000 ์ˆ˜์ •

UPDATE emp01
SET hiredate = SYSDATE, sal=50, comm=4000
WHERE ename='SCOTT'; -- ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ˆ˜์ •์€ ์ฝค๋งˆ๋กœ ๊ตฌ๋ถ„

โ€‹

โ€‹

์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•œ ๋ ˆ์ฝ”๋“œ ์ˆ˜์ •ํ•˜๊ธฐ

1. 20๋ฒˆ ๋ถ€์„œ์˜ ์ง€์—ญ๋ช…์„ 10๋ฒˆ ๋ถ€์„œ์˜ ์ง€์—ญ๋ช…์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ ์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฌธ์„ ์‚ฌ์šฉ

UPDATE dept01
SET loc=(SELECT loc FROM dept01 WHERE deptno=10) -- ์„œ๋ธŒ์ฟผ๋ฆฌ ์กฐ๊ฑด์„
WHERE deptno=20; -- ๋ฉ”์ธ์ฟผ๋ฆฌ์—์„œ ๋ฐ›์•„ 20๋ฒˆ ๋ถ€์„œ์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊พผ๋‹ค

โ€‹

6. ์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ EMP ํ…Œ์ด๋ธ”์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์˜ ํŠน์ • ์ปฌ๋Ÿผ๋งŒ์œผ๋กœ ๊ตฌ์„ฑ๋œ SAM02 ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜์‹œ์˜ค.

CREATE TABLE sam02
AS
SELECT ename, sal, hiredate, deptno FROM emp;

 

7. ์ƒ์„ฑ ํ›„ DALLAS ์— ์œ„์น˜ํ•œ ๋ถ€์„œ ์†Œ์† ์‚ฌ์›๋“ค์˜ ๊ธ‰์—ฌ๋ฅผ 1000 ์ธ์ƒํ•˜์‹œ์˜ค.

SELECT * FROM sam02;

UPDATE sam02
SET sal=sal+1000
WHERE deptno=(SELECT deptno FROM dept WHERE loc='DALLAS'); -- DALLAS์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€์„œ ๋ฒˆํ˜ธ๋Š” 20.

โ€‹

โ€‹

์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•œ ๋‘ ๊ฐœ ์ด์ƒ์˜ ์นผ๋Ÿผ ๊ฐ’ ๋ณ€๊ฒฝ

/* ํ˜•์‹ UPDATE table_name

SET (column_name1, column_name2, …) = (sub_query)

WHERE ์กฐ๊ฑด

*/

UPDATE dept01
SET (dname, loc)=(SELECT DNAME, LOC FROM DEPT01 WHERE DEPTNO=10)
WHERE DEPTNO=50;
-- [ํ•ด์„] 10๋ฒˆ ๋ถ€์„œ์˜ ์ด๋ฆ„๊ณผ ์œ„์น˜๋ฅผ 50๋ฒˆ ๋ถ€์„œ์˜ ์ด๋ฆ„๊ณผ ์œ„์น˜๊ฐ’๊ณผ ๋™์ผํ•˜๊ฒŒ ์ˆ˜์ •ํ•˜๊ฒ ๋‹ค.

โ€‹

8. ์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ SAM02 ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์‚ฌ์›์˜ ๊ธ‰์—ฌ์™€ ์ž…์‚ฌ์ผ์„ ์ด๋ฆ„์ด KING์ธ ์‚ฌ์›์˜ ๊ธ‰์—ฌ์™€ ์ž…์‚ฌ์ผ๋กœ ๋ณ€๊ฒฝํ•˜์‹œ์˜ค.

UPDATE sam02
SET (sal, hiredate) = (SELECT sal,hiredate FROM sam02 WHERE ename='KING');

โ€‹

 

โ€‹โ€‹

4. ๋ ˆ์ฝ”๋“œ ์‚ญ์ œ (DELETE)

1) ๋‹จ์ผ query

DELETE FROM dept01
WHERE deptno = 30;

โ€‹

2) ์ „์ฒด ๋ ˆ์ฝ”๋“œ ์‚ญ์ œ

DELETE FROM dept01;

โ€‹

9. SAM01 ํ…Œ์ด๋ธ”์—์„œ ์ง์ฑ…์ด ์ •ํ•ด์ง€์ง€ ์•Š์€ ์‚ฌ์›์„ ์‚ญ์ œํ•˜์‹œ์˜ค.

DELETE FROM sam01
WHERE job IS NULL;

โ€‹

โ€‹

โ€‹

2) sub query ์ด์šฉ

์‚ฌ์› ํ…Œ์ด๋ธ”์—์„œ ๋ถ€์„œ๋ช…์ด SALES์ธ ์‚ฌ์›์„ ๋ชจ๋‘ ์‚ญ์ œ

DELETE FROM emp01
WHERE deptno=(SELECT deptno FROM dept WHERE dname='SALES'); -- ๋ถ€์„œ๋ฒˆํ˜ธ 30๋ฒˆ
SELECT*FROM emp01;

โ€‹

DB๋ฐ˜์˜

commit;

โ€‹

๋ช…๋ น ์ด์ „์œผ๋กœ ๋ณต์›

ROLLBACK; -- ๋‹จ, commit ์ด์ „ DML๋ช…๋ น๋งŒ ๋ณต์›๋จ

 

 

 

 

 

Sequence (์‹œํ€€์Šค)

CREATE SEQUENCE deptno_seq -- deptno_seq๋ฅผ ๊ฐ์ฒด๋ผ๊ณ  ํ‘œํ˜„

INCREMENT BY 1 -- 1์”ฉ ์ฆ๊ฐ€ํ•˜๋Š”

START WITH 1; -- 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ 

IN~๊ณผ ST~์˜ ์ˆœ์„œ๋Š” ์ƒ๊ด€์—†์Œ

โ€‹

1. ์‹œํ€€์Šค ์ƒ์„ฑ

CREATE SEQUENCE emp_seq
START WITH 1
INCREMENT BY 1
MAXVALUE 100000;
-- ์‹œ์ž‘ ๊ฐ’์ด 1์ด๊ณ , 1์”ฉ ์ฆ๊ฐ€ํ•˜๊ณ , ์ตœ๋Œ“๊ฐ’์ด 100000์ด ๋˜๋Š” ์‹œํ€€์Šค emp_seq๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

โ€‹

2. ํ…Œ์ด๋ธ” ์ƒ์„ฑ

DROP TABLE emp01 PURGE;
CREATE TABLE emp01( -- ํ…Œ์ด๋ธ” ์ƒ์„ฑ
empno NUMBER(4) PRIMARY KEY, --๊ธฐ๋ณธํ‚ค
ename VARCHAR2(10),
hiredate DATE
);

โ€‹

3. ๋ ˆ์ฝ”๋“œ ์‚ฝ์ž… : ์‹œํ€€์Šค ์ด์šฉ

INSERT INTO EMP01
VALUES(emp_seq.NEXTVAL, 'JULIA' , SYSDATE); -- (emp_seq.NEXTVAL) -> (๊ฐ์ฒด.๋ฉค๋ฒ„)์˜ ๊ด€๊ณ„
-- [ํ•ด์„] ๊ธฐ๋ณธ ํ‚ค ์„ค์ •์ด ๋œ ํ…Œ์ด๋ธ” empno์˜ ์นผ๋Ÿผ ๊ฐ’์„ ์‹œํ€€์Šค๋กœ ๋Œ€์ฒดํ•œ๋‹ค.
-- NEXTVAL์— ์‹œํ€€์Šค ๊ฐ’ 1์ด ์ž…๋ ฅ๋œ๋‹ค.
INSERT INTO EMP01
VALUES(emp_seq.NEXTVAL, 'HONG' , SYSDATE); -- empno์˜ ๊ฐ’์ด +1 ๋˜์–ด 2๋กœ ์„ค์ •๋˜์—ˆ์Œ

โ€‹

4. ๋ฐ์ดํ„ฐ ์‚ฌ์ „ ๋ทฐ : ์‹œํ€€์Šค ์ •๋ณด ํ™•์ธ

SELECT * FROM USER_SEQUENCES; -- ์‹œํ€€์Šค ํ™•์ธ
SELECT * FROM USER_TABLES; -- ํ…Œ์ด๋ธ” ํ™•์ธ

โ€‹โ€‹

5. ์‹œํ€€์Šค ์‚ญ์ œ (PURGE ๋ช…๋ น์–ด ํ•„์š”X)

DROP SEQUENCE emp_seq;

 

 

 

์‹ค์Šต
CREATE SEQUENCE dept_deptno_seq -- ์‹œํ€€์Šค ์ƒ์„ฑ
START WITH 10
INCREMENT BY 10
MAXVALUE 30;

โ€‹

ํ…Œ์ด๋ธ” ์ƒ์„ฑ (๊ตฌ์กฐ๋งŒ)

CREATE TABLE dept_exam
AS
SELECT * FROM dept
WHERE 1=0;

โ€‹

๋ ˆ์ฝ”๋“œ ์ถ”๊ฐ€

INSERT INTO dept_exam VALUES (dept_deptno_seq.NEXTVAL, '์ธ์‚ฌ๊ณผ', '์„œ์šธ์‹œ');
INSERT INTO dept_exam VALUES (dept_deptno_seq.NEXTVAL, '๊ฐœ๋ฐœ๋ถ€', '๋Œ€์ „์‹œ');
INSERT INTO dept_exam VALUES (dept_deptno_seq.NEXTVAL, '์ด๋ฌด๋ถ€', '์„œ์šธ์‹œ');

INSERT INTO dept_exam VALUES (dept_deptno_seq.NEXTVAL, '์ด๋ฌด๋ถ€', '์„œ์šธ์‹œ'); -- error ๋ฐœ์ƒ. WHY? ์ตœ๋Œ€๊ฐ’์ด 30์ด๋ฏ€๋กœ

โ€‹โ€‹

6. ์‹œํ€€์Šค ์ˆ˜์ •

ALTER SEQUENCE dept_deptno_seq MAXVALUE 1000; -- ์ตœ๋Œ€๊ฐ’์„ 1000์œผ๋กœ ์ˆ˜์ •
INSERT INTO dept_exam VALUES (dept_deptno_seq.NEXTVAL, '์ด๋ฌด๋ถ€', '์„œ์šธ์‹œ'); -- error ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ

โ€‹

โ€‹ 7. ๋ฐ์ดํ„ฐ ์‚ฌ์ „ ๋ทฐ : ์‹œํ€€์Šค ๊ตฌ์กฐ ํ™•์ธ

SELECT*FROM USER_SEQUENCES;