๐Ÿ—„๏ธ Backend/Oracle

์˜ค๋ผํด(Oracle) - DML(Data Manipulation Language)

kongmi 2023. 2. 21. 18:44

์˜ˆ์ œ์— ์•ž์„œ ์—ฐ์Šต์šฉ ํ…Œ์ด๋ธ” ์ƒ์„ฑ (๊ธฐ์กด ํ…Œ์ด๋ธ” ๋ณต์‚ฌ)

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;

๋‚ ์งœ ๋ฐ์ดํ„ฐ

  1. '2023/01/01'
  2. '2023-01-01'
  3. TO_DATE('2023/01/01', 'YYYY/MM/DD')
  4. 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);