๐ 2์ฅ SQL ํ์ฉ ๐
๐์์ ๊ด๊ณ ์ฐ์ฐ์
โ
SELECT : ๋ฆด๋ ์ด์ ์ ์กด์ฌํ๋ ํํ๋ค ์ค ํน์ ์กฐ๊ฑด ๋ง์กฑํ๋ ๊ฒฝ์ฐ ํํ๋ค์ ๋ถ๋ถ์งํฉ์ ๊ตฌํ์ฌ ์๋ก์ด ๋ฆด๋ ์ด์ ์ ๋ง๋ฆ.
PROJECT : ์ฃผ์ด์ง ๋ฆด๋ ์ด์ ์์ ์์ฑ ๋ฆฌ์คํธ์ ์ ์๋ ์์ฑ ๊ฐ๋ง์ ์ถ์ถ. ์ค๋ณต X
JOIN : ๊ณตํต ์์ฑ์ ์ค์ฌ์ผ๋ก 2๊ฐ์ ๋ฆด๋ ์ด์ ์ ํ๋๋ก ํฉ์นจ.
DIVIDE : X ⊃ Y์ธ 2๊ฐ์ ๋ฆด๋ ์ด์ R(X)์ S(Y)๊ฐ ์์ ๋, R์ ์์ฑ์ด S์ ์์ฑ๊ฐ์ ๋ชจ๋ ๊ฐ์ง ํํ์์ S๊ฐ ๊ฐ์ง ์์ฑ์ ์ ์ธํ ์์ฑ๋ง์ ์ถ์ถ
๐JOIN
โ
- INNER JOIN : ๊ต์งํฉ
- OUTER JOIN : ์กฐ๊ฑด์ ๋ง์ง ์๋ ๋ฐ์ดํฐ๋ ํ์. FULL OUTER JOIN ํฉ์งํฉ. ์ค๋ณต ๋ฐ์ดํฐ X
๐ LEFT OUTER JOIN / RIGHT OUTER JOIN / FULL OUTER JOIN
- CROSS JOINโ : ํ ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ํ๋ค๊ณผ ๋ค๋ฅธ ํ ์ด๋ธ์ ๋ชจ๋ ํ์ ์กฐ์ธ. ์นดํฐ์์ ๊ณฑ ๊ฒฐ๊ณผ์ ๊ฐ์
โ
ํ ์ด๋ธ ์ฌ์ด์ JOIN์ด ์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ ์นดํฐ์์ ๊ณฑ(Cartesian Product)์ด ๋ฐ์ํจ
โ
USING ์กฐ๊ฑด์ ์ ์ด์ฉํ JOIN์์๋ JOIN ์นผ๋ผ์ ๋ํด์ ALIAS๋ ํ ์ด๋ธ ์ด๋ฆ๊ณผ ๊ฐ์ ์ ๋์ฌ๋ฅผ ๋ถ์ผ ์ ์์.
# ์ผ๋ฐ JOIN
SELECT A.ID, A.NAME, B.CHECK_YN
FROM TEST_TABLE1 A JOIN TEST_TABLE2 B USING ON A.ID = B.ID
# USING ์ ์ด์ฉ
SELECT A.ID, A.NAME, B.CHECK_YN
FROM TEST_TABLE1 A JOIN TEST_TABLE2 B USING (ID)
SELF JOIN - ๋์ผ ํ ์ด๋ธ ์ฌ์ด์ ์กฐ์ธ. FROM์ ์ ๋์ผ ํ ์ด๋ธ์ด ๋ ๋ฒ ์ด์๋ํ๋จ. ๋์ผ ํ ์ด๋ธ ์ฌ์ด์ ์กฐ์ธ์ ์ํํ๋ฉด ํ ์ด๋ธ๊ณผ ์ปฌ๋ผ ์ด๋ฆ์ด ๋ชจ๋ ๋์ผํ๊ธฐ ๋๋ฌธ์ ์๋ณ์ ์ํด ๋ฐ๋์ Alias๋ฅผ ์ฌ์ฉํด์ผ ํจ. ํ๋์ ํ ์ด๋ธ์์ ๋ ๊ฐ์ ์ปฌ๋ผ์ด ์ฐ๊ด ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ ์ฌ์ฉ.
๐์ผ๋ฐ ์งํฉ์ฐ์ฐ์
์งํฉ ์ฐ์ฐ์
|
์ฐ์ฐ์์ ์๋ฏธ
|
UNION
|
์ฌ๋ฌ ๊ฐ์ SQL๋ฌธ์ ๊ฒฐ๊ณผ์ ๋ํ ํฉ์งํฉ์ผ๋ก ๊ฒฐ๊ณผ์์ ๋ชจ๋ ์ค๋ณต๋ ํ์ ํ๋์ ํ์ผ๋ก ๋ง๋ฆ.
|
UNION ALL
|
์ฌ๋ฌ ๊ฐ์ SQL๋ฌธ์ ๊ฒฐ๊ณผ์ ๋ํ ํฉ์งํฉ์ผ๋ก ์ค๋ณต๋ ํ๋ ๊ทธ๋๋ก ๊ฒฐ๊ณผ๋ก ํ์.
๋จ์ํ ๊ฒฐ๊ณผ๋ง ํฉ์ณ ๋์ ๊ฒ. ์ผ๋ฐ์ ์ผ๋ก ์ฌ๋ฌ ์ง์๊ฒฐ๊ณผ๊ฐ ์ํธ ๋ฐฐํ์ ์ธ ๊ฒฝ์ฐ ๋ง์ด ์ฌ์ฉ.
๊ฐ๋ณ SQL๋ฌธ์ ๊ฒฐ๊ณผ๊ฐ ์๋ก ์ค๋ณต๋์ง ์์ ๊ฒฝ์ฐ UNION๊ณผ ๊ฒฐ๊ณผ๊ฐ ๋์ผํจ
|
INTERSECT
|
์ฌ๋ฌ๊ฐ์ SQL๋ฌธ์ ๊ฒฐ๊ณผ์ ๋ํ ๊ต์งํฉ. ์ค๋ณต๋ ํ์ ํ๋์ ํ์ผ๋ก ๋ง๋ฆ.
|
EXCEPT
|
์์ผ๋ก SQL๋ฌธ์ ๊ฒฐ๊ณผ์์ ๋ค์ SQL๋ฌธ์ ๊ฒฐ๊ณผ์ ๋ํ ์ฐจ์งํฉ. ์ค๋ณต๋ ํ์ ํ๋์ ํ์ผ๋ก ๋ง๋ฆ.(ORACLE์์๋ MINUS๋ฅผ ์ฌ์ฉ)
|
์ผ๋ฐ ์งํฉ ์ฐ์ฐ์ SQL๊ณผ ๋น๊ต
- UNION - UNION
- INTERSECTION - INTERSECT
- DIFFERENCE - EXCEPT(ORACLE์ MINUS)
- PRODUCT - CROSS JOIN
ORDER BY
- ๋ณดํต ORDER BY ๋ค์๋ ์ปฌ๋ผ๋ช
์ด ์ค๋๋ฐ ์ซ์๊ฐ ์ค๋๊ฒฝ์ฐ
ORDER BY 1, 2;
์ซ์๋ ์กฐํ๋์ ๋ ์ปฌ๋ผ ์์๋ฅผ ์๋ฏธํจ. ํด๋น ์ปฌ๋ผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๊ฒ ๋ค๋ ์๋ฏธ.
๐๊ณ์ธตํ ์ง์
โ
ํ ์ด๋ธ์ ๊ณ์ธตํ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ธฐ ์ํด ๊ณ์ธตํ ์ง์ ์ฌ์ฉ.
๊ณ์ธตํ ๋ฐ์ดํฐ : ๋์ผ ํ ์ด๋ธ์ ๊ณ์ธต์ ์ผ๋ก ์์์ ํ์ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ ๋ฐ์ดํฐ.
โ
SQL Server์์ ๊ณ์ธตํ ์ง์๋ฌธ CTE(Common Table Expression)๋ฅผ ์ฌ๊ท ํธ์ถํจ์ผ๋ก์จ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ ๊ฐํจ
.
WITH RECURSIVE CTE(ename,empno,mgr,lv) AS (
SELECT ename, empno, mgr, 1lv FROM emp WHERE mgr IS NULL // ์ต์ปค ๋ฉค๋ฒ
UNION ALL
SELECT e.ename, e.empno, e.mgr, 1+lv FROM emp e JOIN CTE ON CTE.empno = e.mgr // ์ฌ๊ท ๋ฉค๋ฒ
)
select empno, mgr, ename, lv from CTE
order by lv;
์ค๋ผํด์ ๊ณ์ธตํ ์ง์๋ฌธ์์ WHERE์ ์ ๋ชจ๋ ์ ๊ฐ๋ฅผ ์งํํ ํ ํํฐ ์กฐ๊ฑด์ผ๋ก์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฐ์ดํฐ๋ง์ ์ถ์ถํ๋๋ฐ ํ์ฉํจ.
๊ณ์ธตํ ์ง์ ๊ตฌ๋ฌธ
โ
START WITH : ๊ณ์ธต ๊ตฌ์กฐ ์ ๊ฐ์ ์์ ์์น๋ฅผ ์ง์ ํ๋ ๊ตฌ๋ฌธ. ๋ฃจํธ ๋ฐ์ดํฐ ์ง์ . LEVEL๊ฐ์ 1
CONNET BY : ๋ค์์ ์ ๊ฐ๋ ์์ ๋ฐ์ดํฐ ์ง์ .
PRIOR : CONNET BY์ ์ ์ฌ์ฉ๋๋ฉฐ ํ์ฌ ์ฝ์ ์นผ๋ผ์ ์ง์ .
PRIOR ์์ = ๋ถ๋ชจ ํํ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ณ์ธต๊ตฌ์กฐ์์ ๋ถ๋ชจ ๋ฐ์ดํฐ์์ ์์ ๋ฐ์ดํฐ ๋ฐฉํฅ์ผ๋ก ์ ๊ฐํ๋ ์๋ฐฉํฅ ์ ๊ฐ.
PRIOR ๋ถ๋ชจ = ์์ ํํ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ๋๋ก ์์ ๋ฐ์ดํฐ์์ ๋ถ๋ชจ ๋ฐ์ดํฐ ๋ฐฉํฅ์ผ๋ก ์ ๊ฐํ๋ ์ญ๋ฐฉํฅ ์ ๊ฐ
ORDER SIBLINGS BY : ํ์ ๋ ธ๋ ์ฌ์ด์์ ์ ๋ ฌ ์ํ.
๐์๋ธ์ฟผ๋ฆฌ๐
โ
๋ฐํ๋๋ ๋ฐ์ดํฐ์ ํํ์ ๋ฐ๋ฅธ ์๋ธ์ฟผ๋ฆฌ ๋ถ๋ฅ
์๋ธ์ฟผ๋ฆฌ ์ข
๋ฅ
|
์ค๋ช
|
Single Row ์๋ธ์ฟผ๋ฆฌ
(๋จ์ผ ํ ์๋ธ์ฟผ๋ฆฌ)
|
- ์๋ธ์ฟผ๋ฆฌ์ ์คํ ๊ฒฐ๊ณผ๊ฐ ํญ์ 1๊ฑด ์ดํ.
- ๋จ์ผ ํ ๋น๊ต ์ฐ์ฐ์์ ํจ๊ป ์ฌ์ฉ๋จ.
๐ =, <, <=,>,>=,<>
|
Multi Row ์๋ธ์ฟผ๋ฆฌ
(๋ค์ค ํ ์๋ธ์ฟผ๋ฆฌ)
|
- ์๋ธ์ฟผ๋ฆฌ์ ์คํ ๊ฒฐ๊ณผ๊ฐ ์ฌ๋ฌ ๊ฑด์ธ ์๋ธ์ฟผ๋ฆฌ
- ๋ค์ค ํ ๋น๊ต ์ฐ์ฐ์์ ํจ๊ป ์ฌ์ฉ.
๐ IN, ALL, ANY, SOME, EXISTS
|
Multi Column ์๋ธ์ฟผ๋ฆฌ
(๋ค์ค ์ด ์๋ธ์ฟผ๋ฆฌ)
|
- ์๋ธ์ฟผ๋ฆฌ์ ์คํ ๊ฒฐ๊ณผ๋ก ์ฌ๋ฌ ์ปฌ๋ผ์ ๋ฐํ.
- ๋ฉ์ธ ์ฟผ๋ฆฌ์ ์กฐ๊ฑด์ ์ ์ฌ๋ฌ ์นผ๋ผ์ ๋์์ ๋น๊ตํ ์ ์์.
- ์๋ธ์ฟผ๋ฆฌ์ ๋ฉ์ธ์ฟผ๋ฆฌ์์ ๋น๊ตํ๊ณ ์ ํ๋์ปฌ๋ผ ๊ฐ์์ ์ปฌ๋ผ์ ์์น๊ฐ ๋์ผํด์ผํจ.
- SQL Server์์๋ ํ์ฌ ์ง์ํ์ง ์๋ ๊ธฐ๋ฅ
|
โ
์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉ์ ์ฃผ์์ฌํญ
- ์๋ธ์ฟผ๋ฆฌ๋ฅผ ๊ดํธ๋ก ๊ฐ์ธ์ ์ฌ์ฉํจ
- ์๋ธ์ฟผ๋ฆฌ๋ ๋จ์ผํ ๋๋ ๋ณต์ํ ๋น๊ต์ฐ์ฐ์์ ํจ๊ป ์ฌ์ฉ๊ฐ๋ฅํจ.
- ๋จ์ผ ํ ๋น๊ต ์ฐ์ฐ์๋ ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋์ 1๊ฑด ์ดํ์ด์ด์ผํ๊ณ ๋ณต์ํ ๋น๊ต ์ฐ์ฐ์๋ ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ ๊ฑด์์ ์๊ด์์.
- ์๋ธ์ฟผ๋ฆฌ์์๋ ORDER BY๋ฅผ ์ฌ์ฉํ์ง ๋ชปํจ. ORDER BY์ ์ SELECT์์ ์ค์ง ํ๋๋ง ๊ฐ๋ฅ. ๋ฐ๋ผ์ ๋ฉ์ธ์ฟผ๋ฆฌ์ ๋ง์ง๋ง ๋ฌธ์ฅ์ ์์นํด์ผํจ.
โ
์ค์นผ๋ผ์๋ธ์ฟผ๋ฆฌ, ์ธ๋ผ์ธ๋ทฐ, ์๋ธ์ฟผ๋ฆฌ ์ฐจ์ด
โ ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ
- SELECT ์ ์์ ํจ์์ฒ๋ผ ์ฌ์ฉ๋๋ ์ฟผ๋ฆฌ๋ฌธ
- ํ๋์ ๋ ์ฝ๋๋ง ๋ฆฌํด ๊ฐ๋ฅ( ๋ฐํ๊ฐ ํ๊ฐ) ๋๊ฐ ์ด์์ ๋ ์ฝ๋๋ ๋ฆฌํด X
- ์ผ์นํ๋ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด NULL๋ฐํ ๊ฐ๋ฅ.
โ
โ ์ธ๋ผ์ธ๋ทฐ
- FROM ์ ์์ ์์ ๊ณต๊ฐ์ ํ ์ด๋ธ์ ์์ฑํ์ฌ ์ฌ์ฉํ๋ ๋ทฐ์ ๋น์ทํ ์ ์ฅ ํํ
- FROM ์ ์ ์๋ ์๋ธ์ฟผ๋ฆฌ๊ฐ ์ธ๋ผ์ธ ๋ทฐ๋ฅผ ์์ฑ, Create ๋ช ๋ น์ด๋ก ๋ง๋ค์ง ์๊ณ ํด๋น ๋ผ์ธ์ ์ง์ ๊ธฐ์
- ํจ์จ์ ์ธ ๊ฒ์ ๊ธฐ๋ฅ
- ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ ๋ง์น ์คํ ์์ ๋์ ์ผ๋ก ์์ฑ๋ ํ ์ด๋ธ์ธ ๊ฒ์ฒ๋ผ ์ฌ์ฉํ ์ ์์.
- ์ธ๋ผ์ธ ๋ทฐ๋ SQL๋ฌธ์ด ์คํ๋ ๋๋ง ์ ์์ ์ผ๋ก ์์ฑ๋๋ ๋์ ์ธ ๋ทฐ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํด๋น ์ ๋ณด๊ฐ ์ ์ฅ๋์ง ์์.
โ
โ ์๋ธ์ฟผ๋ฆฌ : WHERE ์กฐ๊ฑด ์ ์์ ๋น๊ตํํ๋ก ์ฌ์ฉ ๋๋ ํํ.
๐๋ทฐ์ฌ์ฉ์ ์ฅ์ ๐
โ
- ๋ ๋ฆฝ์ฑ : ํ ์ด๋ธ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ๋ทฐ๋ฅผ ์ฌ์ฉํ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ณ๊ฒฝํ์ง ์์๋๋จ
- ํธ๋ฆฌ์ฑ : ๋ณต์กํ ์ง์๋ฅผ ๋ทฐ๋ก ์์ฑํจ์ผ๋ก์จ ๊ด๋ จ ์ง์๋ฅผ ๋จ์ํ๊ฒ ์์ฑํ ์ ์์. ๋ํ ํด๋น ํํ์ SQL๋ฌธ์ ์์ฃผ ์ฌ์ฉํ ๋ ๋ทฐ๋ฅผ ์ด์ฉํ๋ฉด ํธ๋ฆฌํ๊ฒ ์ฌ์ฉ ํ ์ ์์.
- ๋ณด์์ฑ : ์ง์์ ๊ธ์ฌ์ ๋ณด์ ๊ฐ์ด ์จ๊ธฐ๊ณ ์ถ์ ์ ๋ณด๊ฐ ์กด์ฌํ๋ค๋ฉด ๋ทฐ๋ฅผ ์์ฑํ ๋ ํด๋น ์นผ๋ผ์ ๋นผ๊ณ ์์ฑํจ์ผ๋ก์จ ์ฌ์ฉ์์๊ฒ ์ ๋ณด๋ฅผ ๊ฐ์ถ ์ ์์.
๐CASE WHEN THEN - SQL์ ์กฐ๊ฑด๋ฌธ๐
# switch ๋ฌธ ๋ฐฉ์
CASE ์ปฌ๋ผ๋ช
|ํํ์
WHEN ์กฐ๊ฑด1 THEN ๊ฒฐ๊ณผ1
WHEN ์กฐ๊ฑด2 THEN ๊ฒฐ๊ณผ2
WHEN ์กฐ๊ฑด3 THEN ๊ฒฐ๊ณผ3
ELSE ๊ทธ ์ธ ๊ฒฐ๊ณผ
END ;
๐GROUP BY
ํน์ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ์ง๊ณ๋ฅผ ๋ด๋๋ฐ ์ฌ์ฉ.
- ROLLUP : ROLL UP ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง SUB TOTAL์ ์์ฑํ๋ ํจ์. ๋์ด๋ ์ปฌ๋ผ์ ์์๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ํ๊ฒฐ๊ณผ๋ ๋ณ๊ฒฝ.
ROLLUP(A,B) => (A,B) / (A,NULL) / (NULL,NULL)
- CUBE : ๊ฒฐํฉ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฐ์ ๋ํ์ฌ ๋ค์ฐจ์ ์ง๊ณ ์์ฑ. ์ ๋ ฌ ํ์ํ ๊ฒฝ์ฐ ORDER BY์ ์ ๋ช ์์ ์ผ๋ก ์ ๋ ฌ ์ปฌ๋ผ ํ์๋์ด์ผํจ.
- GROUPING SETS : ๋ค์ํ ์๊ณ ์งํฉ์ ๋ง๋ค์ ์์. ROLLUP๊ณผ ๋ฌ๋ฆฌ ํ๋ฑํ ๊ด๊ณ์ด๋ฏ๋ก ํ๋ผ๋ฏธํฐ์ ์์๊ฐ ๋ฐ๋์ด๋ ๊ฒฐ๊ณผ๋ ๊ฐ์.
GROUPING SETSํจ์ ์ญ์ ์ ๋ ฌ์ด ํ์ํ ๊ฒฝ์ฐ ORDER BY ์ ์ ๋ช ์์ ์ผ๋ก ์ ๋ ฌ ์ปฌ๋ผ์ด ํ์๋์ด์ผํจ.
- GROUPING : ํด๋น ์ปฌ๋ผ์ ๊ฐ์ด NULL์ด๋ฉด 1, ๊ฐ์ด ์์ผ๋ฉด 0 ๋ฆฌํด.
โ
ROLLUP( A, B ) == GROUPING SETS( ( A, B ),( A ) , ( ) )
CUBE( A, B ) == GROUPING SETS( ( A ), ( B ), ( A, B ( , ( ) )
CUBE , GROUPING SETS, ROLLUP ์ธ๊ฐ์ง ๊ทธ๋ฃน ํจ์ ๋ชจ๋ ์ผ๋ฐ ๊ทธ๋ฃน ํจ์๋ก ๋์ผํ ๊ฒฐ๊ณผ ์ถ์ถ ๊ฐ๋ฅ
ํจ์๋ค์ ์ํด ์ง๊ณ๋ ๋ ์ฝ๋์์ ์ง๊ณ ๋์ ์ปฌ๋ผ ์ด์ธ์ GROUP ๋์ ์ปฌ๋ผ์ ๊ฐ์ NULL์ ๋ฐํ.
โ
HAVING ์ - GROUP BY์ ๋ก ์ง๊ณ๋ ์ง๊ณํจ์๋ฅผ ์ฌ์ฉํด ์กฐ๊ฑด๋น๊ต๋ฅผ ํ๋๊ฒฝ์ฐ ์ฌ์ฉ. (WHERE์ ์์๋ ์ง๊ณํจ์ ์ฌ์ฉ X)
๐์๋์ฐํจ์
ํ๊ณผ ํ๊ฐ์ ๊ด๊ณ๋ฅผ ์ฝ๊ฒ ์ ์ํ๊ธฐ ์ํด ๋ง๋ ํจ์. ๋ถ์ํจ์๋ ์์ ํจ์๋ก๋ ์๋ ค์ ธ์์.
์์ํจ์ (RANK, DENSE_RANK, ROW_NUMBER)
RANK - ๋์ผ ๊ฐ. ๋์ผ ์์ ๋ถ์ฌ. ์ค๊ฐ ์์ ๋น์
DENSE_RANK - ๋์ผ ๊ฐ ๋์ผ ์์ ๋ถ์ฌ, ์ค๊ฐ ์์๋น์ฐ์ง ์์
ROW_NUMBER - ๋์ผ ๊ฐ์ ๋ํด์๋ ์ ์ผํ ์์ ๋ถ์ฌ
โ
์๋์ฐ ํจ์์๋ OVER ํค์๋๊ฐ ํ์์ ์ผ๋ก ํฌํจ๋จ.
Partition๊ณผ Group By ๊ตฌ๋ฌธ์ ์๋ฏธ์ ์ผ๋ก ์ ์ฌํจ. Partition ๊ตฌ๋ฌธ์ด ์์ผ๋ฉด ์ ์ฒด ์งํฉ์ ํ๋์ Partition ์ผ๋ก ์ ์ํ ๊ฒ๊ณผ ๋์ผ
์๋์ฐ ํจ์ ์ ์ฉ ๋ฒ์๋ Partition์ ๋์ ์ ์์
โ
- PARTITION BY์ : ์ ์ฒด ์งํฉ์ ๊ธฐ์ค์ ์ํด ์๊ทธ๋ฃน์ผ๋ก ๋๋ ์ ์์
- ORDER BY ์ด๋ค ํญ๋ชฉ์ ๋ํด ์์๋ฅผ ์ง์ ํ ์ง์ ๋ํด ๊ธฐ์
โ
LAG ํจ์๋ฅผ ์ด์ฉํด ํํฐ์ ๋ณ ์๋์ฐ์์ ์ด์ ํ์ ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์์. LEAD ํจ์๋ ๋ฐ๋๋ก ์ดํ ํ์ ๊ฐ์ ๊ฐ์ ธ์ด.
(SQL Server์์๋ ์ง์ํ์ง ์๋ ํจ์.)
๐ROLE
๋ง์ ์ฌ์ฉ์์๊ฒ ๊ฐ๋ณ์ ์ผ๋ก ๋ง์ ๊ถํ์ ๋ถ์ฌํ๋ ๋ฒ๊ฑฐ๋ก์์ ํด์ํ๊ธฐ ์ํด ๋ค์ํ ๊ถํ์ ํ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด๋์ ๋ ผ๋ฆฌ์ ์ธ ๊ถํ์ ๊ทธ๋ฃน.
GRANT - ROLE์ DBMS USER์๊ฒ ๋ถ์ฌํ๊ธฐ์ํ ๋ช ๋ น
REVOKE - ROLE ํ์
๐PL/SQLํน์ง
โ
- BLOCK๊ตฌ์กฐ๋ก ๋์ด์์ด ๊ฐ ๊ธฐ๋ฅ๋ณ๋ก ๋ชจ๋ํ ๊ฐ๋ฅ
- ๋ณ์, ์์ ๋ฑ์ ์ ์ธํ์ฌ SQL๋ฌธ์ฅ ๊ฐ ๊ฐ ๊ตํ
- IF,LOOP๋ฑ์ ์ ์ฐจํ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฐจ์ ์ธ ํ๋ก๊ทธ๋จ์ด ๊ฐ๋ฅํ๋๋กํจ
- DBMS ์ ์ ์๋ฌ๋ ์ฌ์ฉ์ ์ ์ ์๋ฌ๋ฅผ ์ ์ํ์ฌ ์ฌ์ฉํ ์ ์์
- Oracle์ ๋ด์ฅ๋์ด ์์ผ๋ฏ๋ก Oracle๊ณผ PL/SQL์ ์ง์ํ๋ ์ด๋ค ์๋ฒ๋ก๋ ํ๋ก๊ทธ๋จ์ ์ฎ๊ธธ ์ ์์
- ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ ํฅ์์ํด
- ์ฌ๋ฌ SQL๋ฌธ์ฅ์ BLOCK์ผ๋ก ๋ฌถ๊ณ ํ ๋ฒ์ BLOCK์ ๋ถ๋ฅผ ์๋ฒ๋ก ๋ณด๋ด๊ธฐ ๋๋ฌธ์ ํต์ ๋์ ์ค์ผ ์ ์์
โ
PL/SQL ์์๋ ๋์ SQL๋๋ DDL๋ฌธ์ฅ์ ์คํํ๋ ๊ฒฝ์ฐ EXECUTE IMMEDIATE๋ฅผ ์ฌ์ฉํ์ฌ์ผํจ
๐Trigger
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํด์ ์๋์ผ๋ก ํธ์ถ๋๊ณ ์ํ๋จ
- ํน์ ํ ์ด๋ธ์ ๋ํด์ INSERT, UPDATE, DELETE๋ฌธ์ด ์ํ๋์์๋ ํธ์ถ๋๋๋ก ์ ์ ํ ์ ์์
- ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ๋ก๊ทธ์ธํ๋ ์์ ์๋ ์ ์ํ ์ ์์.
โ
ํ๋ก์์ ์ ํธ๋ฆฌ๊ฑฐ์ ์ฐจ์ด์
ํ๋ก์์
|
ํธ๋ฆฌ๊ฑฐ
|
CREATE Procedure ๋ฌธ๋ฒ์ฌ์ฉ
|
CREATE Trigger ๋ฌธ๋ฒ์ฌ์ฉ
|
EXECUTE ๋ช
๋ น์ด๋ก ์คํ
|
์์ฑ ํ ์๋์ผ๋ก ์คํ
|
COMMIT, ROLLBACK ์คํ O
|
COMMIT, ROLLBACK ์คํ X
|