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

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

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

728x90

1. GROUP ํ•จ์ˆ˜(ROLL UP, GROUPING, GROUPING SETS, CUBE)์— ๋Œ€ํ•œ ์„ค๋ช…

1) ROLL UP

- ROLL UP์€ GROUP BY์˜ ์นผ๋Ÿผ์— ๋Œ€ํ•ด Subtotal์„ ๋งŒ๋“ค์–ด์ค€๋‹ค. GROUP BY๊ตฌ์— ์นผ๋Ÿผ์ด ๋‘ ๊ฐœ ์ด์ƒ์ด๋ฉด ์ˆœ์„œ์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค

* DECODE๋ฌธ๊ณผ ํ•จ๊ป˜ ์œ ์šฉํ•˜๊ฒŒ ํ™œ์šฉ๊ฐ€๋Šฅ

2) GROUPING

- GROUPING ํ•จ์ˆ˜๋Š” ROLL UP, CUBE, GROUPING SETS์—์„œ ์ƒ์„ฑ๋˜๋Š” ํ•ฉ๊ณ„ ๊ฐ’์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ํ•จ์ˆ˜. ์†Œ๊ณ„, ํ•ฉ๊ณ„ ๋“ฑ์ด ๊ณ„์‚ฐ๋˜๋ฉด GROUPING์€ 1์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ 0์„ ๋ฐ˜ํ™˜ํ•ด ํ•ฉ๊ณ„ ๊ฐ’์„ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค

+ DECODE ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด, ๊ฒฐ๊ณผ๊ฐ€ 1์ผ ๊ฒฝ์šฐ ํ•ฉ๊ณ„๋ฅผ ์ถœ๋ ฅ, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด NULL์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค

: SELECT DEPTNO, DECODE(GROUPING(DEPTNO), 1, '์ „์ฒดํ•ฉ๊ณ„') TOT, JOB, DECODE(GROUPING(JOB), 1, '๋ถ€์„œํ•ฉ๊ณ„') T_DEPT, SUM(SAL) FROM EMP GROUP BY ROLL UP(DEPTNO, JOB);

3) GRUOPING SETS

- GROUPING SETS ํ•จ์ˆ˜๋Š” GROUP BY์— ๋‚˜์˜ค๋Š” ์นผ๋Ÿผ์˜ ์ˆœ์„œ์™€ ๊ด€๊ณ„์—†์ด ๋‹ค์–‘ํ•œ ์†Œ๊ณ„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ˆœ์„œ์™€ ๊ด€๊ณ„์—†์ด ๊ฐœ๋ณ„์ ์œผ๋กœ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•œ๋‹ค ~ ์กฐํšŒ๊ฒฐ๊ณผ ๊ฐ„ ๊ด€๊ณ„๊ฐ€ ์—†๋‹ค

4) CUBE

- CUBE๋Š” ํ•จ์ˆ˜์— ์ œ์‹œํ•œ ์นผ๋Ÿผ์— ๋Œ€ํ•ด ๊ฒฐํ•ฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ง‘๊ณ„๋ฅผ ๊ณ„์‚ฐ. ๋‹ค์–‘ํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋‹ค

2. WINDOW ํ•จ์ˆ˜(WINDOW FUNCTION)

1) ์œˆ๋„์šฐ ํ•จ์ˆ˜ : ์œˆ๋„์šฐ ํ•จ์ˆ˜๋Š” ํ–‰๊ณผ ํ–‰ ๊ฐ„ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด ์ œ๊ณต๋˜๋Š” ํ•จ์ˆ˜

~ ์ˆœ์œ„, ํ•ฉ๊ณ„, ํ‰๊ท , ํ–‰ ์œ„์น˜ ๋“ฑ์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค

- ๊ตฌ์กฐ

AGUMENTS ์ธ์ˆ˜

PARTITION BY ์ „์ฒด ์ง‘ํ•ฉ์„ ๊ธฐ์ค€์— ์˜ํ•ด ์†Œ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค

ORDER BY ์ •๋ ฌ

WINDOWING ํ–‰ ๊ธฐ์ค€์˜ ๋ฒ”์œ„๋ฅผ ์ •ํ•œ๋‹ค. ROWS๋Š” ๋ฌผ๋ฆฌ์  ๊ฒฐ๊ณผ์˜ ํ–‰ ์ˆ˜์ด๊ณ  RANGE๋Š” ๋…ผ๋ฆฌ ๊ฐ’์— ์˜ํ•œ ๋ฒ”์œ„

- WINDOWING

UNBOUNDED PRECENDING : ์œˆ๋„์šฐ์˜ ์‹œ์ž‘ ์œ„์น˜๊ฐ€ ์ฒซ๋ฒˆ์งธ ํ–‰

UNBOUNDED FOLLOWING : ์œˆ๋„์šฐ์˜ ๋งˆ์ง€๋ง‰ ์œ„์น˜๊ฐ€ ๋งˆ์ง€๋ง‰ ํ–‰

CURRENT ROW : ์œˆ๋„์šฐ ์‹œ์ž‘ ์œ„์น˜๊ฐ€ ํ˜„์žฌ ํ–‰

ex) SELECT empno, ename, sal SUM(sal) OVER (ORDER BY sal ROWS BETWEEN UNBOUNDED PRECEDING AND CURRNET ROW) TOTSAL FROM EMP; ~ ์ฒ˜์Œ๋ถ€ํ„ฐ CURRENT ROW๊นŒ์ง€ ํ•ฉ๊ณ„, CURRENT ROW๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ธ์ถœ๋œ ํ˜„์žฌ ํ–‰์„ ์˜๋ฏธ

 

2) ์ˆœ์œ„ ํ•จ์ˆ˜ : ํŠน์ • ํ•ญ๋ชฉ ๋ฐ ํŒŒํ‹ฐ์…˜์— ๋Œ€ํ•œ ์ˆœ์œ„๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜

RANK, DENSE_RANK, ROW_NUMBER ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค

(1) RANK

RANK ํ•จ์ˆ˜๋Š” ์ˆœ์œ„๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉฐ, ๋™์ผ ์ˆœ์œ„์— ๊ฐ™์€ ์ˆœ์œ„๊ฐ€ ๋ถ€์—ฌ๋œ๋‹ค

(2) DENSE_RANK

๋™์ผ ์ˆœ์œ„๋ฅผ ํ•˜๋‚˜์˜ ๊ฑด์ˆ˜๋กœ ์ธ์‹ํ•ด์„œ ์กฐํšŒ

(3) ROW NUMBER ~ ์ž˜ ์•ˆ์”€

ROW_NUMBER ํ•จ์ˆ˜๋Š” ๋™์ผ ์ˆœ์œ„์— ๋Œ€ํ•ด ๊ณ ์œ  ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌ

 

3) ์ง‘๊ณ„ ํ•จ์ˆ˜

์ง‘๊ณ„ ํ•จ์ˆ˜ ๊ด€๋ จ ์œˆ๋„์šฐ ํ•จ์ˆ˜

SUM

AVG

COUNT

MAX, MIN

 

4) ํ–‰ ์ˆœ์„œ ๊ด€๋ จ ํ•จ์ˆ˜ - ๋นˆ์ถœ!

ex)

SELECT DEPTNO, ENAME, SAL

LAST_VALUE || FIRST_VALUE || LAG || LEAD (ENAME) OVER (PARTTITION BY DEPTNO

ORDER BY SAL DESC ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)

AS DEPT A FROM EMP;

FIRST_VALUE ํ•จ์ˆ˜๋Š” ํŒŒํ‹ฐ์…˜์—์„œ ์กฐํšŒ๋œ ํ–‰ ์ค‘์—์„œ ์ฒซ ๋ฒˆ์งธ ํ–‰์˜ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์˜จ๋‹ค

LAST_VALUE : ํŒŒํ‹ฐ์…˜์˜ ๊ฐ€์žฅ ๋‚˜์ค‘ ๊ฐ’

BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING์˜ ์˜๋ฏธ๋Š” ํ˜„์žฌ ํ–‰์—์„œ ๋งˆ์ง€๋ง‰ํ–‰๊นŒ์ง€์˜ ํŒŒํ‹ฐ์…˜์„ ์˜๋ฏธ

LAG : ์ด์ „ ํ–‰, ์ด์ „ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด๋‹ค ~ ex) ํ–‰ 1 value 2000, ํ–‰ 2 value 3000์ผ ๋•Œ, ํ–‰ 1์˜ lag๊ฐ€ 3000

LEAD : ์œˆ๋„์šฐ์—์„œ ํŠน์ • ์œ„์น˜์˜ ํ–‰์„ ๊ฐ€์ง€๊ณ  ์˜จ๋‹ค

 

5) ๋น„์œจ ๊ด€๋ จ ํ•จ์ˆ˜ : ๋ˆ„์  ๋ฐฑ๋ถ„์œจ, ์ˆœ์„œ๋ณ„ ๋ฐฑ๋ถ„์œจ, ํŒŒํ‹ฐ์…˜์„ N๋ถ„์œผ๋กœ ๋ถ„ํ• ํ•œ ๊ฒฐ๊ณผ ๋“ฑ์„ ์กฐํšŒ

CUME_DIST : ํŒŒํ‹ฐ์…˜ ์ „์ฒด ๊ฑด์ˆ˜์—์„œ ํ˜„์žฌ ํ–‰๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฑด์ˆ˜์— ๋Œ€ํ•œ ๋ˆ„์  ๋ฐฑ๋ถ„์œจ ์กฐํšŒ, 0 ~ 1์‚ฌ์ด์˜ ๊ฐ’

PERCENT_RANK : ํŒŒํ‹ฐ์…˜์—์„œ ์ œ์ผ ๋จผ์ € ๋‚˜์˜จ ๊ฒƒ์„ 0์œผ๋กœ ๋‚˜์ค‘์— ๋‚˜์˜ค๋Š” ๊ฒƒ์„ 1๋กœ ํ•ด ๊ฐ’์ด ์•„๋‹Œ ํ–‰์˜ ์ˆœ์„œ๋ณ„ ๋ฐฑ๋ถ„์œจ ์กฐํšŒ

NTILE : ํŒŒํ‹ฐ์…˜๋ณ„๋กœ ์ „์ฒด ๊ฑด์ˆ˜๋ฅผ ARGUMENT ๊ฐ’์œผ๋กœ N๋“ฑ๋ถ„ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์กฐํšŒ

RATIO_TO_REPORT : ํŒŒํ‹ฐ์…˜ ๋‚ด ์ „์ฒด SUM(์นผ๋Ÿผ)์— ๋Œ€ํ•œ ํ–‰ ๋ณ„ ์นผ๋Ÿผ๊ฐ’์˜ ๋ฐฑ๋ถ„์œจ์„ ์†Œ์ˆ˜์ ๊นŒ์ง€ ์กฐํšŒ

6. ํ…Œ์ด๋ธ” ํŒŒํ‹ฐ์…˜(๋ ˆ์ธ์ง€, ๋ฆฌ์ŠคํŠธ ์œ„์ฃผ)

1) ํŒŒํ‹ฐ์…˜ ๊ธฐ๋Šฅ

- ํŒŒํ‹ฐ์…˜์€ ๋Œ€์šฉ๋Ÿ‰์˜ ํ…Œ์ด๋ธ”์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ๋ถ„๋ฆฌํ•ด์„œ ์ €์žฅํ•œ๋‹ค

- ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌ๋œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ์ €์žฅ๋˜๋ฉด ์ž…๋ ฅ, ์ˆ˜์ •, ์‚ญ์ œ, ์กฐํšŒ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ

- ํŒŒํ‹ฐ์…˜ ๋ณ„๋กœ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค

- ํŒŒํ‹ฐ์…˜์€ Oracle ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋…ผ๋ฆฌ์  ๊ด€๋ฆฌ ๋‹จ์œ„์ธ ์ŠคํŽ˜์ด์Šค ๊ฐ„ ์ด๋™์ด ๊ฐ€๋Šฅ. ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ ๋ฐ์ดํ„ฐ์˜ ๋ฒ”์œ„๋ฅผ ์ค„์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ

 

2) ๋ ˆ์ธ์ง€ ํŒŒํ‹ฐ์…˜(Range Partition)

- ํ…Œ์ด๋ธ”์˜ ์นผ๋Ÿผ ์ค‘ ๊ฐ’์˜ ๋ฒ”์œ„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒํ‹ฐ์…˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜๋ˆ„์–ด ์ €์žฅํ•˜๋Š” ๊ฒƒ

 

3) ๋ฆฌ์ŠคํŠธ ํŒŒํ‹ฐ์…˜(List Partition)

- ํŠน์ • ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๋ถ„ํ• ํ•˜๋Š” ๋ฐฉ๋ฒ•

 

4) ํ•ด์‹œ ํŒŒํ‹ฐ์…˜

- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์‹œ์Šคํ…œ์ด ๋‚ด๋ถ€์ ์œผ๋กœ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„ํ• 

 

+ ์ปดํฌ์ง€ํŠธ ํŒŒํ‹ฐ์…˜

์‹œํ—˜ : ๋‹ค์Œ ์ค‘ ํŒŒํ‹ฐ์…˜์˜ ์ข…๋ฅ˜๋กœ ๋ถ€์ ์ ˆํ•œ ๊ฒƒ์€?

 

+ ํŒŒํ‹ฐ์…˜ ์ธ๋ฑ์Šค ~ Oracle์€ Global Non-Prefixed๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค

 

 

728x90