์ค๋ผํด(Oracle) - DML(Data Manipulation Language)
์์ ์ ์์ ์ฐ์ต์ฉ ํ ์ด๋ธ ์์ฑ (๊ธฐ์กด ํ ์ด๋ธ ๋ณต์ฌ)
CREATE TABLE DEPT_TEMP
AS SELECT * FROM DEPT;
DML?
- ๋ฐ์ดํฐ๋ฅผ ์กฐํ(SELECT), ์ญ์ (DELETE), ๋ณ๊ฒฝ(UPDATE), ์
๋ ฅ(INSERT) ๋ฑ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋๋ฐ ์ฌ์ฉํ๋ ๊ตฌ๋ฌธ
๐ ์กฐํ(SELECT)๋ DQL
ํ์ ๊ฐ์ฒด, ์ด์ ์ธ์คํด์ค ํ๋๋ผ๊ณ ์๊ฐํ๋ฉด ์ฝ๋ค.
๋ฐ๋ผ์,INSERT
๋ ๊ฐ์ฒด์งํฅ ๋ฌธ๋ฒ ์ค ์์ฑ์๋ฅผ ํตํดnew
ํ์ฌ ๊ฐ์ฒด ๋ง๋๋ ๊ฒ๊ณผ ์ ์ฌํจ.
๋ํ ์ ๊ทผ์ ํ์ ์ฒ๋ผ ๊ฐ ์ด๋ง๋ค ์ ์ฝ์กฐ๊ฑด ๊ฑธ ์ ์์(UNIQUE
,NOT NULL
...)
INSERT
- ํ ์ด๋ธ์ ๋ฐ์ดํฐ ์ถ๊ฐ
INSERT INTO ํ ์ด๋ธ์ด๋ฆ (์ด1, ์ด2, ...) VALUES(์ด์ ํด๋นํ๋ ๋ฐ์ดํฐ, ...);
(1) ํ ์ด๋ธ ๋ชฉ๋ก๊ณผ ์ถ๊ฐํ ๊ฐ์ ๋ชจ๋ ํ๊ธฐํ๋ ๋ฐฉ๋ฒ
INSERT INTO DEPT_TEMP(DEPTNO, DNAME, LOC) VALUES(50, 'DATABASE', 'SEOUL');
โฌ๏ธ ๋ฃ๊ณ ์ถ์ง ์์ ๋ฐ์ดํฐ๋ ์ ๋ฃ์ ์๋ ์๊ณ , ์์ ๋ฌ๋ผ์ ธ๋ ๋จ.
INSERT INTO DEPT_TEMP(LOC, DEPTNO) VALUES('INCHEON', 60);
INSERT INTO VALUES(์ด์ ํด๋นํ๋ ๋ฐ์ดํฐ, ...);
(2) ํ ์ด๋ธ ๋ชฉ๋ก ์๋ตํ๊ณ ๊ฐ์ ๋ฐ๋ก ๋ฃ๋ ๋ฐฉ๋ฒ
๐ก๋์ ํ ์ด๋ธ ์ด ์์๋๋ก ๊ฐ์ ๋ฃ์ด์ค์ผ ํจ.
INSERT INTO DEPT_TEMP VALUES(70, 'DEVELOPER', 'BUSAN');
NULL ๋ฐ์ดํฐ ์ ๋ ฅ
- NULL : ๊ฐ์ด ํ์ ๋์ด์์ง ์๊ฑฐ๋ ์ ํด์ง์ง ์์ ๊ฒฝ์ฐ
INSERT INTO DEPT_TEMP VALUES(80, 'WEB', NULL);
INSERT INTO DEPT_TEMP VALUES(90, 'FRONTEND', '');
INSERT INTO DEPT_TEMP(DEPTNO, LOC) VALUES (91, 'BUSAN');
ํ ์ด๋ธ๋ง ๋ณต์ฌํ๋ ๋ฐฉ๋ฒ(๋ฐ์ดํฐ ๋ณต์ฌX)
ํ ์ด๋ธ์ ๋ณต์ฌํ๋ฉด์ ๋ฐ์ดํฐ๋ ๋ณต์ฌํ๊ณ ์ถ์ง ์์ ๋ ์ฌ์ฉ
CREATE TABLE EMP_TEMP
AS SELECT * FROM EMP
WHERE 1 != 1;
๋ ์ง ๋ฐ์ดํฐ
- '2023/01/01'
- '2023-01-01'
- TO_DATE('2023/01/01', 'YYYY/MM/DD')
- SYSDATE
INSERT INTO EMP_TEMP VALUES(9004, '์ ์ถํฅ', 'CLERK', 9999, TO_DATE('2020/04/01', 'YYYY/MM/DD'), 5500, 800, 40);
INSERT INTO EMP_TEMP VALUES(9005, '์ด๋ชฝ๋ฃก', 'CLERK', 9999, SYSDATE, 3000, 800, 40);
UPDATE
- ํ ์ด๋ธ์ ์๋ ๋ฐ์ดํฐ ์์ ํ๊ธฐ
๐ก ๊ธฐ๋ณธ ํํ
UPDATE ๋ณ๊ฒฝํ ํ
์ด๋ธ
SET ๋ณ๊ฒฝํ ์ด = ๋ณ๊ฒฝํ ๋ฐ์ดํฐ, ๋ณ๊ฒฝํ ์ด = ๋ณ๊ฒฝํ ๋ฐ์ดํฐ, ...
WHERE ์กฐ๊ฑด;
๐ก ๊ธฐ๋ณธ ์์
UPDATE DEPT_TEMP SET LOC = 'SEOUL'; -- ๋ชจ๋ LOC๋ฅผ SEOUL๋ก ๋ฐ๊พธ๋..
UPDATE DEPT_TEMP
SET LOC = 'INCHEON'
WHERE DEPTNO = 80; -- ์กฐ๊ฑด์ ์ ์ถ๊ฐํ์ฌ ํด๋น ์กฐ๊ฑด์ธ ๋ฐ์ดํฐ๋ง ๋ฐ๊พธ๋..
UPDATE DEPT_TEMP
SET LOC = 'BUSAN'
WHERE DEPTNO = 90;
UPDATE DEPT_TEMP
SET DNAME = 'BACKEND', LOC = 'TOKYO'
WHERE DEPTNO = 60;
๐ก ์๋ธ์ฟผ๋ฆฌ ์ด์ฉํ์ฌ ์์ (์ ์์ฐ์)
UPDATE DEPT_TEMP
SET(DNAME, LOC) = (SELECT DNAME, LOC
FROM DEPT
WHERE DEPTNO = 40)
WHERE DEPTNO = 40;
DELETE
- ํ ์ด๋ธ์ ์๋ ๋ฐ์ดํฐ ์ญ์ ํ๊ธฐ
๐ก ๊ธฐ๋ณธ ํํ
DELETE FROM ํ
์ด๋ธ์ด๋ฆ
WHERE ์กฐ๊ฑด;
๐ก๊ธฐ๋ณธ ์์
CREATE TABLE EMP_TEMP2
AS SELECT * FROM EMP;
DELETE FROM EMP_TEMP2
WHERE ENAME = 'MILLER';
DELETE FROM EMP_TEMP2
WHERE JOB = 'MANAGER';
๐ก ์๋ธ์ฟผ๋ฆฌ ์ด์ฉํ์ฌ ์ญ์ (์ ์์ฐ์)
DELETE FROM EMP_TEMP2
WHERE EMPNO IN (SELECT E.EMPNO
FROM EMP_TEMP2 E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL
AND S.GRADE = 3
AND DEPTNO = 30);
DROP (ํ ์ด๋ธ ์ญ์ )
DROP TABLE ํ
์ด๋ธ๋ช
;
๐ธ ์ฐ์ต๋ฌธ์
1. EX_DEPT ํ ์ด๋ธ์ 50, 60, 70, 80์ ๋ฑ๋กํ๋ SQL๋ฌธ์ ์์ฑํ์ธ์.
INSERT INTO EX_DEPT VALUES(50, 'ORACLE', 'BUSAN');
INSERT INTO EX_DEPT VALUES(60, 'SQL', 'ILSAN');
INSERT INTO EX_DEPT VALUES(70, 'SELECT', 'INCHEON');
INSERT INTO EX_DEPT VALUES(80, 'DML', 'BUNDANG');
2. EX_EMP ํ ์ด๋ธ์ ๋ค์ 8๋ช ์ ์ฌ์ ์ ๋ณด๋ฅผ ๋ฑ๋กํ๋ SQL๋ฌธ์ ์์ฑํ์ธ์.
INSERT INTO EX_EMP VALUES(7201, 'TEST_USER1', 'MANAGER', 7788, '2016/01/02', 4500, NULL, 50);
INSERT INTO EX_EMP VALUES(7202, 'TEST_USER2', 'CLERK', 7201, '2016/02/21', 1800, NULL, 50);
INSERT INTO EX_EMP VALUES(7203, 'TEST_USER3', 'ANALYST', 7201, '2016/04/11', 3400, NULL, 60);
INSERT INTO EX_EMP VALUES(7204, 'TEST_USER4', 'SALESMAN', 7201, '2016/05/31', 2700, 300, 60);
INSERT INTO EX_EMP VALUES(7205, 'TEST_USER5', 'CLERK', 7201, '2016/07/20', 2600, NULL, 70);
INSERT INTO EX_EMP VALUES(7206, 'TEST_USER6', 'CLERK', 7201, '2016/09/08', 2600, NULL, 70);
INSERT INTO EX_EMP VALUES(7207, 'TEST_USER7', 'LECTURER', 7201, '2016/10/28', 2300, NULL, 80);
INSERT INTO EX_EMP VALUES(7208, 'TEST_USER8', 'STUDENT', 7201, '2018/03/09', 1200, NULL, 80);
3. EX_EMP์ ์ํ ์ฌ์ ์ค 50๋ฒ ๋ถ์์์ ๊ทผ๋ฌดํ๋ ์ฌ์๋ค์ ํ๊ท ๊ธ์ฌ๋ณด๋ค ๋ง์ ๊ธ์ฌ๋ฅผ ๋ฐ๊ณ ์๋ ์ฌ์๋ค์ 70๋ฒ ๋ถ์๋ก ์ฎ๊ธฐ๋ SQL๋ฌธ์ ์์ฑํ์ธ์.
UPDATE EX_EMP
SET DEPTNO = 70
WHERE SAL > (SELECT AVG(SAL)
FROM EX_EMP
WHERE DEPTNO = 50
GROUP BY DEPTNO);
4. EX_EMP์ ์ํ ์ฌ์ ์ค, 60๋ฒ ๋ถ์์ ์ฌ์ ์ค์ ์ ์ฌ์ผ์ด ๊ฐ์ฅ ๋น ๋ฅธ ์ฌ์๋ณด๋ค ๋ฆ๊ฒ ์ ์ฌํ ์ฌ์์ ๊ธ์ฌ๋ฅผ 10% ์ธ์ํ๊ณ 80๋ฒ ๋ถ์๋ก ์ฎ๊ธฐ๋ SQL๋ฌธ์ ์์ฑํ์ธ์.
UPDATE EX_EMP
SET SAL = SAL * 1.1, DEPTNO = 80
WHERE DEPTNO = 60
AND HIREDATE > ANY (SELECT HIREDATE
FROM EX_EMP);
5. EX_EMP์ ์ํ ์ฌ์ ์ค, ๊ธ์ฌ ๋ฑ๊ธ์ด 5์ธ ์ฌ์์ ์ญ์ ํ๋ SQL๋ฌธ์ ์์ฑํ์ธ์.
DELETE FROM EX_EMP
WHERE EMPNO IN (SELECT E.EMPNO
FROM EX_EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL
AND S.GRADE = 5);