์ง‘ํ•ฉ์—ฐ์‚ฐ์ž
๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์—์„œ ์กฐ์ธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ ์‚ฌ์šฉ
SELECT ์ ˆ์˜ ์นผ๋Ÿผ ์ˆ˜๊ฐ€ ๋™์ผํ•˜๊ณ , SELECT ์ ˆ์˜ ๋™์ผ ์œ„์น˜์— ์กด์žฌํ•˜๋Š” ์นผ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์ƒํ˜ธ ํ˜ธํ™˜ํ•  ๋•Œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ


์ผ๋ฐ˜ ์ง‘ํ•ฉ ์—ฐ์‚ฐ์ž

UNION ํ•ฉ์ง‘ํ•ฉ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ ๊ฒฐ๊ณผ์˜ ํ•ฉ ์ •๋ ฌ
UNION ALL ์ค‘๋ณต์„ ํฌํ•จํ•œ ๊ฒฐ๊ณผ์˜ ํ•ฉ์„ ๊ฒ€์ƒ‰, ์ •๋ ฌX, ๋น ๋ฆ„
INTERSECT ๊ต์ง‘ํ•ฉ ์–‘์ชฝ ๋ชจ๋‘์—์„œ ํฌํ•จ๋œ ํ–‰์„ ๊ฒ€์ƒ‰
MINUS (= EXCEPT) ์ฐจ์ง‘ํ•ฉ ์ฒซ ๋ฒˆ์งธ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์—์„œ ๋‘ ๋ฒˆ์งธ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€๋ฅผ ๊ฒ€์ƒ‰
CROSS JOIN ๊ณฑ์ง‘ํ•ฉ  

* ALIAS๋Š” ์ฒ˜์Œ ํ…Œ์ด๋ธ”, ์ •๋ ฌ์€ ๋งˆ์ง€๋ง‰ ํ…Œ์ด๋ธ” ๊ธฐ์ค€


์ˆœ์ˆ˜ ๊ด€๊ณ„์—ฐ์‚ฐ์ž : ๊ด€๊ณ„ํ˜• DB๋ฅผ ์ƒˆ๋กญ๊ฒŒ ๊ตฌํ˜„
1. SELECT -> WHERE์ ˆ๋กœ ๊ตฌํ˜„
2. PROJECT -> SELECT์ ˆ๋กœ ๊ตฌํ˜„
3. NATRUAL JOIN -> ๋‹ค์–‘ํ•œ JOIN์œผ๋กœ ๊ตฌํ˜„
4. DIVIDE -> ์‚ฌ์šฉd ์•ˆ ํ•จ ex) {a,x}{a,y}{a,z} divdie {x,z} = {a}





FROM์ ˆ JOINํ˜•ํƒœ
Equi Join : ์กฐ์ธ ์กฐ๊ฑด์‹์— '='๋ฅผ ์‚ฌ์šฉ, ๋‘ ํ…Œ์ด๋ธ”์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์กด์žฌํ•˜๋Š” ์ปฌ๋Ÿฝ์˜ ๊ฐ’์ด ์ผ์น˜๋˜๋Š” ํ–‰์„ ์—ฐ๊ฒฐํ•ด์„œ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑ
Non-Equi Join : '=' ์—ฐ์‚ฐ์ž ์ด์™ธ์˜ ๋น„๊ต ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉ


INNER JOIN JOIN ์กฐ๊ฑด์—์„œ ๋™์ผํ•œ ๊ฐ’์ด ์žˆ๋Š” ํ–‰๋งŒ ๋ฐ˜ํ™˜
USING์ด๋‚˜ ON์ ˆ์„ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ
* on ์กฐ๊ฑด๊ณผ where ์กฐ๊ฑด์˜ ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™๋‹ค
NATURAL JOIN Oracle
๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ–๋Š” ๋ชจ๋“  ์นผ๋Ÿผ๋“ค์— ๋Œ€ํ•ด EQUI JOIN ์ˆ˜ํ–‰
NATURAL JOIN์ด ๋ช…์‹œ๋˜๋ฉด ์ถ”๊ฐ€๋กœ USING, ON, WHERE JOIN์ ˆ์—์„œ ์กฐ๊ฑด์„ ์ •์˜ํ•  ์ˆ˜ ์—†๋‹ค
ON ์กฐ๊ฑด์ ˆ USING ์กฐ๊ฑด์ ˆ
Oracle
๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์นผ๋Ÿผ๋“ค ์ค‘์—์„œ ์›ํ•˜๋Š” ์นผ๋Ÿผ์— ๋Œ€ํ•ด์„œ๋งŒ ์„ ํƒ์ ์œผ๋กœ EQUI JOIN์„ ํ•  ์ˆ˜ ์žˆ๋‹ค
JOIN ์นผ๋Ÿผ์— ๋Œ€ํ•ด์„œ ALIAS๋‚˜ ํ…Œ์ด๋ธ” ์ด๋ฆ„๊ณผ ๊ฐ™์€ ์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์ผ ์ˆ˜ ์—†๋‹ค
JOIN์— ์‚ฌ์šฉ๋  ์ปฌ๋Ÿผ์„ ์ง€์ • (๊ฐ™์•„์•ผ ํ•˜๋Š” ์†์„ฑ ๋ช…์‹œ)
ON์กฐ๊ฑด์ ˆ๊ณผ WHERE์กฐ๊ฑด์ ˆ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ดํ•ด๊ฐ€ ์‰ฌ์›€
์นผ๋Ÿผ๋ช…์ด ๋‹ค๋ฅด๋”๋ผ๋„ JOIN์กฐ๊ฑด์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
ALIAS๋‚˜ ํ…Œ์ด๋ธ”๋ช… ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉ
SELECT ์นผ๋Ÿผ FROM ํ…Œ์ด๋ธ”a JOIN ํ…Œ์ด๋ธ”b USING (์กฐ์ธ ์นผ๋Ÿผ๋ช…)

 

CROSS JOIN = ์นดํ‹ฐ์…˜ ๊ณฑ (์กฐ์ธ ์กฐ๊ฑด์ ˆ์„ ์ ์ง€ ์•Š๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋ถ€ ๊ฐ€์ ธ์˜ด)
์–‘์ชฝ ์ง‘ํ•ฉ์˜ M*N๊ฑด์˜ ๋ฐ์ดํ„ฐ ์กฐํ•ฉ ๋ฐœ์ƒ
OUTER JOIN JOIN ์กฐ๊ฑด์—์„œ ๋™์ผํ•œ ๊ฐ’์ด ์—†๋Š” ํ–‰๋„ ๋ฐ˜ํ™˜ ๊ฐ€๋Šฅํ•˜๋‹ค
USING์ด๋‚˜ ON์กฐ๊ฑด์ ˆ ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉํ•ด์•ผ ํ•จ
SQL ์‹์—์„œ (+) ์•ˆ๋ถ™์€ ์ชฝ์œผ๋กœ JOINํ•œ๋‹ค
LEFT OUTER JOIN
= LEFT JOIN
์™ผ์ชฝ ํ…Œ์ด๋ธ” A์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ์™€ A์™€ B ํ…Œ์ด๋ธ”์˜ ์ค‘๋ณต๋ฐ์ดํ„ฐ๋“ค์ด ๊ฒ€์ƒ‰
์šฐ์ธก๊ฐ’์—์„œ ๊ฐ™์€ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ NULL๊ฐ’์œผ๋กœ ์ฑ„์šด๋‹ค
ex) SELECT * FROM ํ…Œ์ด๋ธ”a LEFT OUTER JOIN ํ…Œ์ด๋ธ”b ON (a.๋ฒˆํ˜ธ = b.๋ฒˆํ˜ธ)
RIGHT OUTER JOIN
= RIGHT JOIN
์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ” B์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ์™€ B์™€ A ํ…Œ์ด๋ธ”์˜ ์ค‘๋ณต๋ฐ์ดํ„ฐ๋“ค์ด ๊ฒ€์ƒ‰
FULL OUTER JOIN ์ขŒ์šฐ์ธก ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด JOINํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค
์ค‘๋ณต ๋ฐ์ดํ„ฐ๋Š” ์‚ญ์ œ

 





๊ณ„์ธตํ˜• ์งˆ์˜
ํ…Œ์ด๋ธ”์— ๊ณ„์ธตํ˜• ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
* ๊ณ„์ธตํ˜• ๋ฐ์ดํ„ฐ : ๋™์ผ ํ…Œ์ด๋ธ”์— ๊ณ„์ธต์ ์œผ๋กœ ์ƒ์œ„/ํ•˜์œ„ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ ex) ๋ถ€์„œtable์—์„œ ์ƒ์œ„๋ถ€์„œ, ํ•˜์œ„๋ถ€์„œ

 

 

๊ณ„์ธตํ˜•์งˆ์˜ ํŠน์ง•

SQL Server์—์„œ์˜ ๊ณ„์ธตํ˜• ์งˆ์˜๋ฌธ์€ STE๋ฅผ ์žฌ๊ท€ ํ˜ธ์ถœํ•จ์œผ๋กœ์จ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์ „๊ฐœ

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

Oracle์˜ ๊ณ„์ธตํ˜• ์งˆ์˜๋ฌธ์—์„œ WHERE์ ˆ์€ ๋ชจ๋“  ์ „๊ฐœ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ , ํ•„ํ„ฐ ์กฐ๊ฑด์œผ๋กœ์„œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ์„ ์ถ”์ถœํ•˜๋Š”๋ฐ ์‚ฌ์šฉ

Oracle์˜ ๊ณ„์ธตํ˜• ์งˆ์˜๋ฌธ์—์„œ PRIOR ํ‚ค์›Œ๋“œ๋Š” SELECT, WHERE, CONNECT BY์ ˆ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

 

 

๊ณ„์ธตํ˜• ์งˆ์˜ SQL๋ฌธ

START WITH ๊ณ„์ธต ๊ตฌ์กฐ ์ „๊ฐœ์˜ ์‹œ์ž‘ ์œ„์น˜ ์ง€์ •
CONNECT BY ๋‹ค์Œ์— ์ „๊ฐœ๋  ์ž์‹ ๋ฐ์ดํ„ฐ ์ง€์ •
PRIOR CONNECT BY์ ˆ์— ์‚ฌ์šฉ
ํ˜„์žฌ ์ฝ์€ ์นผ๋Ÿผ์„ ์ง€์ •
PRIOR = ๋ถ€๋ชจ ํ˜•ํƒœ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ณ„์ธต๊ตฌ์กฐ์—์„œ ๋ถ€๋ชจ ๋ฐ์ดํ„ฐ์—์„œ ์ž์‹ ๋ฐ์ดํ„ฐ ๋ฐฉํ–ฅ์œผ๋กœ (๋ถ€๋ชจ -> ์ž์‹) ์ „๊ฐœํ•˜๋Š” ์ˆœ๋ฐฉํ–ฅ ์ „๊ฐœ๋ฅผ ํ•œ๋‹ค. ๋ฐ˜๋Œ€๋Š” ์—ญ๋ฐฉํ–ฅ ์ „๊ฐœ
NOCYCLE ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „๊ฐœ๋˜์ง€ ์•Š์Œ
ORDER SIBLINGS BY ํ˜•์ œ ๋…ธ๋“œ(๋™์ผ level) ๊ฐ„์˜ ์ •๋ ฌ ์ˆ˜ํ–‰
WHERE ๋ชจ๋“  ์ „๊ฐœ๋ฅผ ์ˆ˜ํ–‰ํ•œ ํ›„์— ์ง€์ •๋œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์ถ”์ถœํ•œ๋‹ค (=ํ•„ํ„ฐ๋ง)



๊ฐ€์ƒ ์นผ๋Ÿผ
Oracle์ด ๊ณ„์ธตํ˜• ์งˆ์˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ œ๊ณตํ•œ๋‹ค

LEVEL ๋ฃจํŠธ ๋ฐ์ดํ„ฐ๋ฉด 1, ๊ทธ ํ•˜์œ„ ๋ฐ์ดํ„ฐ๋ฉด 2. ๋ฆฌํ”„ ๋ฐ์ดํ„ฐ๊นŒ์ง€ 1์”ฉ ์ฆ๊ฐ€
CONNECT_BY_ISLEAF ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฆฌํ”„ ๋ฐ์ดํ„ฐ๋ฉด 1, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด 0
CONNECT_BY_ISCYCLE ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ์กฐ์ƒ์ด๋ฉด 1, ์•„๋‹ˆ๋ฉด 0 (CYCLE์˜ต์…˜ ์‚ฌ์šฉํ–ˆ์„ ์‹œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)



๊ณ„์ธตํ˜• ์งˆ์˜ ํ•จ์ˆ˜

SYS_CONNECT_BY_PATH ๋ฃจํŠธ ๋ฐ์ดํ„ฐ๋ถ€ํ„ฐ ํ˜„์žฌ ์ „๊ฐœํ•  ๋ฐ์ดํ„ฐ๊นŒ์ง€์˜ ๊ฒฝ๋กœ๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.
SYS_CONNECT_BY_PATH (์นผ๋Ÿผ, ๊ฒฝ๋กœ๋ถ„๋ฆฌ์ž)
CONNECT_BY_ROOT ํ˜„์žฌ ์ „๊ฐœํ•  ๋ฐ์ดํ„ฐ์˜ ๋ฃจํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•œ๋‹ค. ๋‹จํ•ญ ์—ฐ์‚ฐ์ž.
CONNECT_BY_ROOT ์นผ๋Ÿผ






์…€ํ”„ ์กฐ์ธ
ํ•œ ํ…Œ์ด๋ธ” ๋‚ด ๋‘ ์นผ๋Ÿผ์ด ์—ฐ๊ด€ ๊ด€๊ณ„๊ฐ€ ์žˆ์„ ๋•Œ ๋™์ผ ํ…Œ์ด๋ธ” ์‚ฌ์ด์˜ ์กฐ์ธ
FROM์ ˆ์— ๋™์ผ ํ…Œ์ด๋ธ”์ด 2๋ฒˆ ์ด์ƒ ๋‚˜ํƒ€๋‚œ๋‹ค
๋ฐ˜๋“œ์‹œ ํ…Œ์ด๋ธ” ๋ณ„์นญ์„ ์‚ฌ์šฉ


์„œ๋ธŒ์ฟผ๋ฆฌ
ํ•˜๋‚˜์˜ ๋ฌธ ์•ˆ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ SQL๋ฌธ
์•Œ๋ ค์ง€์ง€ ์•Š์€ ๊ธฐ์ค€์„ ์ด์šฉํ•œ ๊ฒ€์ƒ‰์— ์‚ฌ์šฉ
์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ์„œ ์‚ฌ์šฉ
๋‹จ์ผ ํ–‰ ๋˜๋Š” ๋ณต์ˆ˜ ํ–‰ ๋น„๊ต ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
๋‹จ์ผํ–‰ ๋น„๊ต ์—ฐ์‚ฐ์ž๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜๋“œ์‹œ 1๊ฑด ์ดํ•˜์—ฌ์•ผ ํ•˜๊ณ , ๋ณต์ˆ˜ ํ–‰ ๋น„๊ต ์—ฐ์‚ฐ์ž๋Š” ๊ฒฐ๊ณผ ๊ฑด์ˆ˜์™€ ์ƒ๊ด€์—†๋‹ค.
์„œ๋ธŒ์ฟผ๋ฆฌ์—์„œ๋Š” ORDER BY๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค
SELECT, FROM, WHERE, HAVING, ORDER BY, INSERT-VALUES, UPDATE-SET ์ ˆ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

SELECT์ ˆ scala ํ•˜๋‚˜์˜ ์นผ๋Ÿผ์ฒ˜๋Ÿผ ์‚ฌ์šฉ
SELECT ์ ˆ์˜ ๊ฒฐ๊ณผ๋ฅผ FROM ์ ˆ์—์„œ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ
FROM์ ˆ  inline view ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์‚ฌ์šฉ. ๋ฉ”์ธ์ฟผ๋ฆฌ์˜ ์นผ๋Ÿผ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅ
ORDER BY ์‚ฌ์šฉ ๊ฐ€๋Šฅ
WHERE์ ˆ ์ผ๋ฐ˜ ์„œ๋ธŒ์ฟผ๋ฆฌ ๊ฑฐ์˜ ๋ชจ๋“  ์„œ๋ธŒ์ฟผ๋ฆฌ (์ค‘์ฒฉ ์„œ๋ธŒ์ฟผ๋ฆฌ)
SELECT ์ ˆ์˜ ๊ฒฐ๊ณผ๋ฅผ WHERE ์ ˆ์—์„œ ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜(์ƒ์ˆ˜)์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ
๋‹จ์ผํ–‰, ๋‹ค์ค‘ํ–‰, ๋‹ค์ค‘์นผ๋Ÿผ ์„œ๋ธŒ์ฟผ๋ฆฌ
GROUP BY์ ˆ  ์‚ฌ์šฉ๋ถˆ๊ฐ€  
HAVING์ ˆ ์ผ๋ฐ˜ ์„œ๋ธŒ์ฟผ๋ฆฌ ๊ฑฐ์˜ ๋ชจ๋“  ์„œ๋ธŒ์ฟผ๋ฆฌ (์ค‘์ฒฉ ์„œ๋ธŒ์ฟผ๋ฆฌ)
ORDER BY์ ˆ scala  

 

 

๋‹จ์ผ ํ–‰ ๋น„๊ต์—ฐ์‚ฐ์ž
-, <, >, <> ๋“ฑ

๋‹ค์ค‘ ํ–‰ ๋น„๊ต์—ฐ์‚ฐ์ž
IN ๊ฐ™์€ ๊ฐ’
ANY / SOME ์ตœ์†Œ๊ฐ’
ALL ์ตœ๋Œ€๊ฐ’
EXISTS(์„œ๋ธŒ ์ฟผ๋ฆฌ) ์„œ๋ธŒ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๊ฐ€ ํ•œ ๊ฑด์ด๋ผ๋„ ์กด์žฌํ•˜๋ฉด TRUE ์—†์œผ๋ฉด FALSE๋ฅผ ๋ฆฌํ„ด



๋™์ž‘ ๋ฐฉ์‹์— ๋”ฐ๋ฅธ ์„œ๋ธŒ์ฟผ๋ฆฌ ๋ถ„๋ฅ˜
๋น„์—ฐ๊ด€ ์„œ๋ธŒ์ฟผ๋ฆฌ : ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ ๋ฉ”์ธ์ฟผ๋ฆฌ ์นผ๋Ÿผ ์•ˆ๊ฐ€์ง. ๋ฉ”์ธ์ฟผ๋ฆฌ์— ๊ฐ’ ์ œ๊ณต ๋ชฉ์ 
์—ฐ๊ด€ ์„œ๋ธŒ์ฟผ๋ฆฌ : ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ ๋ฉ”์ธ์ฟผ๋ฆฌ ์นผ๋Ÿผ ๊ฐ€์ง


๋ฐ˜ํ™˜ ๋ฐ์ดํ„ฐ์— ๋”ฐ๋ฅธ ์„œ๋ธŒ์ฟผ๋ฆฌ ์ข…๋ฅ˜
๋‹จ์ผํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ : ์‹คํ–‰๊ฒฐ๊ณผ 1๊ฑด ์ดํ•˜
๋‹ค์ค‘ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ : ์‹คํ–‰๊ฒฐ๊ณผ ์—ฌ๋Ÿฌ ๊ฑด
๋‹ค์ค‘์ปฌ๋Ÿผ ์„œ๋ธŒ์ฟผ๋ฆฌ : ์‹คํ–‰๊ฒฐ๊ณผ ์ปฌ๋Ÿผ ์—ฌ๋Ÿฌ ๊ฐœ


VIEW (๊ฐ€์ƒํ…Œ์ด๋ธ”)
ํ…Œ์ด๋ธ”์€ ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ˜๋ฉด, ๋ทฐ๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค
์‹คํ–‰ ์‹œ์ ์— SQL ์žฌ์ž‘์„ฑํ•˜์—ฌ ์ˆ˜ํ–‰

๋…๋ฆฝ์„ฑ : ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ๋ทฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค
ํŽธ๋ฆฌ์„ฑ : ๋ณต์žกํ•œ ์งˆ์˜๋ฅผ ๋ทฐ๋กœ ์ƒ์„ฑํ•จ์œผ๋กœ์จ ๊ด€๋ จ ์งˆ์˜๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค
๋ณด์•ˆ์„ฑ : ์ง์›์˜ ๊ธ‰์—ฌ์ •๋ณด์™€ ๊ฐ™์ด ์ˆจ๊ธฐ๊ณ  ์‹ถ์€ ์ •๋ณด๊ฐ€ ์กด์žฌํ•  ๋•Œ ์‚ฌ์šฉ
ex) CREATE VIEW v_player_team AS SELECT ... ;
DROP VIEW v_player_team;





โ˜…๊ทธ๋ฃนํ•จ์ˆ˜

ROLL UP Subtotal์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ. ๊ณ„์ธต๊ตฌ์กฐ์ด๋ฏ€๋กœ ์ธ์ˆ˜์˜ ์ˆœ์„œ ์ค‘์š”
CUBE ๊ทธ๋ฃนํ•‘ ์ปฌ๋Ÿผ์ด ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜์— ๋Œ€ํ•˜์—ฌ ์†Œ๊ณ„์™€ ์ด๊ณ„๋ฅผ ์ƒ์„ฑ
ROLLUP์— ๋น„ํ•ด ์‹œ์Šคํ…œ ๋ถ€ํ•˜๊ฐ€ ์‹ฌํ•˜๋‹ค
์ธ์ˆ˜์˜ ์ˆœ์„œ ์ƒ๊ด€ ์—†์Œ
GROUPING SETS ์ธ์ˆ˜๋“ค์— ๋Œ€ํ•œ ๊ฐœ๋ณ„ ์ง‘๊ณ„๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค
๋‹ค์–‘ํ•œ ์†Œ๊ณ„ ์ง‘ํ•ฉ ์ƒ์„ฑ ๊ฐ€๋Šฅ
ROLLUP๊ณผ CUBE์™€ ๋‹ฌ๋ฆฌ ๊ณ„์ธต ๊ตฌ์กฐ๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ธ์ž์˜ ์ˆœ์„œ ์ƒ๊ด€ ์—†์Œ
GROUPING ์ง‘๊ณ„ ํ‘œ์‹œ๋ฉด 1, ์•„๋‹ˆ๋ฉด 0

* Grouping Columns์˜ ์ˆ˜๋ฅผ N์ด๋ผ๊ณ  ํ–ˆ์„ ๋•Œ N+1 Level์˜ Subtotal์ด ์ƒ์„ฑ
[๋ฌธ์ œํ’€๊ธฐ] NULL ์ฐพ๊ธฐ -> ์ดํ•ฉ ์ฐพ๊ธฐ -> ์ดํ•ฉ ์žˆ์œผ๋ฉด ROLL UP, CUBE / ์—†์œผ๋ฉด GROUPING SETS


์œˆ๋„์šฐํ•จ์ˆ˜
RANK : ๋™์ผ ๊ฐ’์— ๋Œ€ํ•ด ๋™์ผ ์ˆœ์œ„ ๋ถ€์—ฌ ex) 1๋“ฑ, 1๋“ฑ, 3๋“ฑ
DENSE RANK : ๋™์ผ ์ˆœ์œ„๋ฅผ ํ•˜๋‚˜์˜ ๋“ฑ์ˆ˜๋กœ ๊ฐ„์ฃผ ex) 1๋“ฑ, 1๋“ฑ, 2๋“ฑ, 3๋“ฑ
ROW_NUMBER : ๋™์ผ ๊ฐ’์ด๋ผ๋„ ๊ณ ์œ ํ•œ ์ˆœ์œ„ ๋ถ€์—ฌ ex) 1๋“ฑ, 2๋“ฑ, 3๋“ฑ, 4๋“ฑ

ROWS : ํ–‰์˜ ์ˆ˜ ์„ ํƒ
RANGE : ๊ฐ’์˜ ๋ฒ”์œ„ ์„ ํƒ
* ๊ฒฐ๊ณผ๊ฐ’์˜ ์ฐจ์ด์  ์•Œ๊ธฐ. ๊ฐ™์€ ๊ฐ’์ด ์žˆ์œผ๋ฉด RANGE

PATRITION BY : ์ „์ฒด ์ง‘ํ•ฉ์„ ๊ธฐ์ค€์— ์˜ํ•ด ์†Œ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. =group by์™€ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ
ORDER BY


ํ–‰ ์ˆœ์„œ ๊ด€๋ จ ํ•จ์ˆ˜ (ONLY Oracle)
FIRST_VALUE : ํŒŒํ‹ฐ์…˜๋ณ„ ์œˆ๋„์šฐ์˜ ์ฒ˜์Œ ๊ฐ’
LAST_VALUE : ํŒŒํ‹ฐ์…˜๋ณ„ ์œˆ๋„์šฐ์˜ ๋งˆ์ง€๋ง‰ ๊ฐ’


LAG : ํŒŒํ‹ฐ์…˜๋ณ„ ์œˆ๋„์šฐ์—์„œ ์ด์ „ ๋ช‡ ๋ฒˆ์งธ ํ–‰์˜ ๊ฐ’
LEAD : ํŒŒํ‹ฐ์…˜๋ณ„ ์œˆ๋„์šฐ์—์„œ ์ดํ›„ ๋ช‡ ๋ฒˆ์งธ ํ–‰์˜ ๊ฐ’


๋น„์œจ ๊ด€๋ จ ํ•จ์ˆ˜
RATIO_TO_REPORT : SUM ํŒŒํ‹ฐ์…˜ ๋‚ด ์ „์ฒด ์— ๋Œ€ํ•œ ํ–‰๋ณ„ ์นผ๋Ÿผ ๊ฐ’์˜ ๋ฐฑ๋ถ„์œจ์„ ์†Œ์ˆ˜์ ์œผ๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. >0, <=1
PERCENT_RANK : ํŒŒํ‹ฐ์…˜๋ณ„ ์œˆ๋„์šฐ์—์„œ ์ฒ˜์Œ ๊ฐ’์„ 0, ๋งˆ์ง€๋ง‰ ๊ฐ’์„ 1๋กœ ํ•˜์—ฌ ํ–‰์˜ ์ˆœ์„œ๋ณ„ ๋ฐฑ๋ถ„์œจ์„ ๊ตฌํ•œ๋‹ค. 0>=,<=1
CUME_DIST : ํ˜„์žฌ ํ–‰๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฑด์ˆ˜์— ๋Œ€ํ•œ ๋ˆ„์ ๋ฐฑ๋ถ„์œจ์„ ๊ตฌํ•œ๋‹ค. >0, <=1
NTILE : ํŒŒํ‹ฐ์…˜ ๋ณ„ ์ „์ฒด ๊ฑด์ˆ˜๋ฅผ ์ธ์ˆ˜ ๊ฐ’์œผ๋กœ N๋“ฑ๋ถ„ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.





DCL
์œ ์ € ์ƒ์„ฑํ•˜๊ณ  ๊ถŒํ•œ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด
* ์‹œ์Šคํ…œ ๊ถŒํ•œ : SQL ์‚ฌ์šฉ์ž๊ฐ€ ๋ฌธ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ ์ ˆํ•œ ๊ถŒํ•œ
GRANT : ์‚ฌ์šฉ์ž(User)์—๊ฒŒ ์ ‘์†๊ถŒํ•œ, ์˜ค๋ธŒ์ ํŠธ ์ƒ์„ฑ๊ถŒํ•œ, DBA ๊ถŒํ•œ ๋“ฑ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด ex) GRANT CREATE TABLE TO pjs;
REVOKE : ์‚ฌ์šฉ์ž(User)์—๊ฒŒ ๋ถ€์—ฌํ•œ ๊ถŒํ•œ์„ ๋‹ค์‹œ ํšŒ์ˆ˜ํ•˜๋Š” ๋ช…๋ น์–ด ex) REVOKE CREATE TABLE FROM pjs;

ROLE : ์œ ์ €์—๊ฒŒ ์•Œ๋งž์€ ๊ถŒํ•œ๋“ค์„ ํ•œ ๋ฒˆ์— ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ. ๋ช…๋ น์–ด๊ฐ€ ์•„๋‹Œ ๊ฐ์ฒด์ด๋‹ค.
CREATE ROLE LOGIN_TABLE;
DROP USER PJS CASCADE; * CASCADE : ํ•˜์œ„ ์˜ค๋ธŒ์ ํŠธ๊นŒ์ง€ ์‚ญ์ œ


Oracle SQL๊ณผ Server์˜ ์‚ฌ์šฉ์ž ์•„ํ‚คํ…์ฒ˜ ์ฐจ์ด

Oracle SQL Server
์œ ์ €๋ฅผ ํ†ตํ•ด DB ์ ‘์†
ID/PW ๋ฐฉ์‹์œผ๋กœ ์ธ์Šคํ„ด์Šค์— ์ ‘์†ํ•˜๊ณ , ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ์Šคํ‚ค๋งˆ์— ์˜ค๋ธŒ์ ํŠธ ์ƒ์„ฑ ๋“ฑ์˜ ๊ถŒํ•œ์„ ๋ถ€์—ฌ๋ฐ›๊ฒŒ ๋จ
์ธ์Šคํ„ด์Šค์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•ด ๋กœ๊ทธ์ธ์ด๋ผ๋Š” ๊ฒƒ์„ ์ƒ์„ฑ
์ธ์Šคํ„ด์Šค ๋‚ด์— ์กด์žฌํ•˜๋Š” ๋‹ค์ˆ˜์˜ DB์— ์—ฐ๊ฒฐํ•˜์—ฌ ์ž‘์—…ํ•˜๊ธฐ ์œ„ํ•ด, ์œ ์ €๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ๋กœ๊ทธ์ธ๊ณผ ์œ ์ €๋ฅผ ๋งคํ•‘
Windows ๋ฐฉ์‹๊ณผ ํ˜ผํ•ฉ ๋ชจ๋“œ ๋ฐฉ์‹์ด ์กด์žฌ







์ ˆ์ฐจํ˜• SQL
SQL๋ฌธ์˜ ์—ฐ์†์ ์ธ ์‹คํ–‰์ด๋‚˜ ์กฐ๊ฑด์— ๋”ฐ๋ฅธ ๋ถ„๊ธฐ, ๋ฐ˜๋ณต ๋“ฑ์˜ ์ œ์–ด๋ฅผ ํ™œ์šฉํ•ด ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” DB ์ €์žฅ ๋ชจ๋“ˆ ์ƒ์„ฑ
Procedure, User Defined Function, Trigger ๋“ฑ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ํ•ด๋‹น๋œ๋‹ค.
- Procedure : ํŠน์ • ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ผ์ข…์˜ ํŠธ๋žœ์žญ์…˜ ์–ธ์–ด. ํ˜ธ์ถœ์„ ํ†ตํ•ด ์‹คํ–‰๋˜๋ฉฐ ๋ฏธ๋ฆฌ ์ €์žฅํ•ด ๋†“์€ SQL ์ž‘์—…์„ ์ˆ˜ํ–‰
- Function : ํ•˜๋‚˜ ์ด์ƒ์˜ ํ”„๋กœ์‹œ์ €, ํ•จ์ˆ˜, ๋ณ€์ˆ˜, ์˜ˆ์™ธ ๋“ฑ์˜ ๋ฌถ์Œ
- Trigger : ํŠน์ •ํ•œ ํ…Œ์ด๋ธ”์— INSERT, UPDATE, DELETE์™€ ๊ฐ™์€ DML๋ฌธ์ด ์ˆ˜ํ–‰๋˜์—ˆ์„ ๋•Œ DB์—์„œ ์ž๋™์œผ๋กœ ๋™์ž‘ํ•˜๋„๋ก ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ. ์‚ฌ์šฉ์ž ํ˜ธ์ถœ์ด ์•„๋‹Œ DB ์ž๋™ ์ˆ˜ํ–‰

* ์ €์žฅ ๋ชจ๋“ˆ : PL/SQL DB ๋ฌธ์žฅ์„ ์„œ๋ฒ„์— ์ €์žฅํ•˜์—ฌ ์‚ฌ์šฉ์ž์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ฌ์ด์—์„œ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“  ์ผ์ข…์˜ SQL์ปดํฌ๋„ŒํŠธ ํ”„๋กœ๊ทธ๋žจ. ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ๋ถ€ํ„ฐ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ์™„์ „ํ•œ ์‹คํ–‰ ํ”„๋กœ๊ทธ๋žจ


์ ˆ์ฐจํ˜• SQL์˜ ํŠน์ง•
1. Block ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ์–ด ๊ฐ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ชจ๋“ˆํ™” ๊ฐ€๋Šฅ
2. ๋ณ€์ˆ˜, ์ƒ์ˆ˜ ๋“ฑ์„ ์„ ์–ธํ•˜์—ฌ SQL ๋ฌธ์žฅ ๊ฐ„ ๊ฐ’์„ ๊ตํ™˜
3. IF, LOOP ๋“ฑ์˜ ์ ˆ์ฐจํ˜• ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ ˆ์ฐจ์ ์ธ ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•œ๋‹ค.
4. DBMS ์ •์˜ ์—๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž ์ •์˜ ์—๋Ÿฌ๋ฅผ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
5. Oracle์— ๋‚ด์žฅ๋˜์–ด ์žˆ์–ด ํ˜ธํ™˜์„ฑ์ด ์ข‹๋‹ค.
6. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.
7. Block -> ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌ ํ†ต์‹ ๋Ÿ‰์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.


์ ˆ์ฐจํ˜• SQL์˜ ๊ตฌ์„ฑ
DECLARE : BEGIN~END ์ ˆ์—์„œ ์‚ฌ์šฉ๋  ๋ณ€์ˆ˜์™€ ์ธ์ˆ˜์— ๋Œ€ํ•œ ์ •์˜ ๋ฐ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์„ ์–ธ๋ถ€
BEGIN~END :์ฒ˜๋ฆฌํ•˜๊ณ ์ž ํ•˜๋Š” SQL๋ฌธ๊ณผ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋น„๊ต๋ฌธ, ์ œ์–ด๋ฌธ์„ ์ด์šฉํ•ด์„œ ํ•„์š”ํ•œ ๋กœ์ง ์ฒ˜๋ฆฌ
- BEGIN : ํ”„๋กœ์‹œ์ €, ์‚ฌ์šฉ์ž ์ •์˜ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋Š” ์‹œ์ž‘์ 
- END : ํ”„๋กœ์‹œ์ €, ์‚ฌ์šฉ์ž ์ •์˜ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ข…๋ฃŒ์ 
EXCEPTION : BEGIN~END ์ ˆ์—์„œ ์‹คํ–‰๋˜๋Š” SQL๋ฌธ์ด ์‹คํ–‰๋  ๋•Œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ทธ ์—๋Ÿฌ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€ ์ •์˜ํ•˜๋Š” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ถ€

ํ”„๋กœ์‹œ์ €์™€ ํŠธ๋ฆฌ๊ฑฐ์˜ ์ฐจ์ด์ 
ํ”„๋กœ์‹œ์ € : BEGIN~END COMMIT์ ˆ ๋‚ด์— ROLLBACK๊ณผ ๊ฐ™์€ ํŠธ๋žœ์žญ์…˜ ์ข…๋ฃŒ ๋ช…๋ น์–ด ์‚ฌ์šฉ๊ฐ€๋Šฅ. EXECUTE ๋ช…๋ น์–ด๋กœ ์‹คํ–‰
ํŠธ๋ฆฌ๊ฑฐ : BEGIN~END์ ˆ ๋‚ด์— ์‚ฌ์šฉ ๋ถˆ๊ฐ€. ์ƒ์„ฑ ํ›„ ์ž๋™ ์‹คํ–‰

T-SQL : ๊ทผ๋ณธ์ ์œผ๋กœ SQL Server๋ฅผ ์ œ์–ดํ•˜๋Š” ์–ธ์–ด





+ Recent posts