๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์ด๋ก /DB

[๋ฌด์กฐ๊ฑด ๋”ฐ๋ผํ•ด๋ณด๊ธฐ] DML ๋‚ ์งœํ•จ์ˆ˜ , DECODE, CASE

by 6161990 2021. 5. 25.

๐Ÿ“Œ DML(Data Manipulation Language(๋ฐ์ดํ„ฐ ์กฐ์ž‘์–ด))

  • SELECT : ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ช…๋ น๋ฌธ , ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์ด๋‚˜ ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ


๐Ÿ“ ๋‚ ์งœํ•จ์ˆ˜

  • ์˜ค๋ผํด์€ ๋‚ ์งœ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
  • SYSDATE : ํ˜„์žฌ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • MONTHS_BETWEEN : ๋‘ ๋‚ ์งœ๊ฐ„์˜ ๊ฐœ์›” ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.
  • ADD_MONTHS : ์ฃผ์–ด์ง„ ๊ฐœ์›” ์ˆ˜ ๋งŒํผ ๋”ํ•œ๋‹ค.

 

--ํ˜„์žฌ ๋‚ ์งœ ๊ตฌํ•˜๊ธฐ

SELECT SYSDATE FROM DUAL; --(21/05/08)

 

 

 

--๋‚ ์งœ ๋ฐ์ดํ„ฐ ์—ฐ์‚ฐ (10000์ผ)

SELECT SYSDATE, SYSDATE-10000, SYSDATE+10000 FROM DUAL;

 

 

 

--๊ฐ ์‚ฌ์›์ด ์ž…์‚ฌํ•œ ๋‚ ์งœ๋กœ๋ถ€ํ„ฐ 1000์ผ ํ›„๊ฐ€ ๋˜๋Š” ๋‚ ์งœ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

SELECT HIREDATE, HIREDATE+1000 FROM EMP;

 

 

 

--์ง๋ฌด๊ฐ€ ์—ฐ๊ทนํŒ€์ธ ์‚ฌ์›์˜ ์ž…์‚ฌ์ผ 100์ผ์ „ ๋‚ ์งœ๋ฅผ ๊ตฌํ•œ๋‹ค.

SELECT JOB, HIREDATE, HIREDATE-100 FROM EMP WHERE JOB = '์—ฐ๊ทนํŒ€';

 

 

 

-- ์ „ ์‚ฌ์›์˜ ๊ทผ๋ฌด์ผ์„ ๊ฐ€์ ธ์˜จ๋‹ค. (์†Œ์ˆ˜์ ์€ ๋ฒ„๋ฆฐ๋‹ค)

SELECT TRUNC(SYSDATE-HIREDATE) FROM EMP;

 

 

 

--๋ฐ˜์˜ฌ๋ฆผ SELECT SYSDATE, ROUND(SYSDATE,'CC') AS "๋…„๋„๋‘์ž๋ฆฌ",

ROUND(SYSDATE,'YYYY') AS "์›”๊ธฐ์ค€", --์›”์„ ๊ธฐ์ค€์œผ๋กœ ๋…„๋„๋ฅผ ์˜ฌ๋ฆผํ• ๊ฒƒ์ด๋ƒ ํ˜„์žฌ 4์›”์ด๋ฉด ์˜ฌ๋ฆผ, 8์›”์ด๋ฉด ๋‚ด๋ฆผ ROUND(SYSDATE,'DDD') AS "์‹œ๊ธฐ์ค€", -- ํ˜„์žฌ ์‹œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ ์งœ๋ฅผ ์˜ฌ๋ฆผํ• ๊ฒƒ์ด๋ƒ ์˜คํ›„๋ฉด ์˜ฌ๋ฆผ ์˜ค์ „์ด๋ฉด ๋‚ด๋ฆผ ROUND(SYSDATE, 'HH') AS "๋ถ„๊ธฐ์ค€", --ํ˜„์žฌ ๋ถ„์„ ๊ธฐ์ค€์œผ๋กœ ์‹œ๋ฅผ ์˜ฌ๋ฆผํ•  ๊ฒƒ์ด๋ƒ 30๋ถ„ ์ดํ›„๋ฉด ์˜ฌ๋ฆผ, ์ด์ „์ด๋ฉด ๋‚ด๋ฆผ ROUND(SYSDATE,'MM') AS "์ผ๊ธฐ์ค€", --ํ˜„์žฌ ์ผ์„ ๊ธฐ์ค€์œผ๋กœ ์›”์„ ์˜ฌ๋ฆผํ•  ๊ฒƒ์ด๋ƒ 15์ผ ์ดํ›„๋ฉด ์˜ฌ๋ฆผ, ์ด์ „์ด๋ฉด ๋‚ด๋ฆผ ROUND(SYSDATE, 'DAY') AS "์ฃผ๊ธฐ์ค€", -- ํ˜„์žฌ ์ฃผ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์š”์ผ์„ ์˜ฌ๋ฆผํ•  ๊ฒƒ์ด๋ƒ ์ผ์ฃผ์ผ์˜ ์ ˆ๋ฐ˜ ์ด์ƒ ์ง€๋‚˜๊ฐ”๋‹ค๋ฉด(๋ชฉ๊ธˆ) ์˜ฌ๋ฆผ, ์ด์ „์ด๋ฉด ๋‚ด๋ฆผ

ROUND(SYSDATE,'MI') AS "์ดˆ๊ธฐ์ค€" --ํ˜„์žฌ ์ดˆ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ถ„์„ ์˜ฌ๋ฆผํ•  ๊ฒƒ์ด๋ƒ

FROM DUAL;

 

 

 

--๋ฒ„๋ฆผ SELECT SYSDATE, TRUNC(SYSDATE,'CC') AS "๋…„๋„๋‘์ž๋ฆฌ" ,

TRUNC(SYSDATE,'YYYY') AS "์›”๊ธฐ์ค€",

TRUNC(SYSDATE,'DDD') AS "์‹œ๊ธฐ์ค€",

TRUNC(SYSDATE, 'HH') AS "๋ถ„๊ธฐ์ค€",

TRUNC(SYSDATE,'MM') AS "์ผ๊ธฐ์ค€",

TRUNC(SYSDATE, 'DAY') AS "์ฃผ๊ธฐ์ค€",

TRUNC(SYSDATE,'MI') AS "์ดˆ๊ธฐ์ค€"

FROM DUAL;

 

 

 

-- 2021๋…„์— ์ž…์‚ฌํ•œ ์‚ฌ์›๋“ค์˜ ์‚ฌ์›์ด๋ฆ„, ๊ธ‰์—ฌ, ์ž…์‚ฌ์ผ์„ ๊ฐ€์ ธ์˜จ๋‹ค.

SELECT EMPNO, ENAME, HIREDATE FROM EMP WHERE HIREDATE BETWEEN '21/01/01' AND '21/12/31';

SELECT ENAME, SAL, HIREDATE FROM EMP WHERE TRUNC(HIREDATE, 'YYYY') = '2021/01/01';

 

-- ๋ชจ๋“  ์‚ฌ์›์ด ๊ทผ๋ฌดํ•œ ๊ฐœ์›” ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.

SELECT MONTHS_BETWEEN(SYSDATE, HIREDATE) FROM EMP; SELECT TRUNC(MONTHS_BETWEEN(SYSDATE, HIREDATE)) FROM EMP; --์†Œ์ˆ˜์  ๋ฒ„๋ฆฌ๊ธฐ

 

 

 

--๊ฐœ์›” ์ˆ˜๋ฅผ ๋”ํ•œ๋‹ค. (๋””ํดํŠธ๋Š” '์ผ'๊ธฐ์ค€ )

SELECT SYSDATE+100, ADD_MONTHS(SYSDATE,100) FROM DUAL;

 

 

 

--๊ฐ ์‚ฌ์›๋“ค์˜ ์ž…์‚ฌ์ผ ํ›„ 100๊ฐœ์›” ๋˜๋Š” ๋‚ ์งœ๋ฅผ ๊ตฌํ•œ๋‹ค.

SELECT HIREDATE, ADD_MONTHS(HIREDATE,100) FROM EMP;

 

 

 

--์ง€์ •๋œ ๋‚ ์งœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ง€์ •๋œ ๋‹ค์Œ ์š”์ผ์ด ๋ช‡์ผ์ธ์ง€ ๊ตฌํ•œ๋‹ค.

SELECT SYSDATE, NEXT_DAY(SYSDATE, '์›”์š”์ผ') FROM DUAL;

 

 

 

--์ง€์ •๋œ ๋‚ ์งœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์›”์˜ ๋งˆ์ง€๋ง‰ ๋‚ ์งœ๋ฅผ ๊ตฌํ•œ๋‹ค.

SELECT SYSDATE, LAST_dAY(SYSDATE) FROM DUAL;

 

 

 

-- TO_CHAR : ์˜ค๋ผํด DB์˜ ๋‚ ์งœ -> ํ”„๋กœ๊ทธ๋žจ ๋‚ ์งœ ํ˜•์‹์œผ๋กœ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜

SELECT SYSDATE, TO_CHAR(SYSDATE, 'YYYY-MM-DD HH:MI:SS AM') FROM DUAL;

 

 

 

--TO_DATE : ํ”„๋กœ๊ทธ๋žจ -> ์˜ค๋ผํด DB ๋‚ ์งœ

SELECT TO_DATE('2018-04-30 03:39:20 ์˜คํ›„', 'YYYY-MM-DD HH:MI:SS AM') FROM DUAL;


๐Ÿ“ DECODE

  • ๊ฐ’์— ๋”ฐ๋ผ ๋ฐ˜ํ™˜๊ฐ’์ด ๊ฒฐ์ •๋˜๋Š” ๊ตฌ๋ฌธ
  • DECODE(์ปฌ๋Ÿผ๋ช…, ๊ฐ’1, ๋ฐ˜ํ™˜๊ฐ’1, ๊ฐ’2, ๋ฐ˜ํ™˜๊ฐ’2, ๊ฐ’3, ๋ฐ˜ํ™˜๊ฐ’3)

--๊ฐ ์‚ฌ์›์˜ ๋ถ€์„œ ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜จ๋‹ค.

SELECT EMPNO, ENAME, DECODE(DEPTNO, 301,'์˜ˆ์ˆ ํŒ€', 302,'๊ณต์—ฐํŒ€', 303,'์—ฐ๊ทนํŒ€', 305,'๋งˆ์ผ€ํŒ…ํŒ€', 309,'ํ•ด์™ธ๊ฐœ๋ฐœํŒ€', 310,'ํŽ˜์Šคํ‹ฐ๋ฒŒํŒ€')

FROM EMP;

 

 

 

 

--์—…๋ฌด์— ๋”ฐ๋ผ ์ธ์ƒ๋œ ๊ธ‰์—ฌ์•ก์„ ๊ฐ€์ ธ์˜จ๋‹ค.

--์˜ˆ์ˆ ํŒ€ : 5%

--๊ณต์—ฐํŒ€ : 10%

--์—ฐ๊ทนํŒ€ : 15%

--๋งˆ์ผ€ํŒ…ํŒ€ : 5%

--ํ•ด์™ธ๊ฐœ๋ฐœํŒ€ : 5%

--ํŽ˜์Šคํ‹ฐ๋ฒŒํŒ€ : 8%

SELECT EMPNO, ENAME, JOB, DECODE(JOB,'์˜ˆ์ˆ ํŒ€', SAL * 1.05, '๊ณต์—ฐํŒ€', SAL * 1.1, '์—ฐ๊ทนํŒ€', SAL * 1.15, '๋งˆ์ผ€ํŒ…ํŒ€', SAL * 1.05, 'ํ•ด์™ธ๊ฐœ๋ฐœํŒ€', SAL * 1.05, 'ํŽ˜์Šคํ‹ฐ๋ฒŒํŒ€', SAL * 1.08)

FROM EMP;


๐Ÿ“ CASE

  • ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ฐ˜ํ™˜๊ฐ’์ด ๊ฒฐ์ •๋˜๋Š” ๊ตฌ๋ฌธ
  • CASE WHEN ์กฐ๊ฑด์‹1 THEN ๋ฐ˜ํ™˜๊ฐ’1##### WHEN ์กฐ๊ฑด์‹2 THEN ๋ฐ˜ํ™˜๊ฐ’2END

 

--๊ธ‰์—ฌ์•ก ๋ณ„ ๋“ฑ๊ธ‰์„ ๊ฐ€์ ธ์˜จ๋‹ค.

-- 300 ๋ฏธ๋งŒ : C๋“ฑ๊ธ‰

-- 300 ์ด์ƒ, 500๋ฏธ๋งŒ : B๋“ฑ๊ธ‰

-- 500 ์ด์ƒ : A๋“ฑ๊ธ‰

SELECT EMPNO, ENAME, CASE WHEN SAL < 300 THEN 'C๋“ฑ๊ธ‰' WHEN SAL >= 300 AND SAL < 500 THEN 'B๋“ฑ๊ธˆ' WHEN SAL >= 500 THEN 'A๋“ฑ๊ธ‰'

END

FROM EMP;

 

 

 

--์ง์›๋“ค์˜ ๊ธ‰์—ฌ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ธ์ƒํ•œ๋‹ค.

-- 300 ๋ฏธ๋งŒ : 100%

-- 300 ์ด์ƒ, 500๋ฏธ๋งŒ : 20%

-- 500 ์ด์ƒ : 10%

SELECT EMPNO, ENAME, CASE WHEN SAL <= 300 THEN SAL * 2 WHEN SAL > 300 AND SAL <= 500 THEN SAL *1.02 WHEN SAL >= 500 THEN SAL * 1.01

END

FROM EMP;