์ 1์ ์๋ธ์ฟผ๋ฆฌ
1. ์๋ธ์ฟผ๋ฆฌ
- ํ๋์ SQL๋ฌธ ์์ SQL ๋ฌธ
- ๋จ์ผํ ๋๋ ๋ณต์ํ ๋น๊ต ์ฐ์ฐ์์ ํจ๊ป ์ฌ์ฉ ๊ฐ๋ฅ
- ์๋ธ์ฟผ๋ฆฌ์์ ORDER BY ์ฌ์ฉ ๋ถ๊ฐ(๋ฉ์ธ์ฟผ๋ฆฌ์ ๋งจ ๋ง์ง๋ง ๋ถ๋ถ์๋ง ์์น ๊ฐ๋ฅ)
- ์๋ธ์ฟผ๋ฆฌ๋ ๋ฉ์ธ์ฟผ๋ฆฌ์ ํ
์ด๋ธ์ ์นผ๋ผ ์ฌ์ฉ ๊ฐ๋ฅ(๋ฉ์ธ์ฟผ๋ฆฌ์์ ์๋ธ์ฟผ๋ฆฌ์ ์นผ๋ผ ์ฌ์ฉ๋ถ๊ฐ)
- ์๋ธ์ฟผ๋ฆฌ๊ฐ SQL ๋ฌธ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ณณ
- SELECT, FROM, WHERE, HAVING, ORDER BY์
- INSERT ๋ฌธ์ VALUES์
- UPDATE๋ฌธ์ SET์
- DELECT๋ฌธ ์ฌ์ฉ ๋ถ๊ฐ
2. ๋์๋ฐฉ์์ ๋ฐ๋ฅธ ๋ถ๋ฅ
- Un-Correlated(๋น์ฐ๊ด) ์๋ธ์ฟผ๋ฆฌ: ์๋ธ์ฟผ๋ฆฌ๊ฐ ๋ฉ์ธ์ฟผ๋ฆฌ ์นผ๋ผ์ ๊ฐ์ง๊ณ ์์ง ์์ ํํ์ ์๋ธ์ฟผ๋ฆฌ. ๋ฉ์ธ์ฟผ๋ฆฌ์ ๊ฐ(์๋ธ์ฟผ๋ฆฌ๊ฐ ์คํ๋ ๊ฒฐ๊ณผ)์ ์ ๊ณตํ๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ์ฃผ๋ก ์ฌ์ฉ
- Correlated(์ฐ๊ด) ์๋ธ์ฟผ๋ฆฌ: ์๋ธ์ฟผ๋ฆฌ๊ฐ ๋ฉ์ธ์ฟผ๋ฆฌ ์นผ๋ผ์ ๊ฐ์ง๊ณ ์๋ ํํ์ ์๋ธ์ฟผ๋ฆฌ. ์ผ๋ฐ์ ์ผ๋ก ๋ฉ์ธ์ฟผ๋ฆฌ๊ฐ ๋จผ์ ์ํ๋์ด ์ฝํ์ง ๋ฐ์ดํฐ๋ฅผ ์๋ธ์ฟผ๋ฆฌ์์ ์กฐ๊ฑด์ด ๋ง๋์ง ํ์ธํ๊ณ ์ ํ ๋ ์ฃผ๋ก ์ฌ์ฉ
3. ๋ฐํ๋๋ ๋ฐ์ดํฐ ํํ์ ๋ฐ๋ฅธ ๋ถ๋ฅ
- Single Row ์๋ธ์ฟผ๋ฆฌ(๋จ์ผ ํ ์๋ธ์ฟผ๋ฆฌ): ์๋ธ์ฟผ๋ฆฌ ์คํ ๊ฒฐ๊ณผ๊ฐ ํญ์ 1๊ฑด ์ดํ์ธ ์๋ธ์ฟผ๋ฆฌ. ๋จ์ผ ํ ๋น๊ต ์ฐ์ฐ์(=, <, <=, >, >=, <>)์ ํจ๊ป ์ด์ฉ
- Multi Row ์๋ธ์ฟผ๋ฆฌ(๋ค์คํ ์๋ธ์ฟผ๋ฆฌ): ์คํ ๊ฒฐ๊ณผ๊ฐ ์ฌ๋ฌ ๊ฑด์ธ ์๋ธ์ฟผ๋ฆฌ. ๋ค์ค ํ ๋น๊ต ์ฐ์ฐ์(IN, ALL, ANY, SOME, EXISTS)์ ํจ๊ป ์ด์ฉ
- IN: ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ๊ฐ์ด ํฌํจ๋๋ ์ง ํ์ธ
- ALL: ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ์กด์ฌํ๋ ๋ชจ๋ ๊ฐ์ ๋ง์กฑํ๋ ์กฐ๊ฑด
- ANY: ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ์กด์ฌํ๋ ์ด๋ ํ๋์ ๊ฐ์ด๋ผ๋ ๋ง์กฑํ๋ ์กฐ๊ฑด
- EXISTS: ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ง์กฑํ๋ ๊ฐ์ด ์กด์ฌํ๋์ง ์ฌ๋ถ ํ์ธ ์กฐ๊ฑด
- SQL>> โ์ ์๋ค ์ค์ โ์ ํ์โ๋ผ๋ ์ ์๊ฐ ์์๋์ด ์๋ ํ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ผโโจ
SELECT REGION_NAME ์ฐ๊ณ ์ง๋ช , TEAM_NAME ํ๋ช , E_TEAM_NAME ์๋ฌธํ๋ช โจFREOM TEAM โจ
WHERE TEAM_ID IN (SELECT TEAM_ID FROM PLAYER WHERE PLAYER_NAME=โ์ ํ์โ)
ORDER BY TEAM_NAME;
4. ๊ทธ ๋ฐ์ ์์น์์ ์ฌ์ฉํ๋ ์๋ธ์ฟผ๋ฆฌ
- ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ(Scalar Subquery) โ SELECT ์ ์ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉ
- ํ ํ, ํ ์นผ๋ผ๋ง์ ๋ฐํ
- ๊ฐ ํ๋๋ฅผ ๋ฐํํ๋ ์๋ธ์ฟผ๋ฆฌ, SELECT์ ์ ์ฌ์ฉํ๋ ์๋ธ์ฟผ๋ฆฌ
- ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ ๋์ JSON์ผ๋ก ๋์ผํ ๊ฒฐ๊ณผ ์ถ์ถ ๊ฐ๋ฅ
- ๋ทฐ
- ๊ฐ์์ ํ ์ด๋ธ, FROM์ ์ ์ฌ์ฉํ๋ ๋ทฐ๋ ์ธ๋ผ์ธ ๋ทฐ๋ผ๊ณ ํจ. ์ค์ ๋ฐ์ดํฐX
- SQL์ด ์คํ๋ ๋๋ง ์์์ ์ผ๋ก ์์ฑ๋๋ ๋์ ๋ทฐ (์ผํ์ฑ)
- ์ผ๋ฐ ๋ทฐ๊ฐ ์ ์ ๋ทฐ, ์ธ๋ผ์ธ ๋ทฐ๋ ๋์ ๋ทฐ
- ์ฅ์
- ๋ ๋ฆฝ์ฑ: ํ ์ด๋ธ ๊ตฌ์กฐ ๋ณ๊ฒฝ ์๋ ๋ฐ์
- ํธ๋ฆฌ์ฑ: ์ฟผ๋ฆฌ๋ฅผ ๋จ์ํ๊ฒ ์์ฑ ๊ฐ๋ฅ
- ๋ณด์์ฑ: ๋ทฐ๋ฅผ ์์ฑํ ๋ ์นผ๋ผ์ ์ ์ธํ ์ ์์
์ 2์ ์งํฉ ์ฐ์ฐ์
1. ์งํฉ ์ฐ์ฐ์
- ๋ ๊ฐ ์ด์์ ํ ์ด๋ธ์์ JOIN์ ์ฌ์ฉํ์ง ์๊ณ , ์ฐ๊ด๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๋ฐฉ๋ฒ
- ์งํฉ ์ฐ์ฐ์๋ 2๊ฐ ์ด์์ ์ง์ ๊ฒฐ๊ณผ๋ฅผ ํ๋์ ๊ฒฐ๊ณผ๋ก ๋ง๋ฌ
- SELECT์ ์ ์ปฌ๋ผ ์๊ฐ ๋์ผํด์ผ ํ๊ณ , ๋์ผ ์์น ๋ฐ์ดํฐ ํ์ ์ด ์ํธ ํธํ ๊ฐ๋ฅํด์ผ ํ
2. ์งํฉ์ฐ์ฐ์ ์ข ๋ฅ
- UNION: ์ฌ๋ฌ ๊ฐ์ SQL๋ฌธ์ ๊ฒฐ๊ณผ์ ๋ํ ํฉ์งํฉ. ๋ชจ๋ ์ค๋ณต๋ ํ์ ํ๋์ ํ์ผ๋ก ๋ง๋ฌ
- UNION ALL: ์ค๋ณต ํ๋ ๊ทธ๋๋ก ๊ฒฐ๊ณผ๋ก ํ์(๋จ์ํ ๊ฒฐ๊ณผ๋ง ํฉ์ณ๋์ ๊ฒ).
- INTERSECT: ์ฌ๋ฌ ๊ฐ์ SQL ๋ฌธ์ ๊ฒฐ๊ณผ์ ๋ํ ๊ต์งํฉ, ์ค๋ณต๋ ํ์ ํ๋์ ํ์ผ๋ก ๋ง๋ฌ
- EXCEPT: ์์ SQL ๋ฌธ์ ๊ฒฐ๊ณผ์์ ๋ค์ SQL๋ฌธ ๊ฒฐ๊ณผ์ ๋ํ ์ฐจ์งํฉ. ์ค๋ณต๋ ํ์ ํ๋์ ํ์ผ๋ก ๋ง๋ฌ
์ 3์ ๊ทธ๋ฃน ํจ์
1. ๋ฐ์ดํฐ๋ถ์ ๊ฐ์
- ANSI/ISO SQL ํ์ค์ ๋ฐ์ดํฐ ๋ถ์์ ์ํด ๋ค์ ์ธ ๊ฐ์ง ํจ์๋ฅผ ์ ์ํจ
- AGGREGATE FUNTION(์ง๊ณ), GROUP FUNCTION(๊ทธ๋ฃน), WINDOW FUNCTION(์๋์ฐ)
- NULL ๋นผ๊ณ ์ง๊ณ, ๊ฒฐ๊ณผ๊ฐ ์๋ ํ ์ถ๋ ฅ ์ ํจ
2. ROLLUP ํจ์
- ROLLUP์ ์ง์ ๋ Grouping Columns์ List๋ Subtotal์ ์์ฑํ๊ธฐ ์ํด ์ฌ์ฉ
- Grouping Columns์ ์๋ฅผ N์ด๋ผ๊ณ ํ์ ๋ N+1 Level์ Subtotal์ด ์์ฑ
- GROUP BY๋ก ๋ฌถ์ ์นผ๋ผ์ ์๊ณ ๊ณ์ฐ, ๊ณ์ธต ๊ตฌ์กฐ
- GROUP BY ์นผ๋ผ ์์๊ฐ ๋ฐ๋๋ฉด ๊ฒฐ๊ณผ ๊ฐ ๋ฐ๋
- GROUP BY์ ํ์ฅ๋ ํํ
- GROUP BY ROLLUP(A): ์ ์ฒด ํฉ๊ณ, ์นผ๋ผ A ์๊ณ
- GROUP BY ROLLUP(A, B): ์ ์ฒด ํฉ๊ณ, ์นผ๋ผ A ์๊ณ, ์นผ๋ผ (A, B) ์กฐํฉ ์๊ณ
- GROUP BY ROLLUP(A, B, C): ์ ์ฒด ํฉ๊ณ, ์นผ๋ผ A ์๊ณ, ์นผ๋ผ (A, B) ์กฐํฉ ์๊ณ, (A, B, C) ์กฐํฉ ์๊ณ
- GROUP BY ROLLUP(A, (B, C): ์ ์ฒด ํฉ๊ณ, ์นผ๋ผ A ์๊ณ, (A, (B, C)) ์กฐํฉ ์๊ณ
- GROUP BY A, ROLLUP(B): A๊ทธ๋ฃน๋ณ ์ง๊ณ, A๊ทธ๋ฃน ๋ด๋ถ์์ B์นผ๋ผ๋ณ ์ง๊ณ
- SQL>> โ๋ถ์๋ช
๊ณผ ์
๋ฌด๋ช
์ ๊ธฐ์ค์ผ๋ก ์ฌ์์์ ๊ธ์ฌ ํฉ์ ์ง๊ฒํ ์ผ๋ฐ์ ์ธ GROUP BY SQL ๋ฌธ์ฅ์ ์ํโ
SELECT DNAME, JOB, COUNT(*) โTotal Emplโ, SUM(SAL) โTotal Salโ
FROM EMP, DEPT
WHERE DEPT.DEPTNO = EMP.DEPTNO GROUP BY DNAME.JOB;
3. CUBE ํจ์
- ๊ฒฐํฉ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฐ์ ๋ํ ๋ค์ฐจ์ ์ง๊ณ, ์์ ๋ฌด๊ด
- GROUP BY CUBE(A): ์ ์ฒด ํฉ๊ณ, ์นผ๋ผ A ์๊ณ
- GROUP BY CUBE(B): ์ ์ฒด ํฉ๊ณ, ์นผ๋ผ A ์๊ณ, ์นผ๋ผ B ์๊ณ, ์นผ๋ผ (A, B) ์กฐํฉ ์๊ณ
4. GROUPING SETS ํจ์
- ํน์ ํญ๋ชฉ์ ๋ํ ์๊ณ ๊ณ์ฐ, GROUP BY ์นผ๋ผ ์์์ ๋ฌด๊ดํ๊ฒ ๊ฐ๋ณ์ ์ผ๋ก ์ฒ๋ฆฌ
- ๋ด๊ฐ ๋ณด๊ณ ์ถ์ ๊ฒ๋ง ์๊ณ๋ฅผ ์์ฑ
- GROUP BY GROUPING SETS(A): ์นผ๋ผ A ์๊ณ
- GROUP BY GROUPING SETS(A, B): ์นผ๋ผ A ์๊ณ, ์นผ๋ผ B ์๊ณ
- GROUP BY GROUPING SETS((A, B)): ์นผ๋ผ (A, B) ์๊ณ
์ 4์ ์๋์ฐ ํจ์
1. ์๋์ฐ ํจ์ (WINDOW FUNCTION)
- ์ฌ๋ฌ ํ ๊ฐ์ ๊ด๊ณ ์ ์ ํจ์, ์ค์ฒฉ ๋ถ๊ฐ
2. ์๋์ฐ ํจ์ ์ข ๋ฅ
- ์์ ํจ์
- RANK: ์ค๋ณต ์์ ํฌํจ
- DENSE_RANK: ์ค๋ณต ์์ ๋ฌด์ (์ค๊ฐ ์์๋ฅผ ๋น์ฐ์ง ์์)
- ROW_NUMBER: ๋จ์ํ ํ ๋ฒํธ ํ์, ๊ฐ์ ๋ฌด๊ดํ๊ฒ ๊ณ ์ ํ ์์ ๋ถ์ฌ
SQL>> โ์ฌ์ ๋ฐ์ดํฐ์์ ๊ธ์ฌ๊ฐ ๋์ ์์์ JOB ๋ณ๋ก ๊ธ์ฌ๊ฐ ๋์ ์์๋ฅผ ๊ฐ์ด ์ถ๋ ฅํ๋ผโโจ
SELECT JOB, ENAME, SAL, RANK( )โจ
OVER (ORDER BY SAL DESC) ALL_RANK, RANK( )โจ
OVER (PARTITION BY JOB ORDER BY SAL DESC) JOB_RANK FROM EMP;
- ์๋์ฐ ์ผ๋ฐ ์ง๊ณ ํจ์: SUM, MAX, MIN, AVG ๋ฑ
- ํ ์์ ํจ์
- FIRST_VALUE / LAST_VALUE ํจ์: ์ฒซ ๊ฐ / ๋ ๊ฐ
- LAG / LEAD: ์ด์ ๊ฐ / ์ดํ ๊ฐ
- LEAD(E, A)๋ E์์ A๋ฒ์งธ ํ์ ๊ฐ์ ํธ์ถํ๋ ํํ๋ก๋ ์ฐ์ (A์ ๊ธฐ๋ณธ๊ฐ์ 1)
- ๋น์จ ํจ์
- RATIO_TO_REPORT: ์ ์ฒด SUM ๊ฐ์ ๋ํ ํ๋ณ ๊ฐ๋ผ ๊ฐ์ ๋ฐฑ๋ถ์จ์ ์์์ ๋ฐํ
- PERCENT_RANK: ์ ์ผ ๋จผ์ ๋์ค๋ ๊ฒ 0, ์ ์ผ ๋ฆ๊ฒ ๋์ค๋ ๊ฒ 1, ํ์ ์์๋ณ ๋ฐฑ๋ถ์จ
- CUME_DIST: ์ ์ฒด ๊ฑด์์์ ํ์ฌ ํ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๊ฑด์์ ๋ํ ๋์ ๋ฐฑ๋ถ์จ
- NTILE: ์ ์ฒด ๊ฑด์๋ฅผ ARGUMENT ๊ฐ์ผ๋ก N ๋ฑ๋ถํ ๊ฒฐ๊ณผ
3. ๋ฌธ๋ฒ
- SELECT ์๋์ฐํจ์ (A) OVER (PARTITION BY ์นผ๋ผ ORDER BY์นผ๋ผ ์๋์์ ) FROM ํ ์ด๋ธ๋ช

์ 5์ TOP N ์ฟผ๋ฆฌ
1. TOP N ์ฟผ๋ฆฌ
- ํ์ด์ง ์ฒ๋ฆฌ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ํํ๊ธฐ ์ํด ์ฌ์ฉ
- ์ ์ฒด ๊ฒฐ๊ณผ์์ ํน์ N ๊ฐ ์ถ์ถ
- ์๋์ฐ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ N ๊ฐ์ ๋ํ ๊ฐ์ ์ถ์ถํ ์ ์์ผ๋ ๋จ์ผ ์ฟผ๋ฆฌ๋ก ํํ์ด ๋ถ๊ฐ
- ์๋์ฐ ํจ์์ ๊ฒฐ๊ณผ๋ฅผ ์๋ธ์ฟผ๋ฆฌ๋ก ์ฌ์ฉํ์ฌ ํํฐ๋งํด์ผ ํจ
- ORDER BY: ๋ฐ์ดํฐ ์ ๋ ฌ
- LIMIT: ์ ๋ ฌ๋ ๊ฒฐ๊ณผ์์ ์์ N๊ฐ ํ ์ ํ
- FETCH: ๊ฒฐ๊ณผ ์งํฉ์์ ์์ N๊ฐ ํ ์ ํ
- TOP(n) WITH TIES: ๊ฐ์ด ๋์ผํ ๊ฒฝ์ฐ ํจ๊ป ์ถ๋ ฅ
2. Top N ์ฟผ๋ฆฌ ์ข ๋ฅ
- ROWNUM (Oracle)
- Oracle์์ ์์๊ฐ ๋์ N๊ฐ์ ๋ก์ฐ๋ฅผ ์ถ์ถํ๊ธฐ ์ํด ORDER BY ์ ๊ณผ WHERE ์ ์ ROWNUM ์กฐ๊ฑด์ ๊ฐ์ด ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์ด ๋ ์กฐ๊ฑด์ผ๋ก๋ ์ํ๋ ๊ฒฐ๊ณผ ์ป์ ์ ์์
- ์ ๋ ฌ์ ๋จผ์ ํ๊ณ ๋์ ROWNUM ์ ์ํ
- ์ถ๋ ฅ๋ ๋ฐ์ดํฐ ๊ธฐ์ค์ผ๋ก ํ ๋ฒํธ ๋ถ์ฌ
- ์ ๋์ ์ธ ํ ๋ฒํธ๊ฐ ์๋ ๊ฐ์์ ๋ฒํธ์ด๋ฏ๋ก ํน์ ํ์ ์ง์ ํ ์ ์์ ( โ=โ ์ฐ์ฐ ๋ถ๊ฐ)
- ์ถ๋ ฅ๋๋ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ๋ฐ๋. ์ค์ ๋ก๋ ์กด์ฌํ์ง ์๋ ๊ฐ์ง ์ปฌ๋ผ.
- ์ฒซ๋ฒ์งธ ํ์ด ์ฆ๊ฐํ ์ดํ ํ ๋น๋๋ฏ๋ก โ>โ ์ฐ์ฐ ์ฌ์ฉ ๋ถ๊ฐ โ 1์ ํฌํจํด์ผ ํจ (> 0 ์ ๊ฐ๋ฅ, โฅ 1 ๊ฐ๋ฅ)
- ํญ์ < ์กฐ๊ฑด์ด๋ <= ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ค.

- TOP ( )
- SQL Server๋ TOP ์กฐ๊ฑด์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ณ๋ ์ฒ๋ฆฌ ์์ด ๊ด๋ จ ORDER BY ์ ์ ๋ฐ์ดํฐ ์ ๋ ฌ ํ ์ํ๋ ์ผ๋ถ ๋ฐ์ดํฐ๋ง ์ฝ๊ฒ ์ถ๋ ฅ ๊ฐ๋ฅ
- TOP ์ ์ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ ์งํฉ์ ๋ฐํ๋๋ ํ์ ์๋ฅผ ์ ํ
- WITH TIES ์ต์ ์ ORDER BY ์ ์ ์กฐ๊ฑด ๊ธฐ์ค์ผ๋ก TOP N ์ ๋ง์ง๋ง ํ์ผ๋ก ํ์๋๋ ์ถ๊ฐ ํ์ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ ๊ฒฝ์ฐ N+ ๋์ผ ์ ๋ ฌ ์์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ ๋ฐํํ๋๋ก ์ง์ ํ๋ ์ต์ ์.

- FETCH ์
- ์ถ๋ ฅ๋ ํ์ ์๋ฅผ ์ ํํ๋ ์
- ๋จ์ผ ์ฟผ๋ฆฌ๋ก๋ ์ ๋ ฌ ์์๋๋ก์ ์์ N ๊ฐ์ ๋ํ ๊ฐ์ ์ถ์ถํ ์ ์์.
- ORACLE 12 C ์ด์๋ถํฐ ์ ๊ณต, SQL server ์ง์
- ORDER BY ์ ๋ค์ ์ฌ์ฉ
- ORDER BY ์ปฌ๋ผ OFFSET N {ROW | ROWS} โจ
FETCH {FIRST | NEXT} N {ROW | ROWS} ONLY- OFFSET : ๊ฑด๋๋ธ ํ์ ์
- FIRST : OFFSET ์ ์ฐ์ง ์์์ ๋๋ ์ฒ์๋ถํฐ N ํ ์ถ๋ ฅ
- NEXT : OFFSET ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ ์ธํ ํ ๋ค์๋ถํฐ N ํ ์ถ๋ ฅ

์ 6์ ๊ณ์ธตํ ์ง์์ ์ ํ ์กฐ์ธ
1. ๊ณ์ธตํ ์ง์
- ๊ณ์ธตํ ์ง์: ๋์ผ ํ ์ด๋ธ์ ๊ณ์ธต์ ์ผ๋ก ์/ํ์ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ ๋ฐ์ดํฐ
- ํ ์ด๋ธ์ ๊ณ์ธตํ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ธฐ ์ํด ์ฌ์ฉ
- ์ํฐํฐ๋ฅผ ์ํ๊ด๊ณ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ก ์ค๊ณํ ๊ฒฝ์ฐ ๊ณ์ธตํ ๋ฐ์ดํฐ ๋ฐ์ (์กฐ์ง, ์ฌ์, ๋ฉ๋ด ๋ฑ)
- Oracle ๊ณ์ธตํ ์ง์

- START WITH: ๋ฐ์ดํฐ ์ ๊ฐ ์์(๋ฐ์ดํฐ ์ ๊ฐ: ๋ฐ์ดํฐ ์ฐพ์๊ฐ๊ธฐ)
- CONNECT BY: ์์ ๋ฐ์ดํฐ ์ง์
- PRIOR: CONNECT BY ์ ์์ ์ฌ์ฉ (SELECT, WHERE์ ์์๋ ์ฌ์ฉ ๊ฐ๋ฅ)
- PRIOR ์์=๋ถ๋ชจ: [๋ถ๋ชจโ์์] ์๋ฐฉํฅ ์ ๊ฐ, ๋ฆฌํ(์ตํ์) = 1
- PRIOR ๋ถ๋ชจ=์์: [์์โ๋ถ๋ชจ] ์ญ๋ฐฉํฅ ์ ๊ฐ, ๋ฃจํธ(์ต์์)=1
- NOCYCLE: ์ด๋ฏธ ๋ํ๋ ๋์ผํ ๋ฐ์ดํฐ๊ฐ ๋ค์ ๋ํ๋๋ ๊ฒ์ CYCLE์ด๋ผ๊ณ ํ๋๋ฐ, ์ฌ์ดํด์ด ๋ฐ์ํ ๋ฐ์ดํฐ๋ ๋ฐํ์ ์ค๋ฅ ๋ฐ์ โ
- NOCYCLE ์ถ๊ฐ โ ์ฌ์ดํด ๋ฐ์ ์ดํ ๋ฐ์ดํฐ ์ ๊ฐX
- ORDER SIBLINGS BY: ๋์ผํ LEVEL์ ๋ ธ๋(ํ์ ๋ ธ๋) ์ฌ์ด์์ ์ ๋ ฌ ์ํ
- WHERE: ๋ชจ๋ ๋ฐ์ดํฐ ์ ๊ฐ๋ฅผ ์ํํ๊ณ ์ง์ ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฐ์ดํฐ๋ง ์ถ์ถ
- ๊ณ์ธตํ ์ง์์์ ์ฌ์ฉํ๋ ๊ฐ์ ์ปฌ๋ผ
- LEVEL: ์ ๊ฐ ๊ณผ์ ์์ ๋ฃจํธ ๋ฐ์ดํฐ๋ฉด 1, ๊ทธ ํ์ ๋ฐ์ดํฐ๋ฉด 0. ๋ฃจํ์์ ๋ฆฌํ๋ก ๋ด๋ ค๊ฐ ๋๋ง๋ค 1์ฉ ์ฆ๊ฐ
- CONNECT_BY_ISLEAF: ์ ๊ฐ ๊ณผ์ ์์ ํด๋น ๋ฐ์ดํฐ๊ฐ ๋ฆฌํ๋ฐ์ดํฐ๋ฉด 1, ์๋ 0
- CONNECT_BY_ISCYCLE: ์ ๊ฐ ๊ณผ์ ์์ ํด๋น ๋ฐ์ดํฐ๊ฐ ์กฐ์ ๋ฐ์ดํฐ๋ก์ ์กด์ฌํ๋ฉด(์์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด) 1, ์๋ 0, CYCLE ๊ธฐ๋ฅ ์ฌ์ฉํ์ ๋๋ง ํ์ธ ๊ฐ๋ฅ
- ๊ณ์ธตํ ์ง์์์ ์ฌ์ฉํ๋ ํจ์
- SYS_CONNECT_BY_PATH: ๋ฃจํธ ๋ฐ์ดํฐ๋ก๋ถํฐ ํ์ฌ ์ ๊ฐํ ๋ฐ์ดํฐ๊น์ง์ ๊ฒฝ๋ก ํ์โจ์ฌ์ฉ๋ฒ: SYS_CONNECT_BY_PATH(์นผ๋ผ, ๊ฒฝ๋ก๋ถ๋ฆฌ์)
- CONNET_BY_ROOT: ํ์ฌ ์ ๊ฐํ ๋ฐ์ดํฐ์ ๋ฃจํธ ๋ฐ์ดํฐ ํ์(๋จํญ ์ฐ์ฐ์์)โจ์ฌ์ฉ๋ฒ: CONNET_BY_ROOT ์นผ๋ผ
- SQL Server ๊ณ์ธตํ ์ง์
- CTF(Common Table Expression)๋ก ์ฌ๊ท ํธ์ถํด ์์์์ ํ์ ๋ฐฉํฅ ์ ๊ฐ
- โโ ์ต์ปค ๋ฉค๋ฒ๋ฅผ ์คํํ์ฌ ๊ธฐ๋ณธ ๊ฒฐ๊ณผ ์งํฉ์ ๋ง๋ค๊ณ ์ดํ ์ฌ๊ท ๋ฉค๋ฒ๋ฅผ ์ง์์ ์ผ๋ก ์คํํจ.

2. ์ ํ ์กฐ์ธ
- ๋์ผ ํ ์ด๋ธ ์ฌ์ด์ ์กฐ์ธ, ๋ฐ๋์ ํ ์ด๋ธ ๋ณ์นญ(Alias)์ ์ฌ์ฉํด์ผ ํจ

์ 7์ PIVOT์ ๊ณผ UNPIVOT์
- ์นผ๋ผ์ ๊ธฐ์ค์ผ๋ก ์ฌ๋ฌ ๊ฐ์ ํ์ผ๋ก ๋๋ ๋ฐ์ดํฐ๋ฅผ ํ๊ณผ ์ด์ ์ ํํด ํ ์ด๋ธ์ ์ฌ๊ตฌ์ฑํด ๋ณด๊ธฐ ํธํ๋๋ก ๋ง๋๋ ๊ฒ
1. PIVOT ์
- ํน์ ํ์ ๊ฐ์ ์๋ก์ด ์ด๋ก ๋ฐํํด ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์์ฝํ๋๋ฐ ์ฌ์ฉ
- ํ์ ์ด๋ก ๋ฐ๊ฟ, ์ง์ ๋ ์นผ๋ผ์ ๊ฐ ํ ์์ฑ๊ฐ๋ค์ด ์๋ก์ด ์นผ๋ผ์ ํค๋๊ฐ ๋๊ณ ์ด์ ๋ง๊ฒ ์ ์ฒด ์์ฑ๊ฐ ์ฌ๋ฐฐ์น
2. UNPIVOT ์
- PIVOT๋ ์์ฝ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์๋์ ํ ํํ๋ก ๋ณํ, ์ด ๊ณผ์ ์์ ์ฌ๋ฌ ์ด์ด ํ๋์ ์ด๋ก ํฉ์ณ์ง๊ณ ๊ฐ ๊ฐ์ ๋ณ๋์ ํ์ผ๋ก ํ์
- ์นผ๋ผ ํค๋๋ค์ด ํ ์นผ๋ผ์ ๊ฐ ํ ์์ฑ๊ฐ์ด ๋๊ณ ์ด์ ๋ง๊ฒ ์ ์ฒด ์์ฑ๊ฐ ์ฌ๋ฐฐ์น
3. ์์

- PIVOT ์

- sales_data ํ ์ด๋ธ์์ ๊ณ ๊ฐ๋ณ๋ก Product A, Product B, Product C์ ํ๋งค๋์ ์ง๊ณ
- ์ง๊ณ๊ณผ์ ์์ SUM ํจ์ ์ฌ์ฉํด ๊ฐ ์ ํ์ ์ด ํ๋งค๋ ๊ณ์ฐ, ์ด๋ฅผ ๊ฐ๊ฐ์ ์ด๋ก ํ์
- UNPIVOT ์

- [Product A], [Product B], [Product C] ์ด์ด ํ๋์ Product์ด๋ก ํตํฉ, ๊ฐ ๊ฐ์ Quantity ์ด์ ์์น
์ 8์ ์ ๊ท ํํ์
1. ๋ฉํ ๋ฌธ์
- ๋ฌธ์ ๊ทธ ์์ ์ด ๊ฐ์ง ์๋ฏธ๊ฐ ์๋๋ผ ๋ค๋ฅธ ์๋ฏธ๋ก ์ฌ์ฉ๋๋ ๋ฌธ์

2. ๋ฆฌํฐ๋ด ๋ฌธ์
- ๋ฌธ์ ์์ฒด๊ฐ ๊ฐ์ง ์๋ฏธ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉ๋๋ ๋ฌธ์, ์ ๊ทํํ์์์ ํจํด ๋งค์นญ์ ์ํํ ๋ ์ฒ๋ฆฌ๋๋ ์ทจ์ ๋จ์
3. Oracle๊ณผ SQL Server์ ์ ๊ท์ ์ง์ ์ฐจ์ด
- Oracle

- SQL Server

- PATINDEX ํจ์: ์ฐพ๊ณ ์ ํ๋ ๋ฌธ์์ด์ ๊ฒ์ ํ ์์น๋ฅผ ๋ฐํ. ์ ๊ท์์ ์๋์ง๋ง ์ ์ฌํ ํจํด ๋ฌธ์์ด ์ง์
- LIKE ์ฐ์ฐ์: PATINDEX์ ํจํด ๋ฌธ์์ด ์ง์
'Computer Science ๐ > SQLD' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SQLD] 2๊ณผ๋ชฉ - 3์ฅ. ๊ด๋ฆฌ ๊ตฌ๋ฌธ (5) | 2024.11.18 |
---|---|
[SQLD] 2๊ณผ๋ชฉ - 1์ฅ. SQL ๊ธฐ๋ณธ (1) | 2024.11.18 |
[SQLD] 1๊ณผ๋ชฉ - 2์ฅ. ๋ฐ์ดํฐ ๋ชจ๋ธ๊ณผ SQL (3) | 2024.11.18 |
[SQLD] ๊ณผ๋ชฉ1 - 1์ฅ. ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ์ดํด (8) | 2024.11.08 |