Notice
Recent Posts
Recent Comments
Link
ยซ   2025/06   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

AngzavA

[SQLD] 2-2. SQL ํ™œ์šฉ ๋ณธ๋ฌธ

SQLD

[SQLD] 2-2. SQL ํ™œ์šฉ

์ด์•™์ง€ 2023. 6. 8. 11:55

๐Ÿ“–์ˆœ์ˆ˜ ๊ด€๊ณ„ ์—ฐ์‚ฐ์ž์™€ SQL ๋ฌธ์žฅ ๋น„๊ต

  • SELECT  ์—ฐ์‚ฐ = WHERE ์ ˆ
  • PTOJECT ์—ฐ์‚ฐ = SELECT ์ ˆ
  • (NATURAL) JOIN ์—ฐ์‚ฐ = JOIN
  • DIVIDE ์—ฐ์‚ฐ = ํ˜„์žฌ ์‚ฌ์šฉ ์•ˆํ•จ
  • UNION ์—ฐ์‚ฐ = UNION ๊ธฐ๋Šฅ
  • INTERSECTION ์—ฐ์‚ฐ = INTERSECT ๊ธฐ๋Šฅ
  • DIFFERENCE ์—ฐ์‚ฐ = EXCEPT(ORACLE = MINUS)
  • PRODUCT ์—ฐ์‚ฐ = CROSS JOIN

 

 

๐Ÿ“–ANSI์—์„œ ํ‘œ์‹œํ•˜๋Š” FROM JOIN ํ˜•ํƒœ

  • INNER JOIN : ๋‚ด๋ถ€ JOIN, JOIN ์กฐ๊ฑด์—์„œ ๋™์ผํ•œ ๊ฐ’์ด ์žˆ๋Š” ๊ฐ’๋งŒ ๋ฐ˜
  • NATURAL JOIN
  • USING ์กฐ๊ฑด์ ˆ
  • ON ์กฐ๊ฑด์ ˆ
  • CROSS JOIN
  • OUTER JOIN(LEFT, RIGHT, FULL)

 

โœ๏ธORACLE์—์„œ OUTER JOIN

(+) ๊ธฐํ˜ธ๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ

ANSI๋กœ ๋ณ€๊ฒฝ : INNER ์ชฝ ํ…Œ์ด๋ธ”์— ์กฐ๊ฑด์ ˆ ON์„ ํ•จ๊ป˜ ์œ„์น˜์‹œ์ผœ์•ผํ•จ

 

 

๐Ÿ“–USING JOIN

  • ์กฐ์ธ์— ์‚ฌ์šฉ๋  ์ปฌ๋Ÿผ ์ง€์ •
  • ์ž์—ฐ ์กฐ์ธ์—์„œ ํ…Œ์ด๋ธ” ๊ฐ„ ๋™์ผํ•œ ์ด๋ฆ„๊ณผ ํ˜•์‹์˜ ์ปฌ๋Ÿผ์ด ๋‘˜ ์ด์ƒ์ธ ๊ฒฝ์šฐ
  • NATURAL JOIN๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ ๋ถˆ๊ฐ€
  • ์กฐ์ธ์— ์ด์šฉ๋˜์ง€ ์•Š์€ ๋™์ผ ์ด๋ฆ„ ์ปฌ๋Ÿผ์€ ํ…Œ์ด๋ธ”๋ช… ๊ธฐ์ˆ 
  • ์กฐ์ธ ์ปฌ๋Ÿผ์€ ๊ด„ํ˜ธ๋กœ ๋ฌถ์–ด ๊ธฐ์ˆ 
  • JOIN ์นผ๋Ÿผ์— ๋Œ€ํ•ด ALIAS๊ฐ™์€ ์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์ผ ์ˆ˜ ์—†์Œ

 

 

๐Ÿ“–CROSS JOIN

ํ…Œ์ด๋ธ” ๊ฐ„ JOIN ์กฐ๊ฑด์ด ์—†๋Š” ๊ฒฝ์šฐ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์กฐํ•ฉ, M*N

 

 

 

๐Ÿ“–SELF JOIN

  • ๋™์ผ ํ…Œ์ด๋ธ” ์‚ฌ์ด์˜ ์กฐ์ธ
  • FROM ์ ˆ์— ๋™์ผ ํ…Œ์ด๋ธ” ๋‘ ๋ฒˆ ์ด์ƒ ๋‚˜ํƒ€๋‚จ
  • ํ•œ ํ…Œ์ด๋ธ” ๋‚ด์˜ ๋‘ ์นผ๋Ÿผ์ด ์—ฐ๊ด€ ๊ด€๊ณ„๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ

 

๐Ÿ“–LEFT OUTER JOIN

์กฐ์ธ ์ˆ˜ํ–‰์‹œ ๋จผ์ € ํ‘œ๊ธฐ๋œ ์ขŒ์ธก ํ…Œ์ด๋ธ”์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ์ฝ์€ ํ›„, ๋‚˜์ค‘ ํ‘œ๊ธฐ๋œ ์šฐ์ธก ํ…Œ์ด๋ธ”์—์„œ JOIN ๋Œ€์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ์˜จ๋‹ค. ์ฆ‰, TABLE A ์™€ B๊ฐ€ ์žˆ์„ ๋•Œ, A์™€ B๋ฅผ ๋น„๊ตํ•ด์„œ B์˜ JOIN  ์นผ๋Ÿผ์—์„œ ๊ฐ™์€ ๊ฐ’์ด ์žˆ์„ ๋•Œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , B์˜ ์นผ๋Ÿผ์—์„œ ๊ฐ™์€ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” Bํ…Œ์ด๋ธ”์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ์นผ๋Ÿผ๊ฐ’์€ NULL๋กœ ์ฑ„์šด๋‹ค.

 

 

 

๐Ÿ“–FROM JOIN ON (   IN  )

๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ’ ๋Œ€์ƒ ์ถœ๋ ฅํ•˜๋˜, JOIN ๋Œ€์ƒ์ด IN ์ ˆ

 

 

 

โœ๏ธ์นดํƒ€์‹œ์•ˆ ๊ณฑ?

  • UNION / INTERSECTION
  • FROM ์ ˆ์— 2๊ฐœ ์ด์ƒ์˜ TABLE์ด ์žˆ์„ ๋•Œ ๋‘ ํ…Œ์ด๋ธ” ์‚ฌ์ด ์œ ํšจ JOIN ์กฐ๊ฑด์„ ์ ์ง€ ์•Š์•˜์„ ๋•Œ, ํ…Œ์ด๋ธ”์— ๊ด€ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋ถ€ ๊ฒฐํ•ฉํ•˜์—ฌ ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜๋Š” ํ–‰ ๊ฐฏ์ˆ˜๋ฅผ ๊ณฑํ•œ ๋งŒํผ์˜ ๊ฒฐ๊ณผ๊ฐ’์ด ๋ฐ˜ํ™˜๋จ

 

โœ๏ธ๊ฐ™์€ ๊ตฌ๋ฌธ

SELECT A, B
FROM A FULL OUTER JOIN B
ON A.ID=B.ID

SELECT A, B
FROM A LEFT OUTER JOIN B
ON A.ID = B.ID
UNION
SELECT A, B
FROM A RIGHT OUTER JOIN B
ON A.ID = B.ID

SELECT A, B
FROM A, B
WHERE A.ID = B.ID
UNION ALL
SELECT A, NULL
FROM A
WHERE NOT EXISTS (SELECT 1 FROM B WHERE A.ID=B.ID)
UNION ALL
SELECT NULL, B
FROM B
WHERE NOT EXISTS (SELECT 1 FROM A WHERE B.ID=A.ID)

 

๐Ÿ“–์ง‘ํ•ฉ ์—ฐ์‚ฐ์ž ์ข…๋ฅ˜

์ง‘ํ•ฉ ์—ฐ์‚ฐ์ž ์—ฐ์‚ฐ์ž์˜ ์˜๋ฏธ
UNION ์—ฌ๋Ÿฌ๊ฐœ์˜ SQL ๋ฌธ์˜ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ํ•ฉ์ง‘ํ•ฉ์œผ๋กœ ๊ฒฐ๊ณผ์—์„œ ๋ชจ๋“  ์ค‘๋ณต๋œ ํ–‰์€ ํ•˜๋‚˜์˜ ํ–‰์œผ๋กœ
UNION ALL ํ•ฉ์ง‘ํ•ฉ์œผ๋กœ ์ค‘๋ณต๋œ ํ–‰๋„ ๊ฒฐ๊ณผ๋กœ ํ‘œ์‹œ, ๊ฐœ๋ณ„ SQL๋ฌธ์ด ์ค‘๋ณต๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ UNION๊ณผ ๊ฒฐ๊ณผ ๋™์ผ
INTERSECT ์—ฌ๋Ÿฌ๊ฐœ์˜ SQL๋ฌธ์˜ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ๊ต์ง‘ํ•ฉ. ์ค‘๋ณต๋œ ํ–‰์€ ํ•˜๋‚˜์˜ ํ–‰์œผ๋กœ ๋งŒ๋“ ๋‹ค.
EXCEPT ์•ž - ๋’ค ๋œ ์ฐจ์ง‘ํ•ฉ. ์ค‘๋ณต๋œ ํ–‰์€ ํ•˜๋‚˜์˜ ํ–‰์œผ๋กœ
์ผ๋ถ€ DB๋Š” MINUS๋ฅผ ์‚ฌ์šฉ

 

๐Ÿ“–๊ณ„์ธตํ˜• ์ฟผ๋ฆฌ

  • ์ •์˜ : ๋ถ€๋ชจ, ์ž์‹ ๊ฐ„์˜ ์ˆ˜์ง๊ด€๊ณ„๋ฅผ ํŠธ๋ฆฌ ๊ตฌ์กฐ ํ˜•ํƒœ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ์ฟผ๋ฆฌ
  • START WITH : ํŠธ๋ฆฌ ๊ตฌ์กฐ ์ตœ์ƒ์œ„ ํ–‰์„ ์ง€์ •ํ•˜๋Š” ๊ตฌ๋ฌธ
  • CONNECT BY : ๋ถ€๋ชจ, ์ž์‹ ๊ด€๊ณ„ ์ง€์ •
  • PRIOR : CONNECT BY ์ ˆ์— ์‚ฌ์šฉ, ํ˜„์žฌ ์ฝ์„ ์นผ๋Ÿผ ์ง€์ •
  • PRIOR ์ž์‹ = ๋ถ€๋ชจ ->  ๊ณ„์ธต๊ตฌ์กฐ์—์„œ ๋ถ€๋ชจ๋ฐ์ดํ„ฐ์—์„œ ์ž์‹๋ฐ์ดํ„ฐ ๋ฐฉํ–ฅ์œผ๋กœ ์ „๊ฐœ, ์ˆœ๋ฐฉํ–ฅ ์ „๊ฐœ
  • PRIOR ๋ถ€๋ชจ = ์ž์‹ -> ์ž์‹๋ฐ์ดํ„ฐ์—์„œ ๋ถ€๋ชจ๋ฐ์ดํ„ฐ ๋ฐฉํ–ฅ์œผ๋กœ ์ „๊ฐœ, ์—ญ๋ฐฉํ–ฅ ์ „๊ฐœ
  • ORDER SIBILINGS : ๋™์ผ ๋ ˆ๋ฒจ ํ˜•์ œ ๋…ธ๋“œ ์‚ฌ์ด์—์„œ ์ •๋ ฌ ์ˆ˜ํ–‰
  • ๋ฃจํŠธ ๋…ธ๋“œ์˜ LEVEL ๊ฐ’์€ 1
  • SQL SERVER์—์„œ ๊ณ„์ธตํ˜• ์งˆ์˜๋ฌธ์€ CTE(Common Table Expression)๋ฅผ ์žฌ๊ท€ ํ˜ธ์ถœํ•จ์œผ๋กœ์จ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์ „๊ฐœํ•œ๋‹ค.
  • SQL SERVER์—์„œ์˜ ๊ณ„์ธตํ˜• ์งˆ์˜๋ฌธ์€ ์•ต์ปค ๋ฉค๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๊ธฐ๋ณธ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์„ ๋งŒ๋“œ๋กœ ์ดํ›„ ์žฌ๊ท€ ๋ฉค๋ฒ„๋ฅผ ์ง€์†์ ์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค.
  • ์˜ค๋ผํด์˜ ๊ณ„์ธตํ˜• ์งˆ์˜๋ฌธ์—์„œ WHRER ์ ˆ์€ ๋ชจ๋“  ์ „๊ฐœ๋ฅผ ์ง„ํ–‰ํ•œ ์ดํ›„ ํ•„ํ„ฐ ์กฐ๊ฑด์œผ๋กœ์„œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ์„ ์ถ”์ถœํ•˜๋Š”๋ฐ ํ™œ์šฉ๋œ๋‹ค.
  • ์˜ค๋ผํด์˜ ๊ณ„์ธตํ˜• ์งˆ์˜๋ฌธ์—์„œ PRIOR ํ‚ค์›Œ๋“œ๋Š” CONNECT BY, SELECT, WHERE ์ ˆ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

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

์„œ๋ธŒ์ฟผ๋ฆฌ ์ข…๋ฅ˜ ์„ค๋ช…
SINGLE ROW, ๋‹จ์ผํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ ์„œ๋ธŒ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ํ•ญ์ƒ 1๊ฑด ์ดํ•˜
=,<,<=,>,>=,<>
MULTI ROW, ๋‹ค์ค‘ ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฑด์ธ ์„œ๋ธŒ์ฟผ๋ฆฌ
IN, ALL, ANY, SOME, EXISTS
MULTI COLUMN, ๋‹ค์ค‘ ์นผ๋Ÿผ ์„œ๋ธŒ์ฟผ๋ฆฌ ์—ฌ๋Ÿฌ ์นผ๋Ÿผ ๋ฐ˜ํ™˜

 

โœ๏ธ์„œ๋ธŒ์ฟผ๋ฆฌ

  • ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ๋‹จ์ผ ํ–‰ ๋˜๋Š” ๋ณต์ˆ˜ ํ–‰ ๋น„๊ต ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” SELECT ์ ˆ, FROM ์ ˆ, HAVING ์ ˆ, ORDER BY ์ ˆ ๋“ฑ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์—ฐ๊ด€ ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ ๋ฉ”์ธ ์ฟผ๋ฆฌ ์ปค๋Ÿผ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ํ˜•ํƒœ์˜ ์„œ๋ธŒ์ฟผ๋ฆฌ์ด๋‹ค
  • ๋‹ค์ค‘ ์ปฌ๋Ÿผ ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปฌ๋Ÿผ์ด ๋ฐ˜ํ™˜๋˜๋Š”๋ฐ, SQL SERVER์—์„œ ์ง€์› X
  • ๋น„ ์—ฐ๊ด€ ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ ์ฃผ๋กœ ๋ฉ”์ธ์ฟผ๋ฆฌ์— ๊ฐ’์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ 
  • ๋ฉ”์ธ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ -> ์„œ๋ธŒ์ฟผ๋ฆฌ, ์„œ๋ธŒ์ฟผ๋ฆฌ -> ๋ฉ”์ธ ์ฟผ๋ฆฌ๋Š” ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฆ„
  • ๋‹จ์ผํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ ์—ฐ์‚ฐ : ์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ, ๋ฐ˜๋“œ์‹œ ํ•œ ํ–‰๊ณผ ํ•œ ์ปฌ๋Ÿผ๋งŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ, ์—ฌ๋Ÿฌํ–‰ ๋ฐ˜ํ™˜ ์‹œ ์˜ค๋ฅ˜
  •  FROM ์ ˆ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์ธ๋ผ์ธ ๋ทฐ ๋ผ๊ณ  ํ•œ๋‹ค.

์ฃผ์˜์‚ฌํ•ญ

  • ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ๊ด„ํ˜ธ๋กœ ๊ฐ์‹ผ๋‹ค.
  • ๋‹จ์ผ ํ–‰, ๋ณต์ˆ˜ ํ–‰ ๋น„๊ต ์—ฐ์‚ฐ์ž์™€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์„œ๋ธŒ์ฟผ๋ฆฌ์—์„œ ORDER BY๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€

 

 

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

๋‹ค์ค‘ ํ–‰ ์—ฐ์‚ฐ ์„ค๋ช…
IN ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ ์ค‘ ํ•˜๋‚˜๋งŒ ๋™์ผํ•˜๋ฉด ์ฐธ
ALL ๋ชจ๋‘ ๋™์ผํ•˜๋ฉด ์ฐธ
- < ALL : ์ตœ์†Ÿ๊ฐ’ ๋ฐ˜ํ™˜
- > ALL : ์ตœ๋Œ“๊ฐ’ ๋ฐ˜ํ™˜
ANY ํ•˜๋‚˜ ์ด์ƒ ๋™์ผํ•˜๋ฉด ์ฐธ
- < ANY : ํ•˜๋‚˜๋ผ๋„ ํฌ๊ฒŒ ๋˜๋ฉด ์ฐธ
- > ANY : ํ•˜๋‚˜๋ผ๋„ ์ž‘๊ฒŒ ๋˜๋ฉด ์ฐธ
EXISTS ํ•˜๋‚˜๋ผ๋„ ์กด์žฌํ•˜๋ฉด ์ฐธ
์ฐธ๊ณผ ๊ฑฐ์ง“์œผ๋กœ ๋ฐ˜ํ™˜
์—ฐ๊ด€ ์„œ๋ธŒ์ฟผ๋ฆฌ ๋‚ด์—์„œ ๋ฉ”์ธ ์ฟผ๋ฆฌ ์นผ๋Ÿผ์„ ์‚ฌ์šฉํ•˜๋Š” 

 

๐Ÿ“–๋ทฐ

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

 

โœ๏ธNOTE

  • ALIAS๋Š” ์ฒซ๋ฒˆ์งธ SQL ๊ธฐ์ค€
  • ์œ„์— ์ •์˜๋œ ์—ฐ์‚ฐ์ž๊ฐ€ ๋จผ์ € ์ˆ˜ํ–‰