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 |
'๐๏ธ ๊ธฐ์ ์ฌํ > SQLD' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๊ธฐ] sqld 51ํ์ฐจ ์ํ ์์ ํ๊ธฐ (0) | 2023.11.18 |
---|---|
[SQLD๋ฒผ๋ฝ์น๊ธฐ] ์ถ๊ฐ ์ค๋ต๋ ธํธ (0) | 2023.11.17 |
[SQLD๋ฒผ๋ฝ์น๊ธฐ] SQL ์๊ฒฉ๊ฒ์ ์ค์ ๋ฌธ์ ์ค๋ต๋ ธํธ(2๊ณผ๋ชฉ-3) (2) | 2023.11.17 |
[SQLD๋ฒผ๋ฝ์น๊ธฐ] SQL ์๊ฒฉ๊ฒ์ ์ค์ ๋ฌธ์ ์ค๋ต๋ ธํธ(2๊ณผ๋ชฉ-1) (0) | 2023.11.17 |
[SQLD๋ฒผ๋ฝ์น๊ธฐ] SQL ์๊ฒฉ๊ฒ์ ์ค์ ๋ฌธ์ ์ค๋ต๋ ธํธ(1๊ณผ๋ชฉ) (1) | 2023.11.17 |