YeaLow
๐Ÿ” 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;

 

SQL Server์—์„œ ๊ณ„์ธตํ˜• ์งˆ์˜๋ฌธ์€ ์•ต์ปค ๋ฉค๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๊ธฐ๋ณธ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์„ ๋งŒ๋“ค๊ณ  ์ดํ›„ ์žฌ๊ท€ ๋ฉค๋ฒ„๋ฅผ ์ง€์†์ ์œผ๋กœ ์‹คํ–‰ํ•จ.

์˜ค๋ผํด์˜ ๊ณ„์ธตํ˜• ์งˆ์˜๋ฌธ์—์„œ 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
profile

YeaLow

@YeaLow

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!