๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

RDB๐Ÿ—‚๏ธ/์ธํ”„๋Ÿฐ : SQLD ์ž๊ฒฉ์ฆ ๋”ฐ๊ธฐ

SQL ๊ฐœ๋ฐœ์ž (SQLD) ์ž๊ฒฉ์ฆ ๋”ฐ๊ธฐ Part.2 ์„น์…˜ 1.

728x90

DML ์ด์–ด์„œ

12) NULL ๊ฐ’ ์กฐํšŒ

- NULL์˜ ํŠน์ง•

NULL์€ ๋ชจ๋ฅด๋Š” ๊ฐ’์„ ์˜๋ฏธํ•œ๋‹ค

NULL์€ ๊ฐ’์˜ ๋ถ€์žฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค

NULL์€ ์ˆซ์ž ํ˜น์€ ๋‚ ์งœ๋ฅผ ๋”ํ•˜๋ฉด NULL์ด ๋œ๋‹ค

NULL์€ ์–ด๋–ค ๊ฐ’์„ ๋น„๊ตํ•  ๋•Œ '์•Œ ์ˆ˜ ์—†์Œ'์ด ๋ฐ˜ํ™˜๋œ๋‹ค

- NULL ๊ฐ’ ์กฐํšŒ

NULL์„ ์กฐํšŒํ•  ๊ฒฝ์šฐ IS NULL๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  NULL๊ฐ’์ด ์•„๋‹Œ ๊ฒƒ์„ ์กฐํšŒํ•  ๊ฒฝ์šฐ IS NOT NULL์„ ์‚ฌ์šฉ

NULL ๊ด€๋ จ ํ•จ์ˆ˜

(1) NVL : NULL์ด๋ฉด ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ๋Š” ํ•จ์ˆ˜ ex) NVL(mgr, 0)์ด๋ฉด mgr ์นผ๋Ÿผ์ด NULL์ด๋ฉด 0์œผ๋กœ ๋ฐ”๊พผ๋‹ค

(2) NVL2 : NVL ํ•จ์ˆ˜์™€ DECODE ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜๋กœ ๋งŒ๋“  ๊ฒƒ ex) NVL2(mgr, 1, 0) ~ mgr์ด NULL์ด ์•„๋‹ˆ๋ฉด 1, NULL์ด๋ฉด 0์„ ๋ฐ˜ํ™˜

(3) NULLIF : ๋‘ ๊ฐœ์˜ ๊ฐ’์ด ๊ฐ™์œผ๋ฉด NULL์„, ๊ฐ™์ง€ ์•Š์œผ๋ฉด ์ฒซ ๋ฒˆ์งธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค ex) NULLIF(exp1, exp2)

(4) COALESCE : NULL์ด ์•„๋‹Œ ์ตœ์ดˆ์˜ ์ธ์ž๊ฐ’ ๋ฐ˜ํ™˜ ex) COALECSE(exp1, exp2 ..)

 

GROUP ์—ฐ์‚ฐ

1) GROUP BY๋ฌธ

- GROUP BY๋Š” ํ…Œ์ด๋ธ”์—์„œ ์†Œ๊ทœ๋ชจ ํ–‰์„ ๊ทธ๋ฃนํ™”ํ•ด ํ•ฉ๊ณ„, ํ‰๊ท , ์ตœ๋Œ“๊ฐ’, ์ตœ์†Ÿ๊ฐ’ ๋“ฑ์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค

- HAVING ๊ตฌ๋ฌธ์„ ํ™œ์šฉํ•œ ์กฐ๊ฑด๋ฌธ

- ORDER BY๋ฅผ ์‚ฌ์šฉํ•ด ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋‹ค

2) HAVING๋ฌธ

GROUP BY์— ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•˜๊ณ  WHERE์ ˆ์—๋Š” ์ง‘๊ณ„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์ง€๋งŒ HAVING์€ ๊ฐ€๋Šฅํ•˜๋‹ค

3) COUNT ํ•จ์ˆ˜

COUNT ํ•จ์ˆ˜๋Š” ํ–‰ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜, COUNT(*)๋Š” NULL์„ ํฌํ•จํ•œ ๋ชจ๋“  ํ–‰ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. COUNT(์นผ๋Ÿผ๋ช…)์€ NULL ๊ฐ’์„ ์ œ์™ธํ•œ ํ–‰ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค

 

SELECT๋ฌธ ์‹คํ–‰ ์ˆœ์„œ

- SELECT๋ฌธ์˜ ์‹คํ–‰ ์ˆœ์„œ๋Š” FROM WHERE, GROUP BY, HAVING, SELECT, ORDER BY์ˆœ์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค

 

๋ช…์‹œ์  ํ˜•๋ณ€ํ™˜๊ณผ ๋ฌต์‹œ์  ํ˜•๋ณ€ํ™˜

ํ˜•๋ณ€ํ™˜์ด๋ผ๋Š” ๊ฒƒ์€ ๋‘ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์ผ์น˜ํ•˜๋„๋ก ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ, ๋ช…์‹œ์ , ๋ฌต์‹œ์  ํ˜•๋ณ€ํ™˜์œผ๋กœ ๋‚˜๋‰œ๋‹ค

 

๋‚ด์žฅํ˜• ํ•จ์ˆ˜ : SQL ๋‚ด์žฅํ˜• ํ•จ์ˆ˜

(1) ๋‚ด์žฅํ˜• ํ•จ์ˆ˜

- ๋‚ด์žฅํ˜• ํ•จ์ˆ˜๋กœ๋Š” ํ˜•๋ณ€ํ™˜ ํ•จ์ˆ˜, ๋ฌธ์ž์—ด ๋ฐ ์ˆซ์žํ˜• ํ•จ์ˆ˜, ๋‚ ์งœํ˜• ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค

(2) DUAL ํ…Œ์ด๋ธ”

DUAL ํ…Œ์ด๋ธ”์€ Oracle ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜ํ•ด ์ž๋™ ์ƒ์„ฑ๋˜๋Š” ํ…Œ์ด๋ธ”์ด๋‹ค

Oracle ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ์ž„์‹œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ…Œ์ด๋ธ”๋กœ ๋‚ด์žฅํ˜• ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

(3) ๋‚ด์žฅํ˜• ํ•จ์ˆ˜์˜ ์ข…๋ฅ˜

1) ASCII(๋ฌธ์ž) : ASCII ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜

2) CHAR(์•„์Šคํ‚ค์ฝ”๋“œ) : ๋ฌธ์ž๋กœ ๋ณ€ํ™˜

3) SUBSTR(๋ฌธ์ž์—ด m, n) : substring

4) CONCAT(๋ฌธ์ž์—ด 1, ๋ฌธ์ž์—ด 2) : 1๊ณผ 2๋ฅผ ๊ฒฐํ•ฉํ•œ๋‹ค

5) LOWER(๋ฌธ์ž์—ด) : ์†Œ๋ฌธ์ž ๋ณ€ํ™˜

6) UPPER(๋ฌธ์ž์—ด) : ๋Œ€๋ฌธ์ž ๋ณ€ํ™˜

7) LENGTH(๋ฌธ์ž์—ด) or LEN(๋ฌธ์ž์—ด) : ๊ณต๋ฐฑ ํฌํ•จ ๋ฌธ์ž์—ด ๊ธธ์ด

8) LTRIM(๋ฌธ์ž์—ด, ์ง€์ •๋ฌธ์ž) : ์™ผ์ชฝ์—์„œ ์ง€์ • ๋ฌธ์ž๋ฅผ ์‚ญ์ œ, ์ง€์ • ๋ฌธ์ž๊ฐ€ ์—†๋‹ค๋ฉด ๊ณต๋ฐฑ ์‚ญ์ œ

9) RTRIM(๋ฌธ์ž์—ด, ์ง€์ •๋ฌธ์ž) : ์˜ค๋ฅธ์ชฝ

10) TRIM(๋ฌธ์ž์—ด, ์ง€์ •๋ฌธ์ž) : ์–‘์ชฝ

11) SYSDATE : ์˜ค๋Š˜ ๋‚ ์งœ

12) EXTRACT : ์—ฐ๋„๋งŒ

13) TOCHAR : ์ˆซ์ž๋‚˜ ๋‚ ์งœ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜

๋‚ด์žฅํ˜• ํ•จ์ˆ˜ : ์ˆซ์žํ˜•

ABS - ์ ˆ๋Œ“๊ฐ’

SIGN - ์Œ์ˆ˜, ์–‘์ˆ˜, 0์„ ๊ตฌ๋ถ„

MOD - ๋‚˜๋จธ์ง€ ๊ณ„์‚ฐ

CEIL or CEILING - ์ตœ์†Œ ์ •์ˆ˜

FLOOR - ์ตœ๋Œ€ ์ •์ˆ˜

ROUND(์ˆซ์ž, m) - ์†Œ์ˆ˜์  m ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผ

TRUNC(์ˆซ์ž, m) - ์†Œ์ˆ˜์  m ์ž๋ฆฌ์ดํ•˜ ์ˆซ์ž ๋ฒ„๋ฆผ (m ๊ธฐ๋ณธ๊ฐ’ 0)

 

DECODE์™€ CASE๋ฌธ

1) DECODE

DECODE๋ฌธ์œผ๋กœ IF๋ฌธ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ex) DECODE(์กฐ๊ฑด์‹, ์ฐธ์ผ ๊ฒฝ์šฐ ๋ฐ˜ํ™˜๊ฐ’, ๊ฑฐ์ง“์ผ ๊ฒฝ์šฐ ๋ฐ˜ํ™˜๊ฐ’)

2) CASE

CASE๋ฌธ์€ IF ~ THEN, ~ELSE-END์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

CASE[์กฐ๊ฑด๋ฌธ] WHEN ์กฐ๊ฑด 1 THEN ๊ฒฐ๊ณผ 1 .... ELSE ๊ฒฐ๊ณผ END

 

ROWNUM๊ณผ ROWID

1) ROWNUM

- ROWNUM์€ ์˜ค๋ผํด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ select๋ฌธ ๊ฒฐ๊ณผ์— ๋Œ€ํ•ด ๋…ผ๋ฆฌ์ ์ธ ์ผ๋ จ๋ฒˆํ˜ธ๋ฅผ ๋ถ€์—ฌ

- ROWNUM์€ ์กฐํšŒ๋˜๋Š” ํ–‰ ์ˆ˜๋ฅผ ์ œํ•œํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉ

- ROWNUM์€ ํ™”๋ฉด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ ๋ถ€์—ฌ๋˜๋Š” ๋…ผ๋ฆฌ์  ์ˆœ๋ฒˆ์ด๋‹ค. ๋งŒ์•ฝ ROWNUM์„ ์‚ฌ์šฉํ•ด ํŽ˜์ด์ง€ ๋‹จ์œ„ ์ถœ๋ ฅ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ธ๋ผ์ธ ๋ทฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

- ์ธ๋ผ์ธ ๋ทฐ๋Š” select๋ฌธ์—์„œ from์ ˆ์ด ์‚ฌ์šฉ๋˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์˜๋ฏธ

- ROWNUM์˜ ๊ฐ’์ด ์ˆœ์ฐจ์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ROWNUM ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๊ณ  ์‹ถ์„ ๋•Œ ์ธ๋ผ์ธ ๋ทฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค

 

* TOP(SQL Server), LIMIT(MYSQL), ROWNUM(Oracle)์€ ๊ฐ™์€ ์˜๋ฏธ! ~ ๊ฐ๊ด€์‹ ์ถœ์ œ ๊ฐ€๋Šฅ

2) ROWID

- ROWID๋Š” ์˜ค๋ผํด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๊ฐ’

- ROWID๋Š” "SELECT ROWID, EMPNO FROM EMP์™€ ๊ฐ™์€ SELECT๋ฌธ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค

- ROWID๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ค ๋ฐ์ดํ„ฐ ํŒŒ์ผ, ์–ด๋Š ๋ธ”๋ก์— ์ €์žฅ๋˜์–ด ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค

 

WITH

- WITH ๊ตฌ๋ฌธ์€ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ์ž„์‹œ ํ…Œ์ด๋ธ”์ด๋‚˜ ๋ทฐ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ๋ฌธ

- ์„œ๋ธŒ์ฟผ๋ฆฌ ๋ธ”๋ก์— ๋ณ„์นญ ์ง€์ • ๊ฐ€๋Šฅ

- ์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” SQL์„ ์ธ๋ผ์ธ ๋ทฐ๋‚˜ ์ž„์‹œ ํ…Œ์ด๋ธ”๋กœ ํŒ๋‹จ

 

UNION : 2๊ฐœ์˜ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ฉํ•ด์„œ ์ถœ๋ ฅํ•˜๋Š”๋ฐ ์ค‘๋ณต๊ฐ’ ์ œ์™ธ

UNION ALL : ์ค‘๋ณต๊ฐ’๋„ ๋ชจ๋‘ ์ถœ๋ ฅ

 

DCL

1) Grant

Grant๋ฌธ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ถŒํ•œ์„ ๋ถ€์—ฌ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์„ ์œ„ํ•ด ๊ถŒํ•œ์ด ํ•„์š”ํ•˜๋ฉฐ ์—ฐ๊ฒฐ, ์ž…๋ ฅ, ์ˆ˜์ •, ์‚ญ์ œ, ์กฐํšŒ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค

WITH GRANT OPTION : ํŠน์ • ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌ

(์ค€ ๊ด€๋ฆฌ์ž ๋ถ€์—ฌ, A -> B -> C ์ดํ›„ B๋ฅผ ์ทจ์†Œํ•˜๋ฉด B์™€ C์˜ ๊ถŒํ•œ์ด ๋ชจ๋‘ ํšŒ์ˆ˜)

WITH ADMIN OPTION : ํ…Œ์ด๋ธ”์— ๊ด€ํ•œ ๋ชจ๋“  ๊ถŒํ•œ ๋ถ€์—ฌ(A -> B -> C ์ดํ›„ B๋ฅผ ์ทจ์†Œํ•˜๋ฉด B์˜ ๊ถŒํ•œ๋งŒ ํšŒ์ˆ˜)

2) REVOKE

REVOKE๋ฌธ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ€์—ฌ๋œ ๊ถŒํ•œ์„ ํšŒ์ˆ˜

REVOKE privileges ON object FROM user;

 

TCL

1) COMMIT

COMMIT์€ DML๋กœ ๋ณ€๊ฒฝํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌผ๋ฆฌ์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜ํ•œ๋‹ค

- ๋ณ€๊ฒฝ ์ด์ „ ๋ฐ์ดํ„ฐ๋Š” ์‚ญ์ œ๋œ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์ž๋Š” ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค

- COMMIT์ด ์™„๋ฃŒ๋˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ LOCK์ด ํ•ด์ œ๋œ๋‹ค

- COMMIT์ด ์™„๋ฃŒ๋˜๋ฉด ๋‹ค๋ฅธ ๋ชจ๋“  DB ์‚ฌ์šฉ์ž๋Š” ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ์— ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. COMMIT์ด ์™„๋ฃŒ๋˜๋ฉด ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์ด ์ข…๋ฃŒ๋œ๋‹ค

2) ROLLBACK

ROLLBACK๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌ์šฉ์„ ๋ชจ๋‘ ์ทจ์†Œํ•˜๊ณ  ํŠธ๋žœ์žญ์…˜์„ ์ข…๋ฃŒํ•œ๋‹ค

- ์ด์ „ COMMIT ์ง€์ ๊นŒ์ง€ ๋ณต๊ตฌํ•œ๋‹ค

ROLLBACK์„ ์‹คํ–‰ํ•˜๋ฉด LOCK์ด ํ•ด์ œ๋˜๊ณ  ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค

3) SAVEPOINT : ๊ฒŒ์ž„์—์„œ ์ค‘๊ฐ„ ์ €์žฅ์˜ ๊ฐœ๋…

- SAVEPOINT๋Š” ํŠธ๋žœ์žญ์…˜์„ ์ž‘๊ฒŒ ๋ถ„ํ• ํ•ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ SAVEPOINT๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ง€์ •๋œ ์œ„์น˜ ์ดํ›„ ํŠธ๋žœ์žญ์…˜๋งŒ ROLLBACKํ•  ์ˆ˜ ์žˆ๋‹ค

- ์ง€์ •์€ SAVEPOINT (์„ธ์ด๋ธŒํฌ์ธํŠธ ์ด๋ฆ„)

- ์ง€์ •๋œ SAVEPOINT๊นŒ์ง€๋งŒ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์„ ์ทจ์†Œํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ "ROLLBACK TO (์„ธ์ด๋ธŒํฌ์ธํŠธ ์ด๋ฆ„)"์„ ์‹คํ–‰

- ROLLBACK์„ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ SAVEPOINT์™€ ๊ด€๊ณ„์—†์ด ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค

 

728x90