[SQLD] SQL ํ™œ์šฉ - 1

ํ˜คยท2023๋…„ 5์›” 14์ผ
0

SQLD

๋ชฉ๋ก ๋ณด๊ธฐ
5/18
post-thumbnail

๐Ÿ’ก SQLD ์ž๊ฒฉ์ฆ ์‹œํ—˜ ๋Œ€๋น„ ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ์š”์•ฝ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

ํ‘œ์ค€ ์กฐ์ธ

SQL ๊ด€๊ณ„ํ˜• ๋Œ€์ˆ˜ (8๊ฐ€์ง€)

  • ์ผ๋ฐ˜ ์ง‘ํ•ฉ ์—ฐ์‚ฐ์ž(4๊ฐ€์ง€)
  • ์ˆœ์ˆ˜ ๊ด€๊ณ„ ์—ฐ์‚ฐ์ž(4๊ฐ€์ง€)

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

๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์—์„œ ์กฐ์ธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์งˆ์˜์˜ ๊ฒฐ๊ณผ๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ํ•˜๋‚˜์˜ ๊ฒฐํ•ฉํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ฆ‰, 2๊ฐœ ์ด์ƒ์˜ ์งˆ์˜ ๊ฒฐ๊ณผ๋ฅผ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

์ผ๋ฐ˜ ์ง‘ํ•ฉ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ

  1. ์„œ๋กœ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์—์„œ ์œ ์‚ฌํ•œ ํ˜•ํƒœ์˜ ๊ฒฐ๊ณผ๋ฅผ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋กœ ํ•ฉ์น˜๊ณ ์ž ํ•  ๋•Œ
  2. ๋™์ผ ํ…Œ์ด๋ธ”์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ์งˆ์˜๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ํ•ฉ์น˜๊ณ ์ž ํ•  ๋•Œ

์ผ๋ฐ˜ ์ง‘ํ•ฉ ์—ฐ์‚ฐ์ž์˜ ์ œ์•ฝ ์กฐ๊ฑด

  • SELECT ์ ˆ์˜ ์นผ๋Ÿผ์ˆ˜๊ฐ€ ๋™์ผํ•ด์•ผ ํ•จ
  • SELECT์ ˆ์˜ ๋™์ผ ์œ„์น˜์— ์กด์žฌํ•˜๋Š” ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์ƒํ˜ธ ํ˜ธํ™˜ ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ

์ง‘ํ•ฉ ์—ฐ์‚ฐ์ž์˜ ์ข…๋ฅ˜

  • UNION : ํ•ฉ์ง‘ํ•ฉ(์ค‘๋ณต๋œ ํ–‰์€ ํ•˜๋‚˜๋กœ)
  • UNION ALL : ํ•ฉ์ง‘ํ•ฉ(์ค‘๋ณต๋œ ํ–‰ ๋ชจ๋‘ ๊ฒฐ๊ณผ๋กœ ํ‘œ์‹œ)
  • INTERSECT : ๊ต์ง‘ํ•ฉ(์ค‘๋ณต๋œ ํ–‰์€ ํ•˜๋‚˜๋กœ)
  • EXCEPT(MINUS) : ์ฐจ์ง‘ํ•ฉ(์ค‘๋ณต๋œ ํ–‰์€ ํ•˜๋‚˜๋กœ)
  • CROSS JOIN : ๊ณฑ์ง‘ํ•ฉ(PRODUCT), JOIN ์กฐ๊ฑด์ด ์—†๋Š” ๊ฒฝ์šฐ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ์˜ ์กฐํ•ฉ, m*n๊ฑด์˜ ๋ฐ์ดํ„ฐ ์กฐํ•ฉ ๋ฐœ์ƒ

๐Ÿ’ก ์ถœ๋ ฅ ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™๋‹ค๋ฉด UNION๊ณผ UNION ALL ์ค‘ UNION ALL ์‚ฌ์šฉ์„ ๊ถŒ๊ณ ํ•œ๋‹ค.

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

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ์—ฐ์‚ฐ์ž

  • SELECT ์—ฐ์‚ฐ์€ WHERE ์ ˆ๋กœ ๊ตฌํ˜„
  • PROJECT ์—ฐ์‚ฐ์€ SELECT์ ˆ๋กœ ๊ตฌํ˜„
  • JOIN ์—ฐ์‚ฐ์€ ๋‹ค์–‘ํ•œ JOIN ๊ธฐ๋Šฅ์œผ๋กœ ๊ตฌํ˜„
  • DIVIDE(๋‚˜๋ˆ—์…ˆ)์—ฐ์‚ฐ์€ ํ˜„์žฌ ์‚ฌ์šฉ x

๐Ÿ’ก SELECT ์—ฐ์‚ฐ๊ณผ SELECT์ ˆ์€ ์„œ๋กœ ๋‹ค๋ฅธ ์˜๋ฏธ

FROM์ ˆ JOIN ํ˜•ํƒœ

  • INNER JOIN
  • NATURAL JOIN
  • USING ์กฐ๊ฑด์ ˆ
  • ON ์กฐ๊ฑด์ ˆ
  • CROSS JOIN
  • OUTER JOIN

INNER JOIN(๋‚ด๋ถ€)

  • JOIN ์กฐ๊ฑด์—์„œ ๋™์ผํ•œ ๊ฐ’์ด ์žˆ๋Š” ํ–‰๋งŒ ๋ฐ˜ํ™˜.

  • WHERE ์ ˆ์—์„œ ์‚ฌ์šฉํ•˜๋˜ JOIN ์กฐ๊ฑด์„ FROM ์ ˆ์—์„œ ์ •์˜ํ•˜๊ฒ ๋‹ค๋Š” ํ‘œ์‹œ๋กœ USING ์กฐ๊ฑด์ ˆ์ด๋‚˜ ON ์กฐ๊ฑด์ ˆ์„ ํ•„์ˆ˜๋กœ ์‚ฌ์šฉ.

  • ๊ธฐ๋ณธ์˜ต์…˜์ด๋ฏ€๋กœ ์ƒ๋žต์ด ๊ฐ€๋Šฅ

  • CROSS JOIN, OUTER JOIN๊ณผ ๊ฐ™์ด ์‚ฌ์šฉ ๋ถˆ๊ฐ€

  • SELECT ์ปฌ๋Ÿผ๋ช… FROM ํ…Œ์ด๋ธ”๋ช… WHERE ์กฐ๊ฑด;

  • SELECT ์ปฌ๋Ÿผ๋ช… INNER JOIN ํ…Œ์ด๋ธ”๋ช… ON ์กฐ๊ฑด;

  • SELECT ์ปฌ๋Ÿผ๋ช… FROM ํ…Œ์ด๋ธ”๋ช… JOIN ํ…Œ์ด๋ธ”๋ช… ON ์กฐ๊ฑด;

NATURAL JOIN(INNER JOIN ํ•˜์œ„ ๊ฐœ๋…)

๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ–๋Š” ๋ชจ๋“  ์ปฌ๋Ÿผ๋“ค์— ๋Œ€ํ•ด EQUI(=) JOIN์„ ์ˆ˜ํ–‰

  • USING ์กฐ๊ฑด์ ˆ, ON ์กฐ๊ฑด์ ˆ, WHERE์ ˆ์—์„œ JOIN ์กฐ๊ฑด์„ ์ •์˜ํ•  ์ˆ˜ ์—†๋‹ค
  • JOIND์ด ๋˜๋Š” ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ์„ฑ๊ฒฉ(๋„๋ฉ”์ธ)๊ณผ ์ปฌ๋Ÿผ๋ช… ๋“ฑ์ด ๋™์ผ ํ•ด์•ผ ํ•œ๋‹ค.
  • SQL Server์—์„œ ์ง€์› X

SELECT ์ปฌ๋Ÿผ๋ช… FROM ํ…Œ์ด๋ธ”๋ช… NATURAL JOIN ํ…Œ์ด๋ธ”๋ช…;

USING ์กฐ๊ฑด์ ˆ

FROM ์ ˆ์˜ ํ•ด๋‹น ์กฐ๊ฑด์ ˆ์„ ์ด์šฉํ•˜๋ฉด ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์ปฌ๋Ÿผ๋“ค ์ค‘์—์„œ ์›ํ•˜๋Š” ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด์„œ๋งŒ ์„ ํƒ์ ์œผ๋กœ EQUI(=) JOINํ•  ์ˆ˜ ์žˆ๋‹ค.

  • JOIN ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด ๋ณ„์นญ, ํ…Œ์ด๋ธ” ๋ช…๊ณผ ๊ฐ™์€ ์ ‘๋‘์‚ฌ ์‚ฌ์šฉ ๊ธˆ์ง€.
  • SQL Server์—์„œ ์ง€์› X

SELECT * FROM ํ…Œ์ด๋ธ”๋ช… JOIN ํ…Œ์ด๋ธ”๋ช… USING (์ปฌ๋Ÿผ๋ช…);

ON ์กฐ๊ฑด์ ˆ

  • JOIN ์„œ์ˆ ๋ถ€(ON ์กฐ๊ฑด์ ˆ)์™€ ๋น„ JOIN ์„œ์ˆ ๋ถ€(WHERE ์กฐ๊ฑด์ ˆ)์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ดํ•ด๊ฐ€ ์‰ฝ๋‹ค.
  • ์ปฌ๋Ÿผ๋ช…์ด ๋‹ค๋ฅด๋”๋ผ๋„ JOIN ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
  • ๋ณ„์นญ์ด๋‚˜ ํ…Œ์ด๋ธ” ๋ช…๊ณผ ๊ฐ™์€ ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SELECT์— ์‚ฌ์šฉ๋˜๋Š” ์ปฌ๋Ÿผ์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ช…ํ™•ํ•˜๊ฒŒ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.

ON ์กฐ๊ฑด์ ˆ + ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ์กฐ๊ฑด ์ถ”๊ฐ€
ON ์กฐ๊ฑด์ ˆ์— JOIN ์กฐ๊ฑด ์™ธ์—๋„ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ๊ฒ€์ƒ‰ ์กฐ๊ฑด ๋ชฉ์ ์ธ ๊ฒฝ์šฐ WHERE ์ ˆ์— ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๊ถŒ๊ณ .

CROSS JOIN

์ผ๋ฐ˜ ์ง‘ํ•ฉ ์—ฐ์‚ฐ์ž์˜ PRODUCT์˜ ๊ฐœ๋…, ํ…Œ์ด๋ธ” ๊ฐ„ JOIN ์กฐ๊ฑด์ด ์—†๋Š” ๊ฒฝ์šฐ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ์˜ ์กฐํ•ฉ.

  • ์–‘์ชฝ ์ง‘ํ•ฉ์˜ M*N๊ฑด์˜ ๋ฐ์ดํ„ฐ ์กฐํ•ฉ ๋ฐœ์ƒ.

OUTER JOIN(์™ธ๋ถ€ ์กฐ์ธ)

JOIN ์กฐ๊ฑด์—์„œ ๋™์ผํ•œ ๊ฐ’์ด ์—†๋Š” ํ–‰๋„ ๋ฐ˜ํ™˜ํ•  ๋•Œ ์‚ฌ์šฉ.

  • JOIN ์กฐ๊ฑด์„ FROM ์ ˆ์—์„œ ์ •์˜-> USING, ON ์กฐ๊ฑด์ ˆ ํ•„์ˆ˜ ์‚ฌ์šฉ

LEFT OUTER JOIN(์ขŒ -> ์šฐ)

์กฐ์ธ ์ˆ˜ํ–‰ ์‹œ ๋จผ์ € ํ‘œ๊ธฐ๋œ ์ขŒ์ธก ํ…Œ์ด๋ธ”์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ์ฝ์€ ํ›„, ๋‚˜์ค‘ ํ‘œ๊ธฐ๋œ ์šฐ์ธก ํ…Œ์ด๋ธ”์—์„œ JOIN ๋Œ€์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜จ๋‹ค.

  • ์šฐ์ธก JOIN ์ปฌ๋Ÿผ์—์„œ ๊ฐ™์€ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ : ์šฐ์ธก ํ…Œ์ด๋ธ”์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ์ปฌ๋Ÿผ๋“ค์„ null ๊ฐ’์œผ๋กœ ์ฑ„์›€

RIGHT (OUTER) JOIN(์šฐ -> ์ขŒ)

์กฐ์ธ ์ˆ˜ํ–‰ ์‹œ ๋จผ์ € ํ‘œ๊ธฐ๋œ ์šฐ์ธก ํ…Œ์ด๋ธ”์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ์ฝ์€ ํ›„, ๋‚˜์ค‘ ํ‘œ๊ธฐ๋œ ์ขŒ์ธก ํ…Œ์ด๋ธ”์—์„œ JOIN ๋Œ€์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜จ๋‹ค.

  • ์ขŒ์ธก JOIN ์ปฌ๋Ÿผ์—์„œ ๊ฐ™์€ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ : ์ขŒ์ธก ํ…Œ์ด๋ธ”์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ์ปฌ๋Ÿผ๋“ค์„ null ๊ฐ’์œผ๋กœ ์ฑ„์›€

FULL (OUTER) JOIN

์ขŒ, ์šฐ์ธก ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด JOINํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑ.

  • LEFT, RIGHT OUTER JOIN ๊ฒฐ๊ณผ์˜ ํ•ฉ์ง‘ํ•ฉ
  • ์ค‘๋ณต ๋ฐ์ดํ„ฐ๋Š” ์‚ญ์ œ

๊ณ„์ธตํ˜• ์งˆ์˜์™€ ์…€ํ”„ ์กฐ์ธ

๊ณ„์ธตํ˜• ๋ฐ์ดํ„ฐ

๋™์ผ ํ…Œ์ด๋ธ”์—์„œ ๊ณ„์ธต์ ์œผ๋กœ ์ƒ์œ„, ํ•˜์œ„ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ๋กœ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ˆœํ™˜๊ด€๊ณ„ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋กœ ์„ค๊ณ„ํ•  ๊ฒฝ์šฐ ๋ฐœ์ƒ.

์˜ค๋ผํด ๊ณ„์ธตํ˜• ์งˆ์˜ ๊ตฌ๋ฌธ

  • START WITH ์ ˆ : ๊ณ„์ธต ๊ตฌ์กฐ ์ „๊ฐœ์˜ ์‹œ์ž‘ ์œ„์น˜ ์ง€์ •, ๋ฃจํŠธ ๋ฐ์ดํ„ฐ ์ง€์ •
  • CONNECT BY ์ ˆ: ๋‹ค์Œ ์ „๊ฐœ๋  ์ž์‹ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •, ์ž์‹ ๋ฐ์ดํ„ฐ๋Š” ํ•ด๋‹น ์ ˆ์— ์ฃผ์–ด์ง„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค.
    • PRIOR : ํ˜„์žฌ ์ฝ์€ ์ปฌ๋Ÿผ ์ง€์ •.
      PRIOR ์ž์‹ = ๋ถ€๋ชจ : ์ž์‹->๋ถ€๋ชจ, ์ˆœ๋ฐฉํ–ฅ
      PRIOR ๋ถ€๋ชจ = ์ž์‹ : ๋ถ€๋ชจ -> ์ž์‹, ์—ญ๋ฐฉํ–ฅ
    • NOCYCLE : ์‚ฌ์ดํด์ด ๋ฐœ์ƒํ•œ ์ดํ›„์˜ ๋ฐ์ดํ„ฐ ์ „๊ฐœ X

๐Ÿ’ก ์‚ฌ์ดํด(CYCLE) : ์ด๋ฏธ ๋‚˜ํƒ€๋‚ฌ๋˜ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „๊ฐœ ์ค‘์— ๋‹ค์‹œ ๋‚˜ํƒ€๋‚˜๋Š” ํ˜„์ƒ. -> ๋Ÿฐํƒ€์ž„์—๋Ÿฌ ๋ฐœ์ƒ!

  • ORDER SIBLINGS BY ์ ˆ : ํ˜•์ œ ๋…ธ๋“œ(๋™์ผ ๋ ˆ๋ฒจ) ์‚ฌ์ด์—์„œ ์ •๋ ฌ ์ˆ˜ํ–‰
  • WHERE : ๋ชจ๋“  ์ „๊ฐœ๋ฅผ ์ˆ˜ํ–‰ํ•œ ํ›„, ์ง€์ •๋œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์ถ”์ถœ.

๊ณ„์ธตํ˜• ์งˆ์˜์˜ ๊ฐ€์ƒ ์ปฌ๋Ÿผ

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

๊ณ„์ธตํ˜• ์งˆ์˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜

์‚ฌ์šฉ์ž ํŽธ์˜์„ฑ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

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

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

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

์„œ๋ธŒ์ฟผ๋ฆฌ

์„œ๋ธŒ์ฟผ๋ฆฌ

  • ํ•˜๋‚˜์˜ SQL๋ฌธ ์•ˆ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ SQL๋ฌธ
  • ์•Œ๋ ค์ง€์ง€ ์•Š์€ ๊ธฐ์ค€์„ ์ด์šฉํ•œ ๊ฒ€์ƒ‰์„ ์œ„ํ•ด ์‚ฌ์šฉ
  • ๋ฉ”์ธ์ฟผ๋ฆฌ๊ฐ€ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ํฌํ•จํ•˜๋Š” ์ข…์† ๊ด€๊ณ„
  • ๋ฉ”์ธ์ฟผ๋ฆฌ์˜ ์ปฌ๋Ÿผ์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฉ”์ธ์ฟผ๋ฆฌ๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ์ปฌ๋Ÿผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ ๋ ˆ๋ฒจ๊ณผ ์ƒ๊ด€์—†์ด ํ•ญ์ƒ ๋ฉ”์ธ์ฟผ๋ฆฌ ๋ ˆ๋ฒจ๋กœ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์ด ์ƒ์„ฑ

์„œ๋ธŒ์ฟผ๋ฆฌ ์‚ฌ์šฉ์˜ ์ฃผ์˜์‚ฌํ•ญ

  1. ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ์„œ ์‚ฌ์šฉ
  2. ๋‹จ์ผ ํ–‰ ๋˜๋Š” ๋ณต์ˆ˜ ํ–‰ ๋น„๊ต ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    ๋‹จ์ผ ํ–‰ ๋น„๊ต ์—ฐ์‚ฐ์ž : ์„œ๋ธŒ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ <= 1๊ฑด
    ๋ณต์ˆ˜ ํ–‰ ๋น„๊ต ์—ฐ์‚ฐ์ž : ์„œ๋ธŒ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ๊ฑด์ˆ˜์™€ ๋ฌด๊ด€
  3. ์„œ๋ธŒ์ฟผ๋ฆฌ์—์„œ ORDER BY ์‚ฌ์šฉ ๋ถˆ๊ฐ€

๐Ÿ’ก ORDER BY์ ˆ์€ SELECT ์ ˆ์—์„œ ์˜ค์ง ํ•œ ๊ฐœ๋งŒ ์˜ฌ ์ˆ˜ ์žˆ์Œ -> ๋ฉ”์ธ์ฟผ๋ฆฌ ๋งˆ์ง€๋ง‰ ๋ฌธ์žฅ์— ์œ„์น˜ํ•ด์•ผ ํ•จ

์„œ๋ธŒ์ฟผ๋ฆฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณณ

  • SELECT ์ ˆ
  • FROM ์ ˆ
  • WHERE ์ ˆ
  • ORDER BY ์ ˆ
  • INSERT๋ฌธ์˜ VALUES ์ ˆ
  • UPDATE๋ฌธ์˜ SET์ ˆ

์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ์ข…๋ฅ˜

  • Un-correlated(๋น„์—ฐ๊ด€) : ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ ๋ฉ”์ธ์ฟผ๋ฆฌ ์นผ๋Ÿผ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์€ ํ˜•ํƒœ
  • Correlated(์—ฐ๊ด€) : ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ ๋ฉ”์ธ์ฟผ๋ฆฌ ์ปฌ๋Ÿผ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ˜•ํƒœ

๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํ˜•ํƒœ์— ๋”ฐ๋ฅธ ์„œ๋ธŒ์ฟผ๋ฆฌ ๋ถ„๋ฅ˜

  1. Single Row(๋‹จ์ผ ํ–‰) ์„œ๋ธŒ์ฟผ๋ฆฌ
  2. Multi Row(๋‹ค์ค‘ ํ–‰) ์„œ๋ธŒ์ฟผ๋ฆฌ
  3. Multi Column(๋‹ค์ค‘ ์ปฌ๋Ÿผ) ์„œ๋ธŒ์ฟผ๋ฆฌ

๋‹จ์ผ ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ

  • ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ํ•ญ์ƒ 1๊ฑด ์ดํ•˜์ธ ์„œ๋ธŒ์ฟผ๋ฆฌ
  • ๋‹จ์ผ ํ–‰ ๋น„๊ต ์—ฐ์‚ฐ์ž(=, <. <=, >, >=, <>)์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ

๋‹ค์ค‘ ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ

  • ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฑด์ธ ์„œ๋ธŒ์ฟผ๋ฆฌ
  • ๋‹ค์ค‘ ํ–‰ ๋น„๊ต ์—ฐ์‚ฐ์ž(IN, ALL, ANY, SOME)์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ
  • IN (์„œ๋ธŒ์ฟผ๋ฆฌ) : ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ์— ์กด์žฌํ•˜๋Š” ์ž„์˜์˜ ๊ฐ’๊ณผ ๋™์ผํ•œ ์กฐ๊ฑด
  • ๋น„๊ต ์—ฐ์‚ฐ์ž ALL (์„œ๋ธŒ์ฟผ๋ฆฌ) : ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๊ฐ’์„ ๋งŒ์กฑํ•˜๋Š” ์กฐ๊ฑด
  • ๋น„๊ต ์—ฐ์‚ฐ์ž ANY (์„œ๋ธŒ์ฟผ๋ฆฌ) : ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ์— ์กด์žฌํ•˜๋Š” ์–ด๋Š ํ•˜๋‚˜์˜ ๊ฐ’์ด๋ผ๋„ ๋งŒ์กฑํ•˜๋Š” ์กฐ๊ฑด(SOME ๊ณผ ๋™์ผ)
  • EXISTS (์„œ๋ธŒ์ฟผ๋ฆฌ) : ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ์กฑํ•˜๋Š” ๊ฐ’์ด ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธํ•˜๋Š” ์กฐ๊ฑด

๋‹ค์ค‘ ์ปฌ๋Ÿผ ์„œ๋ธŒ์ฟผ๋ฆฌ

  • ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปฌ๋Ÿผ์ด ๋ฐ˜ํ™˜๋˜์–ด ๋ฉ”์ธ์ฟผ๋ฆฌ์˜ ์กฐ๊ฑด๊ณผ ๋™์‹œ์— ๋น„๊ต ๋˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ
  • SQL Server์—์„œ ์ง€์› X

์—ฐ๊ด€ ์„œ๋ธŒ์ฟผ๋ฆฌ

  • ์„œ๋ธŒ์ฟผ๋ฆฌ ๋‚ด์— ๋ฉ”์ธ์ฟผ๋ฆฌ ์ปฌ๋Ÿผ์ด ์‚ฌ์šฉ๋œ ์„œ๋ธŒ์ฟผ๋ฆฌ

์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ

  • SELECT ์ ˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ
  • ํ•œ ํ–‰, ํ•œ ์ปฌ๋Ÿผ๋งŒ์„ ๋ฐ˜ํ™˜
  • ๋‹จ์ผ ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ, 2๊ฑด ์ด์ƒ ๋ฐ˜ํ™˜ X

์ธ๋ผ์ธ ๋ทฐ(Inline View)

  • FROM ์ ˆ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ.
  • ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋งˆ์น˜ ์‹คํ–‰ ์‹œ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋œ ํ…Œ์ด๋ธ” ์ธ ๊ฒƒ ์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋œ๋‹ค.
  • SQL๋ฌธ์ด ์‹คํ–‰๋  ๋•Œ๋งŒ ์ž„์‹œ์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ๋™์ ์ธ ๋ทฐ -> DB์— ์ €์žฅ X
  • ์ธ๋ผ์ธ ๋ทฐ๋Š” ํ…Œ์ด๋ธ” ๋ช…์ด ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ณณ์—์„œ ์‚ฌ์šฉ
  • JOIN ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์œผ๋ฉฐ ์ธ๋ผ์ธ ๋ทฐ์˜ ์ปฌ๋Ÿผ์€ SQL๋ฌธ์— ์ž์œ ๋กญ๊ฒŒ ์ฐธ์กฐ ๊ฐ€๋Šฅ

๋ทฐ(View)

  • ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๊ณ , ๋ทฐ ์ •์˜๋งŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ๋ทฐ ์ •์˜๋ฅผ ์ฐธ์กฐํ•˜์—ฌ DBMS ๋‚ด๋ถ€์ ์œผ๋กœ ์งˆ์˜๋ฅผ ์žฌ์ž‘์„ฑํ•˜์—ฌ ์งˆ์˜๋ฅผ ์ˆ˜ํ–‰
  • ํ…Œ์ด๋ธ”์ด ์ˆ˜ํ–‰ํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์ƒ ํ…Œ์ด๋ธ”์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.

๋ทฐ ์‚ฌ์šฉ์˜ ์žฅ์ 

  • ๋…๋ฆฝ์„ฑ : ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ๋ทฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
  • ํŽธ๋ฆฌ์„ฑ : ๋ณต์žกํ•œ ์งˆ์˜๋ฅผ ๋ทฐ๋กœ ์ƒ์„ฑํ•จ์œผ๋กœ์จ ๊ด€๋ จ ์งˆ์˜๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ์ž‘์„ฑ. ํ•ด๋‹น ํ˜•ํƒœ์˜ SQL๋ฌธ์„ ์ž์ฃผ ์‚ฌ์šฉํ•  ๋–„ ๋ทฐ๋ฅผ ์ด์šฉํ•˜๋ฉด ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋ณด์•ˆ์„ฑ : ์ˆจ๊ธฐ๊ณ  ์‹ถ์€ ์ •๋ณด๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ทฐ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ•ด๋‹น ์ปฌ๋Ÿผ์„ ๋นผ๊ณ  ์ƒ์„ฑํ•˜์—ฌ ์ •๋ณด๋ฅผ ์ˆจ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
profile
๐Ÿง‘โ€๐Ÿ’ป๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž, ์กฐ๊ธˆ์”ฉ ๊พธ์ค€ํ•˜๊ฒŒ

0๊ฐœ์˜ ๋Œ“๊ธ€