๐Ÿ’ผ ์ž๊ฒฉ์ฆ/SQLD

[SQLD] SQL๊ธฐ๋ณธ&ํ™œ์šฉ : ์ง‘ํ•ฉ์—ฐ์‚ฐ์ž์™€ ์ˆœ์ˆ˜๊ด€๊ณ„์—ฐ์‚ฐ์ž, ์กฐ์ธ JOIN, ์กฐ์ธ ์ข…๋ฅ˜, ๊ณ„์ธตํ˜• ์งˆ์˜, ์„œ๋ธŒ์ฟผ๋ฆฌ SUB QUERY, ๋ทฐ VIEW

์—ฐ_์šฐ๋ฆฌ 2021. 11. 8. 12:05
๋ฐ˜์‘ํ˜•

https://lotuus.tistory.com/42

 

[SQLD] 21.11.20 ์ œ43ํšŒ SQL๊ฐœ๋ฐœ์ž ํ›„๊ธฐ, ๊ณต๋ถ€๋ฐฉ๋ฒ•, ์ •๋ฆฌ๋ณธ, 43ํšŒ ์ถœ์ œ๋ฌธ์ œ

2021๋…„ 11์›” 20์ผ ํ† ์š”์ผ ์ œ43ํšŒ SQL๊ฐœ๋ฐœ์ž ์ž๊ฒฉ์ฆ ์‹œํ—˜ ํ›„๊ธฐ ์˜ค๋Š˜ ๋ณด๊ณ ์™”๋‹ค! ๋‚ด ๊ณต๋ถ€๋ฐฉ๋ฒ•๊ณผ ์ •๋ฆฌ๋ณธ, ์ด๋ฒˆ์— ์‹œํ—˜์— ์ถœ์ œ๋œ ๋ฌธ์ œ๋“ค์„ ๊ธฐ์–ต๋‚˜๋Š”๋Œ€๋กœ ์ ์–ด๋ณด๊ฒ ๋‹ค ๊ฐœ์ธ์ ์œผ๋กœ ๊ธฐ์ถœ์ด๋‚˜ ๋ณต์›๋œ ๋ฌธ์ œ๊ฐ€

lotuus.tistory.com

 

[๋ชฉ์ฐจ]

๐Ÿ’š์ง‘ํ•ฉ์—ฐ์‚ฐ์ž์™€ ์ˆœ์ˆ˜๊ด€๊ณ„์—ฐ์‚ฐ์ž

   ์ง‘ํ•ฉ์—ฐ์‚ฐ์ž

      ์ฐจ์ง‘ํ•ฉ ๋‹ค๋ฅด๊ฒŒ ํ‘œํ˜„ํ•˜๊ธฐ

      ๊ต์ง‘ํ•ฉ ๋‹ค๋ฅด๊ฒŒ ํ‘œํ˜„ํ•˜๊ธฐ

   ์ˆœ์ˆ˜๊ด€๊ณ„์—ฐ์‚ฐ์ž

๐Ÿ’š์กฐ์ธ JOIN

  โญโญ์กฐ์ธ ์ž‘์„ฑ๋ฒ•

   JOIN๊ณผ ALIAS ๋ณ„๋ช…

๐Ÿ’šJOIN์˜ ์ข…๋ฅ˜

   INNER JOIN๊ณผ NATURAL JOIN ์˜ˆ์ œ

   SELF JOIN ์…€ํ”„์กฐ์ธ

๐Ÿ’š ๊ณ„์ธตํ˜• ์งˆ์˜ (ORACLE๋งŒ ์ง€์›ํ•œ๋‹ค)

   ๊ฐ€์ƒ์นผ๋Ÿผ๊ณผ ํ•จ์ˆ˜

   ์ „๊ฐœ๋ฐฉ๋ฒ•

๐Ÿ’š SUB QUERY ์„œ๋ธŒ์ฟผ๋ฆฌ
   ๋ฐ˜ํ™˜๊ฐ’์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜
   ๋™์ž‘๋ฐฉ์‹, ์‚ฌ์šฉ์œ„์น˜์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜
๐Ÿ’š ๋ทฐ VIEW : ๊ฐ€์ƒํ…Œ์ด๋ธ”
   ๋ทฐ์˜ ์žฅ์ 
   ๋ทฐ ์‚ฌ์šฉ๋ฐฉ๋ฒ•


๐Ÿ’š ์ง‘ํ•ฉ์—ฐ์‚ฐ์ž์™€ ์ˆœ์ˆ˜๊ด€๊ณ„์—ฐ์‚ฐ์ž

์ง‘ํ•ฉ์—ฐ์‚ฐ์ž

์กฐ์ธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์—ฌ๋Ÿฌ SELECT๋ฌธ ๊ฒฐ๊ณผ๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ํ•˜๋‚˜๋กœ ๊ฒฐํ•ฉํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

SELECT๋ฌธ์˜ ์นผ๋Ÿผ์ˆ˜๊ฐ€ ๋™์ผํ•˜๊ณ , ๋ฐ์ดํ„ฐํƒ€์ž…์ด ์ƒํ˜ธํ˜ธํ™˜๋˜์–ด์•ผ ํ•œ๋‹ค.

์ข…๋ฅ˜ ์„ค๋ช… SQL ๊ธฐ๋Šฅ
UNION ํ•ฉ์ง‘ํ•ฉ. ๋‘ ์ง‘ํ•ฉ์„ ๋ชจ๋‘ ํ‘œํ˜„ํ•œ๋‹ค. / ์ค‘๋ณต์ œ๊ฑฐO / ์ •๋ ฌO  UNION
ํ•ฉ์ง‘ํ•ฉ. ๋‘ ์ง‘ํ•ฉ์„ ๋ชจ๋‘ ํ‘œํ˜„ํ•œ๋‹ค. / ์ค‘๋ณต์ œ๊ฑฐX / ์ •๋ ฌX UNION ALL
INTERSECTION ๊ต์ง‘ํ•ฉ. ๋‘ ์ง‘ํ•ฉ์˜ ๊ณตํ†ต์ง‘ํ•ฉ์„ ์ถ”์ถœํ•œ๋‹ค. / ์ค‘๋ณต์ œ๊ฑฐO INTERSECT
DIFERENCE ์ฐจ์ง‘ํ•ฉ. ์ฒซ๋ฒˆ์งธ ์ง‘ํ•ฉ์—์„œ ๋‘๋ฒˆ์งธ ์ง‘ํ•ฉ๊ณผ์˜ ๊ณตํ†ต๋ถ€๋ถ„ ์ œ์™ธ / ์ค‘๋ณต์ œ๊ฑฐO  MINUS (MSSQL์€ EXCEPT)
PRODUCT ๋‘ ์ง‘ํ•ฉ์˜ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ถ”์ถœํ•œ๋‹ค. / ์ค‘๋ณต์ œ๊ฑฐO  CROSS JOIN์œผ๋กœ ๊ตฌํ˜„๋˜์—ˆ๋‹ค.
SELECT๋ฌธ
์ง‘ํ•ฉ์—ฐ์‚ฐ์ž
SELECT๋ฌธ
ORDER BY ~  -- ORDER BY๋Š” ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์ค„์— ํ•œ๋ฒˆ๋งŒ ๊ธฐ์ˆ ํ•œ๋‹ค.

์ฐจ์ง‘ํ•ฉ ๋‹ค๋ฅด๊ฒŒ ํ‘œํ˜„ํ•˜๊ธฐ

    SELECT ~ FROM ~ WHERE ์นผ๋Ÿผ ์—ฐ์‚ฐ์ž ์กฐ๊ฑด1 MINUS SELECT ~ FROM ~ WHERE ์นผ๋Ÿผ ์—ฐ์‚ฐ์ž ์กฐ๊ฑด2
 = SELECT ~ FROM ~ WHERE ์นผ๋Ÿผ ์—ฐ์‚ฐ์ž ์กฐ๊ฑด1 AND ์นผ๋Ÿผ <> ์กฐ๊ฑด2
 = SELECT ~ FROM ~ WHERE ์นผ๋Ÿผ ์—ฐ์‚ฐ์ž ์กฐ๊ฑด1 AND NOT EXISTS(SELECT 1 FROM ~ WHERE ์นผ๋Ÿผ ์—ฐ์‚ฐ์ž ์กฐ๊ฑด2)
 = SELECT ~ FROM ~ WHERE ์นผ๋Ÿผ ์—ฐ์‚ฐ์ž ์กฐ๊ฑด1 AND NOT IN(SELECT ์นผ๋Ÿผ1 FROM ~ WHERE ์นผ๋Ÿผ ์—ฐ์‚ฐ์ž ์กฐ๊ฑด2)

๊ต์ง‘ํ•ฉ ๋‹ค๋ฅด๊ฒŒ ํ‘œํ˜„ํ•˜๊ธฐ

    SELECT ~ FROM ~ WHERE ์นผ๋Ÿผ ์—ฐ์‚ฐ์ž ์กฐ๊ฑด1 INTERSECT SELECT ~ FROM ~ WHERE ์นผ๋Ÿผ ์—ฐ์‚ฐ์ž ์กฐ๊ฑด2
 = SELECT ~ FROM ~ WHERE ์นผ๋Ÿผ ์—ฐ์‚ฐ์ž ์กฐ๊ฑด1 AND ์นผ๋Ÿผ ์—ฐ์‚ฐ์ž ์กฐ๊ฑด2
 = SELECT ~ FROM ~ WHERE ์นผ๋Ÿผ ์—ฐ์‚ฐ์ž ์กฐ๊ฑด1 AND EXISTS(SELECT 1 FROM ~ WHERE ์นผ๋Ÿผ ์—ฐ์‚ฐ์ž ์กฐ๊ฑด2)
 = SELECT ~ FROM ~ WHERE ์นผ๋Ÿผ ์—ฐ์‚ฐ์ž ์กฐ๊ฑด1 AND IN(SELECT ์นผ๋Ÿผ1 FROM ~ WHERE ์นผ๋Ÿผ ์—ฐ์‚ฐ์ž ์กฐ๊ฑด2)

 

์ˆœ์ˆ˜๊ด€๊ณ„์—ฐ์‚ฐ์ž

์ข…๋ฅ˜ ์„ค๋ช… SQL ๊ธฐ๋Šฅ
SELECT ์—ฌ๋Ÿฌ ํ–‰ ์ค‘ ์กฐ๊ฑด์— ๋งž๋Š” ์ˆ˜ํ‰์  ๋ถ€๋ถ„์ง‘ํ•ฉ ์ถ”์ถœ WHERE์ ˆ๋กœ ๊ตฌํ˜„๋˜์—ˆ๋‹ค.
PROJECT ์—ฌ๋Ÿฌ ์—ด ์ค‘ ์กฐ๊ฑด์— ๋งž๋Š” ์ˆ˜์ง์  ๋ถ€๋ถ„์ง‘ํ•ฉ ์ถ”์ถœ SELECT์ ˆ๋กœ ๊ตฌํ˜„๋˜์—ˆ๋‹ค.
JOIN ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๊ณผ ๊ณตํ†ต์†์„ฑ์„ ์ค‘์‹ฌ์œผ๋กœ ์ƒˆ๋กœ์šด ์ง‘ํ•ฉ์„ ๋งŒ๋“ ๋‹ค. JOIN์ ˆ๋กœ ๊ตฌํ˜„๋˜์—ˆ๋‹ค.
DIVIDE - ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

 

๐Ÿ’š ์กฐ์ธ JOIN

๋‘๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”๊ณผ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ PRIMARY KEY๋‚˜ FOREIGN KEY๋กœ ์—ฐ๊ฒฐ๋˜์–ด JOIN์ด ์„ฑ๋ฆฝํ•œ๋‹ค.

FROM ์ ˆ์— ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์ด ๋‚˜์—ด๋˜๋„ 2๊ฐœ์”ฉ ๋จผ์ € JOIN์ฒ˜๋ฆฌ๋œ๋‹ค.

JOIN์˜ ๋‘ ํ…Œ์ด๋ธ” ์—ฐ๊ฒฐ ์˜ˆ์‹œ

โญโญ์กฐ์ธ ์ž‘์„ฑ๋ฒ•

JOIN๊ณผ ALIAS ๋ณ„๋ช…

FROM์ ˆ์—์„œ ํ…Œ์ด๋ธ”์— ๋ณ„๋ช…์„ ๋ถ™์—ฌ SELECT, WHERE์ ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ, ๋ณ„๋ช…์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์—” ๋ณ„๋ช…๋งŒ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. (๋ณ„๋ช…๊ณผ ํ…Œ์ด๋ธ”๋ช… ํ˜ผํ•ฉํ•ด์„œ ์‚ฌ์šฉ X)

ALIAS ๋ณ„๋ช… ์ด์šฉํ•˜์—ฌ JOIN ํ‘œํ˜„ ์˜ˆ์ œ
SELECT A.์นผ๋Ÿผ๋ช…, B.์นผ๋Ÿผ๋ช…
FROM ํ…Œ์ด๋ธ”1 A, ํ…Œ์ด๋ธ”2 B
WHERE A.์นผ๋Ÿผ๋ช… = B.์นผ๋Ÿผ๋ช…;
SELECT PLAYER.NAME, P.NO, T.NAME 
FROM PLAYER P, TEAM T
WHERE P.NO = T.NO;
--์˜ค๋ฅ˜๋ฐœ์ƒ

 

 

๐Ÿ’š JOIN์˜ ์ข…๋ฅ˜

 

INNER JOIN๊ณผ NATURAL JOIN ์˜ˆ์ œ 

 

 SELF JOIN ์…€ํ”„์กฐ์ธ

๋™์ผ ํ…Œ์ด๋ธ” ์‚ฌ์ด์˜ ์กฐ์ธ์„ ๋งํ•œ๋‹ค.  ํ…Œ์ด๋ธ”์˜ ์นผ๋Ÿผ๋ช…์ด ๋ชจ๋‘ ๋™์ผํ•˜๊ธฐ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ๋ณ„๋ช…(ALIAS)๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

์ž์‹ ๊ณผ ์ž์‹ ์˜ ์ง์† ์ƒ์œ„ํ–‰์€ ๊ตฌํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ์ฐจ์ƒ์œ„ํ–‰์€ ํ•œ๋ฒˆ ๋” ์…€ํ”„์กฐ์ธ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

SELECT ๋ณ„๋ช…1.์นผ๋Ÿผ๋ช…, ๋ณ„๋ช…2.์นผ๋Ÿผ๋ช…
FROM ํ…Œ์ด๋ธ”๋ช… ๋ณ„๋ช…1, ํ…Œ์ด๋ธ”๋ช… ๋ณ„๋ช…2
WHERE ๋ณ„๋ช…1.์ƒ์œ„์นผ๋Ÿผ๋ช… = ๋ณ„๋ช…2.ํ•˜์œ„์นผ๋Ÿผ๋ช…;

SELECT JU.J_ID ํ•™์ƒํ•™๋ฒˆ, JU.NAMES ์ด๋ฆ„, SE.NAMES ์„ ๋ฐฐ์ด๋ฆ„
FROM STUDENTS JU, STUDENTS SE
WHERE JU.S_ID = SE.J_ID;

SELECT JU.J_ID ํ›„๋ฐฐ๋ฒˆํ˜ธ, JU.NAMES ํ›„๋ฐฐ์ด๋ฆ„, SE.NAMES ์„ ๋ฐฐ์ด๋ฆ„
FROM STUDENTS JU LEFT OUTER JOIN STUDENTS SE
ON JU.S_ID = SE.J_ID
ORDER BY JU.J_ID;

 

๋ฐ˜์‘ํ˜•

 

๐Ÿ’š ๊ณ„์ธตํ˜• ์งˆ์˜ (ORACLE๋งŒ ์ง€์›ํ•œ๋‹ค)

๊ณ„์ธตํ˜• ๋ฐ์ดํ„ฐ : ์ƒํ•˜๊ด€๊ณ„๊ฐ€ ๋ช…ํ™•ํ•œ ๋ฐ์ดํ„ฐ

๊ณ„์ธตํ˜• ์งˆ์˜ : ๊ณ„์ธตํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•. 

๋ฃจํŠธ๋…ธ๋“œ ๊ณ„์ธตํ˜• ๋ฐ์ดํ„ฐ์˜ ์ตœ์ƒ์œ„ ๋…ธ๋“œ๋ฅผ ๋งํ•œ๋‹ค. ๋ถ€๋ชจ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š”๋‹ค. (์•„๋ž˜ ์‚ฌ์ง„์—์„œ A์— ํ•ด๋‹น)
ํ˜•์ œ๋…ธ๋“œ ๊ฐ™์€ ๊ณ„์ธต์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ๋งํ•œ๋‹ค. (์•„๋ž˜ ์‚ฌ์ง„์—์„œ B, C / D, E ๋ผ๋ฆฌ ํ˜•์ œ๋…ธ๋“œ์ด๋‹ค)
๋ฆฌํ”„๋…ธ๋“œ ๊ณ„์ธตํ˜• ๋ฐ์ดํ„ฐ์˜ ์ตœํ•˜์œ„ ๋…ธ๋“œ๋ฅผ ๋งํ•œ๋‹ค. ์ž์‹์„ ๊ฐ€์ง€์ง€ ์•Š๋Š”๋‹ค. (์•„๋ž˜ ์‚ฌ์ง„์—์„œ B, D, E์— ํ•ด๋‹น)

๊ฐ€์ƒ์นผ๋Ÿผ๊ณผ ํ•จ์ˆ˜

๊ฐ€์ƒ์นผ๋Ÿผ
LEVEL ์ˆœ๋ฐฉํ–ฅ, ์—ญ๋ฐฉํ–ฅ ๊ด€๊ณ„์—†์ด ๋ฃจํŠธ๋ฅผ 1๋กœ ์ง€์ •ํ•œ๋‹ค.
์ž์‹์„ ๋ฃจํŠธ๋กœ ํ•˜๋ฉด ๋ถ€๋ชจ๋Š” 2๊ฐ€ ๋œ๋‹ค. (์•„๋ž˜ ์‚ฌ์ง„์—์„œ B๊ฐ€ ๋ฃจํŠธ์ด๋ฉด A๋Š” 2)
CONNECT_BY_ISLEAF ํ•ด๋‹น ์นผ๋Ÿผ์ด ๋ฆฌํ”„๋…ธ๋“œ์ด๋ฉด 1, ์•„๋‹ˆ๋ฉด 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
ํ•จ์ˆ˜ SYS_CONNECT_BY_PATH(์นผ๋Ÿผ๋ช…, '๊ตฌ๋ถ„์ž') ๋ฃจํŠธ๋ถ€ํ„ฐ ์ „๊ฐœํ•  ๋ฐ์ดํ„ฐ๊นŒ์ง€์˜ ๊ฒฝ๋กœ๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.
CONNECT_BY_ROOT ์นผ๋Ÿผ ํ•ด๋‹น ์นผ๋Ÿผ์˜ ๋ฃจํŠธ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.

์ „๊ฐœ ๋ฐฉ๋ฒ•

PRIOR  = '์ด์ „์˜' ๋ผ๋Š” ๋œป์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ƒ์œ„ ํ–‰์˜ ๊ฐ’์„ ์ฐธ์กฐํ•œ๋‹ค.

์ˆœ๋ฐฉํ–ฅ์ „๊ฐœ ์—ญ๋ฐฉํ–ฅ์ „๊ฐœ
๋ถ€๋ชจ = PRIOR ์ž์‹ PRIOR ๋ถ€๋ชจ = ์ž์‹
์ด์ „์˜ ์ž์‹๊ฐ’ ์ค‘์—์„œ ๋ถ€๋ชจ(๊ธฐ์ค€๊ฐ’)์„ ์ฐพ๋Š”๋‹ค
๋ถ€๋ชจ๊ฐ€ ์ž์‹์„ ๊ฒฐ์ •ํ•œ๋‹ค
์ด์ „์˜ ๋ถ€๋ชจ๊ฐ’ ์ค‘์—์„œ ์ž์‹(๊ธฐ์ค€๊ฐ’)์„ ์ฐพ๋Š”๋‹ค
์ž์‹์ด ๋ถ€๋ชจ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค

๊ณ„์ธตํ˜• ์งˆ์˜ Oracle
๊ตฌ๋ฌธ SELECT ~ FROM ~ WHERE ~
START WITH ๋ฃจํŠธ๋…ธ๋“œ ์ง€์ •์กฐ๊ฑด
CONNECT BY [NOCYCLE] PRIOR ์ „๊ฐœ๋ฐฉํ–ฅ ์กฐ๊ฑด
[ORDER SIBILINGS BY ์ปฌ๋Ÿผ๋ช…]

- NOCYCLE : ์ƒ์‚ฌ๊ฐ€ ๊ผฌ๋ฆฌ์— ๊ผฌ๋ฆฌ๋ฅผ ๋ฌด๋Š” ๊ฒƒ ๋ฐฉ์ง€
- SIBILINGS BY : ํ˜•์ œ๋“ค ์ •๋ ฌ ๊ธฐ์ค€ ์ •์˜
์˜ˆ์‹œ SELECT
CONNECT_BY_ROOT ์‚ฌ์› '๋ฃจํŠธ',
SYS_CONNECT_BY_PATH(์‚ฌ์›, '/') '๊ฒฝ๋กœ',
LEVEL, ์‚ฌ์›, ๊ด€๋ฆฌ์ž
FROM ์‚ฌ์›ํ…Œ์ด๋ธ”
START WITH ์‚ฌ์›='D'
CONNECT BY PRIOR ๊ด€๋ฆฌ์ž = ์‚ฌ์›;

-- D๋ฅผ ๋ฃจํŠธ๋กœ ์ง€์ •ํ•˜๊ฒ ๋‹ค.
-- ์‚ฌ์›์ด ๊ด€๋ฆฌ์ž๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. (์—ญ๋ฐฉํ–ฅ์ „๊ฐœ)
-- D์™€ ์—ฐ๊ฒฐ๋œ C๊ฐ€ LEVEL 2๋กœ ์˜ค๊ฒŒ๋œ๋‹ค
-- C์™€ ์—ฐ๊ฒฐ๋œ A๊ฐ€ LEVEL 3๋กœ ์˜ค๊ฒŒ๋œ๋‹ค

๋ฃจํŠธ    ๊ฒฝ๋กœ    LEVEL  ์‚ฌ์›  ๊ด€๋ฆฌ์ž
--------------------------------------
D      /D          1       D       C
D      /D/C       2       C       A
D      /D/C/A    3       A


SELECT
CONNECT_BY_ROOT ์‚ฌ์› '๋ฃจํŠธ',
SYS_CONNECT_BY_PATH(์‚ฌ์›, '/') '๊ฒฝ๋กœ',
LEVEL, ์‚ฌ์›, ๊ด€๋ฆฌ์ž
FROM ์‚ฌ์›ํ…Œ์ด๋ธ”
START WITH ๊ด€๋ฆฌ์ž IS NULL
CONNECT BY PRIOR ์‚ฌ์› = ๊ด€๋ฆฌ์ž;

-- A๋ฅผ ๋ฃจํŠธ๋กœ ์ง€์ •ํ•˜๊ฒ ๋‹ค.
-- ๊ด€๋ฆฌ์ž๊ฐ€ ์‚ฌ์›์„ ๊ฒฐ์ •ํ•œ๋‹ค. (์ˆœ๋ฐฉํ–ฅ์ „๊ฐœ)
-- A์™€ ์—ฐ๊ฒฐ๋œ B, C๊ฐ€ LEVEL 2๋กœ ์˜ค๊ฒŒ๋œ๋‹ค
-- C์™€ ์—ฐ๊ฒฐ๋œ D, E๊ฐ€ LEVEL 3๋กœ ์˜ค๊ฒŒ๋œ๋‹ค

๋ฃจํŠธ    ๊ฒฝ๋กœ    LEVEL  ์‚ฌ์›  ๊ด€๋ฆฌ์ž
--------------------------------------
A      /A          1       A        
A      /A/B       2       B         A
A      /A/C       2       C         A
A      /A/D       3       D         C
A      /A/E        3       E         C

๐Ÿ“Œ๋ฌธ์ œ

START WITH MANAGER_ID IS NULL
CONNECT BY PRIOR EMPLOYEE_ID = MANAGER_ID
๋‹ค์Œ ์ค‘ ํ‹€๋ฆฐ ๊ฒƒ์€?

2) CONNECT_BY_ISLEAF ๋Š” LEAF ๋ฉด 1์„ ์•„๋‹ˆ๋ฉด 0 ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค
3) ์ž์‹์—์„œ ๋ถ€๋ชจ๋กœ ๊ฐ€๋Š” ์—ญ๋ฐฉํ–ฅ์ด๋‹ค      // PRIOR ์‚ฌ์› = ๊ด€๋ฆฌ์ž : ๊ด€๋ฆฌ์ž๊ฐ€ ์‚ฌ์›์„ ๊ฒฐ์ •ํ•œ๋‹ค. ์ˆœ๋ฐฉํ–ฅ์ „๊ฐœ์ด๋‹ค.
4) LEVEL ์€ ๊ณ„์ธต์˜ ๊นŠ์ด๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ KING ์€ ์ตœ์ƒ์œ„ ๊ณ„์ธต์ด๋‹ค

 

๐Ÿ’š SUB QUERY ์„œ๋ธŒ์ฟผ๋ฆฌ

ํ•˜๋‚˜์˜ SQL๋ฌธ ์•ˆ์— ํฌํ•จ๋œ ๋˜ ๋‹ค๋ฅธ SQL๋ฌธ.

์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ์„œ ์‚ฌ์šฉํ•˜๊ณ , ORDER BY๋Š” ๋ฉ”์ธ์ฟผ๋ฆฌ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜

๋™์ž‘๋ฐฉ์‹, ์‚ฌ์šฉ์œ„์น˜์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜

 

 

 

๐Ÿ’š ๋ทฐ VIEW : ๊ฐ€์ƒํ…Œ์ด๋ธ”

์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์ง€๋งŒ ํ…Œ์ด๋ธ”์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋•Œ๋ฌธ์— ๊ฐ€์ƒ ํ…Œ์ด๋ธ”์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.

 

๋ทฐ์˜ ์žฅ์ 

๋…๋ฆฝ์„ฑ ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ๋ทฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
ํŽธ๋ฆฌ์„ฑ ๋ณต์žกํ•œ ์งˆ์˜๋ฅผ ๋ทฐ๋กœ ์ƒ์„ฑํ•˜๋ฉด ๊ด€๋ จ ์งˆ์˜๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ณด์•ˆ์„ฑ ๋ทฐ ์ƒ์„ฑ ์‹œ ํŠน์ •์นผ๋Ÿผ(๊ธ‰์—ฌ์ •๋ณด..)์„ ๋นผ๊ณ  ์ƒ์„ฑํ•˜์—ฌ ์ •๋ณด๋ฅผ ๊ฐ์ถœ ์ˆ˜ ์žˆ๋‹ค.

 

๋ทฐ ์‚ฌ์šฉ๋ฐฉ๋ฒ•

์ƒ์„ฑ
CREATE VIEW
๋ทฐ์ด๋ฆ„ AS SELECT๋ฌธ์žฅ;


์‚ฌ์šฉ (๋ทฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” DBMS๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ SQL๋ฌธ์„ ์žฌ์ž‘์„ฑํ•œ๋‹ค)
SELECT * FROM ๋ทฐ์ด๋ฆ„;     = SELECT * FROM (SELECT๋ฌธ์žฅ);

์‚ญ์ œ
DROP VIEW ๋ทฐ์ด๋ฆ„;

 


๊ณ„์ธตํ˜•์งˆ์˜ ๊ด€๋ จ๋ฌธ์ œ ์˜ค๋‹ต๋…ธํŠธ 

 

[SQLD] 34ํšŒ ๊ธฐ์ถœ๋ณต์› ์˜ค๋‹ต๋…ธํŠธ

๊ณ„์ธตํ˜• ์งˆ์˜ ๋ฌธ์ œํ’€์ด SQLD 34ํšŒ 19๋ฒˆ 1๋ฒˆ START WITH N2 IS NULL : n2๊ฐ€ null์ธ ๊ฒƒ์ด ๋ฃจํŠธ์ด๋‹ค (1, NULL, A, NULL) CONNECT BY PRIOR N1 = N2 : ์ด์ „ N1๊ณผ ํ˜„์žฌ N2๊ฐ€ ๊ฐ™์€ ๋ชจ๋“  ํ–‰์„ ๊ฐ€์ ธ์˜จ๋‹ค. (๋ชจ๋“  ํ–‰) WHERE..

lotuus.tistory.com

 

 

 

 

 

 

#SQLD #์ง‘ํ•ฉ์—ฐ์‚ฐ์ž #์ˆœ์ˆ˜๊ด€๊ณ„์—ฐ์‚ฐ์ž #์กฐ์ธ #JOIN #์กฐ์ธ์ž‘์„ฑ๋ฒ• #JOIN๊ณผ ๋ณ„๋ช… #INNERJOIN #๋‚ด๋ถ€์กฐ์ธ #NATURALJOIN #์ž์—ฐ์กฐ์ธ #OUTERJOIN #์™ธ๋ถ€์กฐ์ธ #LEFTJOIN #RIGHTJOIN #FULLJOIN #SELFJOIN #๊ณ„์ธตํ˜•์งˆ์˜ #๊ณ„์ธตํ˜•์งˆ์˜์ „๊ฐœ๋ฐฉ๋ฒ• #์„œ๋ธŒ์ฟผ๋ฆฌ #SUBQUERY #์„œ๋ธŒ์ฟผ๋ฆฌ๋ถ„๋ฅ˜ #์Šค์นผ๋ผ์„œ๋ธŒ์ฟผ๋ฆฌ #์ธ๋ผ์ธ๋ทฐ #๋ทฐ #VIEW #๊ฐ€์ƒํ…Œ์ด๋ธ”

๋ฐ˜์‘ํ˜•
  • ๋„ค์ด๋ฒ„ ๋ธ”๋Ÿฌ๊ทธ ๊ณต์œ ํ•˜๊ธฐ
  • ํŽ˜์ด์Šค๋ถ ๊ณต์œ ํ•˜๊ธฐ
  • ํŠธ์œ„ํ„ฐ ๊ณต์œ ํ•˜๊ธฐ
  • ๊ตฌ๊ธ€ ํ”Œ๋Ÿฌ์Šค ๊ณต์œ ํ•˜๊ธฐ
  • ์นด์นด์˜คํ†ก ๊ณต์œ ํ•˜๊ธฐ