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๋ฅผ ์ง์ํ์ง ์๋๋ค
'RDB๐๏ธ > ์ธํ๋ฐ : SQLD ์๊ฒฉ์ฆ ๋ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SQL ๊ฐ๋ฐ์ (SQLD) ์๊ฒฉ์ฆ ๋ฐ๊ธฐ Part.3 ์น์ 1. (0) | 2023.08.29 |
---|---|
SQL ๊ฐ๋ฐ์ (SQLD) ์๊ฒฉ์ฆ ๋ฐ๊ธฐ Part.2 ์น์ 2. (0) | 2023.08.03 |
SQL ๊ฐ๋ฐ์ (SQLD) ์๊ฒฉ์ฆ ๋ฐ๊ธฐ Part.2 ์น์ 1. (0) | 2023.07.24 |
SQL ๊ฐ๋ฐ์ (SQLD) ์๊ฒฉ์ฆ ๋ฐ๊ธฐ Part.2 ์น์ 0. (0) | 2023.07.12 |
SQL ๊ฐ๋ฐ์ (SQLD) ์๊ฒฉ์ฆ ๋ฐ๊ธฐ Part 1 ์น์ 2. (0) | 2023.06.29 |