๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–‹๏ธ ๊ธฐ์ˆ ์‹ฌํ™”/SQLD

[SQLD๋ฒผ๋ฝ์น˜๊ธฐ] SQL ์ž๊ฒฉ๊ฒ€์ • ์‹ค์ „๋ฌธ์ œ ์˜ค๋‹ต๋…ธํŠธ(2๊ณผ๋ชฉ-2)

by OR15A 2023. 11. 17.

2-2 SQL ํ™œ์šฉ

์ˆœ์ˆ˜๊ด€๊ณ„์—ฐ์‚ฐ์ž : SELECT(where์ ˆ๋กœ), PROJECT(select์ ˆ๋กœ), JOIN, DIVIDE

USING : ๋‘ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•  ๋•Œ ํŠน์ •์—ด ๊ธฐ์ค€์œผ๋กœ ์กฐ์ธ ์‹œ ์‚ฌ์šฉํ•จ. USING ์กฐ๊ฑด์ ˆ์—๋Š” JOIN ์นผ๋Ÿผ์— ๋Œ€ํ•ด  AliasX ํ…Œ์ด๋ธ”์ด๋ฆ„ ์ ‘๋‘์‚ฌX

CROSS JOIN : ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์กฐํ•ฉ

์ „์ œ (๋‹ด๋‹น์‚ฌ์›ํ…Œ์ด๋ธ”๊ณผ ๊ณ ๊ฐํ…Œ์ด๋ธ”์ด ์žˆ๋Š”๋ฐ ์•„์ง ์„œ๋กœ ๋งค์นญ ์•ˆ๋œ ์ผ€์ด์Šค๋„ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ)

๊ณ ๊ฐ์ด ๋ฐฐ์ •๋˜์ง€ ์•Š์€ ๋‹ด๋‹น์‚ฌ์›์— ๋Œ€ํ•ด์„œ๋Š” ๊ณ ๊ฐ ๊ด€๋ จ ์ปฌ๋Ÿผ์ด NULL๋กœ ํ‘œ์‹œ

SELECT *
FROM ๋‹ด๋‹น์‚ฌ์› LEFT OUTER JOIN ๊ณ ๊ฐ
           ON ๋‹ด๋‹น์‚ฌ์›.id = ๊ณ ๊ฐ.๋‹ด๋‹น์‚ฌ์›_id;  // ํ˜„๋Œ€์ ์ธ ANSI SQL ํ‘œ์ค€ ์กฐ์ธ ๊ตฌ๋ฌธ์ด ์ง€์›๋จ^^
SELECT *
FROM ๋‹ด๋‹น์‚ฌ์›, ๊ณ ๊ฐ
WHERE ๋‹ด๋‹น์‚ฌ์›.์‚ฌ์›_id = ๊ณ ๊ฐ.๋‹ด๋‹น์‚ฌ์›_id (+);    //์ด๊ฑด ์˜ค๋ž˜๋œ ๊ตฌ๋ฌธ.... ใ…‹ใ…‹

OUTER JOIN์—์„œ ON์ ˆ์€ ์กฐ์ธํ•  ๋Œ€์ƒ์„ ๊ฒฐ์ •ํ•จ. ๊ฒฐ๊ณผ๊ฑด ํ•„ํ„ฐ๋ง์€ WHERE์ ˆ์—์„œ

LEFT OUTER JOIN๊ณผ LEFT JOIN์€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰

EXCEPT/MINUS : ์ฐจ์ง‘ํ•ฉ์— ๋Œ€ํ•œ ์—ฐ์‚ฐ -> ๋Œ€์ฒด(NOT IN, NOT EXISTS)

(ํ•œ์ชฝ๋งŒ ์ œ๋Œ€๋กœ ์™ธ์šฐ๊ธฐ!!)

PRIOR ์ž์‹ = ๋ถ€๋ชจ   :   ๋ถ€๋ชจ->์ž์‹, ์ˆœ๋ฐฉํ–ฅ

์ดํ•ด๋ฅผ ๋•๋Š” ์œ ํŠœ๋ธŒ ์ถ”์ฒœ

https://youtu.be/FtK9MtVga6I?si=uSyWIS0WKDHxvRh8&t=2022

SELECT employee_id, manager_id, employee_name
FROM employees
START WITH manager_id IS NULL    //์ตœ์ƒ์œ„ ์ง์›(๋งค๋‹ˆ์ €๊ฐ€ ์—†๋Š” ์ง์›)์—์„œ ์‹œ์ž‘
CONNECT BY PRIOR employee_id = manager_id    //๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„ ์ •์˜   PRIOR ์ž์‹ = ๋ถ€๋ชจ ์ด๋ฏ€๋กœ ์ˆœ๋ฐฉํ–ฅ
ORDER SIBLINGS BY employee_name;   //๊ฐ™์€ ๋งค๋‹ˆ์ €๋ฅผ ๊ฐ€์ง„ ์ง์›๋“ค์„ ์ด๋ฆ„ ์ˆœ์œผ๋กœ ์ •๋ ฌ

START WITH : ๊ณ„์ธต ๊ตฌ์กฐ ์‹œ์ž‘ ์•Œ๋ฆผ

CONNECT BY : ๊ณ„์ธต ์ปฌ๋Ÿผ ์ง€์ •

ORDER SIBLINGS BY : ํ˜•์ œ ๋…ธ๋ฅด ์‚ฌ์ด์—์„œ ์ •๋ ฌ ์ˆ˜ํ–‰

START WITH ์ ˆ์— ํฌํ•จ๋œ ์‹œ์ž‘๋ฐ์ดํ„ฐ๋„ ๊ฒฐ๊ณผ๋ชฉ๋ก์— ํฌํ•จ๋จ.(WHERE์ ˆ์— ์ž‘์„ฑ๋œ ์กฐ๊ฑด์ ˆ๊ณผ๋Š” ๋‹ค๋ฆ„)

๋‹ค์ค‘์ปฌ๋Ÿผ ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” Oracle OK, SQL Server X

๋น„์—ฐ๊ด€ ์„œ๋ธŒ์ฟผ๋ฆฌ : ์ฃผ๋กœ ๋ฉ”์ธ์ฟผ๋ฆฌ์— ๊ฐ’์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ

์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ : SELECT์ ˆ์— ์‚ฌ์šฉ๋œ ์„œ๋ธŒ์ฟผ๋ฆฌ

FROM์ ˆ์˜ ์„œ๋ธŒ์ฟผ๋ฆฌ : ๋™์ ๋ทฐ, ์ธ๋ผ์ธ๋ทฐ

View : ๋‹จ์ง€ ์ •์˜๋งŒ ๊ฐ€์ง. ์‹คํ–‰์‹œ์ ์— ์งˆ์˜ ์žฌ์ž‘์„ฑ, ๊ตฌ์กฐ ๋ณ€๊ฒฝ๋˜๋„ ํ”„๋กœ๊ทธ๋žจ ๋ณ€๊ฒฝ ์•ˆํ•ด๋„๋จ, ๋ณด์•ˆ ๊ฐ•ํ™” ๋ชฉ์  ์‚ฌ์šฉํ•˜๊ธฐ๋„ํ•จ, ์‹ค์ œ ๋ฐ์ดํ„ฐ ์ €์žฅํ•˜๋Š” ๋ทฐ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ ์ง€์›ํ•˜๋Š” DBMS๋„ ์žˆ์Œ

ROLLUP : ํ•จ์ˆ˜ ์ธ์ž๋กœ ์ฃผ์–ด์ง„ ์ปฌ๋Ÿผ์˜ ์ˆœ์„œ์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ ๋‹ฌ๋ผ์ง€๋ฏ€๋กœ ์ปฌ๋Ÿผ ์ˆœ์„œ ์ค‘์š”

ROLLUP  ๊ณผ CUBE ๋น„๊ต

ROLLUP (A,B)  -> (A,B), (A), ์ „์ฒด    //๊ทธ๋ž˜์„œ ์ปฌ๋Ÿผ ์ˆœ์„œ ์ค‘์š”
CUBE (A,B)  -> (A,B), (A), (B) ์ „์ฒด

GROUP BY ROLLUP (A,B) 
== GROUP BY GRUPING SETS(  (A,B), A, ( )  )

GROUP BY CUBE (A,B) 
==  GROUP BY GRUPING SETS(  (A,B), A, B, ( )  )

๋‹ค์ฐจ์› ์ง‘๊ณ„ ํ•จ์ˆ˜ ๊ฒฐ๊ณผ๋ฅผ ์ผ๋ฐ˜ ๊ทธ๋ฃน ํ•จ์ˆ˜๋กœ๋„ ํ‘œํ˜„ ๊ฐ€๋Šฅํ•จ

์ง‘๊ณ„ํ•จ์ˆ˜๋“ค์€ ์ง‘๊ณ„๋œ ์ปฌ๋Ÿผ ์ด์™ธ์˜ ๋Œ€์ƒ ์ปฌ๋Ÿผ ๊ฐ’์€ NULL๋กœ ๋ฐ˜ํ™˜

์œˆ๋„์šฐ ํ•จ์ˆ˜๋Š” ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌํ•จ์ˆ˜์ด๋ฏ€๋กœ ๊ฒฐ๊ณผ๊ฑด์ˆ˜๊ฐ€ ์ค„์–ด๋“ค์ง€ ์•Š์Œ

LAGํ•จ์ˆ˜(์ฝํžŒ ๋ฐ์ดํ„ฐ ์ด์ „ ๊ฐ’) LEADํ•จ์ˆ˜(์ฝํž ๋ฐ์ดํ„ฐ ์ดํ›„ ๊ฐ’)

PL/SQL : ๋ณ€์ˆ˜์ƒ์ˆ˜ ์ด์šฉํ•ด์„œ WHERE์ ˆ ์กฐ๊ฑด์— ๋Œ€์ž…๊ฐ€๋Šฅ, ํ”„๋กœ์ฅฌ์„œ ํŠธ๋ฆฌ๊ฑฐ ๊ฐ์ฒด ์ž‘์„ฑ ๊ฐ€๋Šฅ, ์ž‘์„ฑ์ž ๊ธฐ์ค€์œผ๋กœ ํŠธ๋žœ์žญ์…˜ ๋ถ„ํ•  ๊ฐ€๋Šฅ, Procedure๋‚ด๋ถ€์˜ ์ ˆ์ฐจ์ ์ฝ”๋“œ๋Š” PL/SQL์—”์ง„์ด ์ฒ˜๋ฆฌํ•˜๊ณ  ์ผ๋ฐ˜์  SQL๋ฌธ์žฅ์€ SQL์‹คํ–‰๊ธฐ๊ฐ€ ์ฒ˜๋ฆฌ

๋™์ SQL, DDL๋ฌธ์žฅ ์‹คํ–‰ ์‹œ์—๋Š” execute immediate ์‚ฌ์šฉ

์ €์žฅ ๋ชจ๋“ˆ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ : ์ €์žฅํ˜• ํ”„๋กœ์‹œ์ ธ(SQL์„ ๋กœ์ง๊ณผ ํ•จ๊ป˜ DB๋‚ด์— ์ €์žฅํ•œ ๋ช…๋ น๋ฌธ ์ง‘ํ•ฉ), ์ €์žฅํ˜•ํ•จ์ˆ˜=์‚ฌ์šฉ์ž์ •์˜ํ•จ์ˆ˜(๋‹ค๋ฅธ SQL๋ฌธ์„ ํ†ตํ•ด ํ˜ธ์ถœ๋จ. ๋ณด์กฐ์ ์—ญํ• ), ํŠธ๋ฆฌ๊ฑฐ(์ž๋™๋™์ž‘๋˜๋Š” ์ž‘์„ฑํ”„๋กœ๊ทธ๋žจ)

TRIGGER์˜ ์šฉ๋„ : ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ๊ณผ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•จ

TRIGGER : ๋Œ€์ƒ(ํ…Œ์ด๋ธ”, ๋ทฐ, DB์ž‘์—…), ์ข…๋ฅ˜(์ „์ฒด ํŠธ๋žœ์žญ์…˜ ์ž‘์—…์— ๋Œ€ํ•ด, ๊ฐ ํ–‰์— ๋Œ€ํ•ด)

ํ”„๋กœ์‹œ์ € Create Procedure ๋ฌธ๋ฒ• Execute ๋ช…๋ น์–ด๋กœ ์‹คํ–‰ commit, rollback O
ํŠธ๋ฆฌ๊ฑฐ Create Trigger ๋ฌธ๋ฒ• ์ƒ์„ฑ ํ›„ ์ž๋™์‹คํ–‰ commit, rollback X