Day 29

SQL์€ ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ์— ์˜ํ•ด ๊ตฌ์ถ•๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ์ฒด๊ณ„์ ์ธ ๋ช…๋ น์˜ ์ง‘ํ•ฉ์ด๋‹ค

๊ด€๊ณ„ํ˜• ๋ชจ๋ธ(Relational Model)

๊ด€๊ณ„ํ˜• ๋ชจ๋ธ์˜ ๊ธฐ๋ณธ์ ์ธ ์š”์†Œ๋Š” ๋ฆด๋ ˆ์ด์…˜, ๊ด€๊ณ„์ด๋‹ค ๊ธฐ๋ณธ์ ์œผ๋กœ ์ผ๋ฐ˜์ ์ธ ์‹œ์Šคํ…œ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ๋ณต์ˆ˜์˜ ํ…Œ์ด๋ธ”์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ์˜ ๋ฆด๋ ˆ์ด์…˜์€ SQL์—์„œ ๋งํ•˜๋Š” ํ…Œ์ด๋ธ”์— ํ•ด๋‹น๋œ๋‹ค

๊ด€๊ณ„ํ˜• ๋ชจ๋ธ์˜ ๋ฆด๋ ˆ์ด์…˜์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์†์„ฑ(Attribute)์ด ์žˆ๊ณ  ๊ทธ ์†์„ฑ์—๋Š” ์†์„ฑ์˜ ์ด๋ฆ„๊ณผ ํ˜• ์ด๋ฆ„์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค ๊ทธ๋ฆฌ๊ณ  SQL์—์„œ์˜ ํ–‰์€ ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ์—์„œ tuple์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ์šด๋‹ค ๋ฆด๋ ˆ์ด์…˜์— ๋Œ€ํ•œ ์—ฐ์‚ฐ์ด ์ง‘ํ•ฉ์˜ ๋Œ€ํ•œ ์—ฐ์‚ฐ์— ๋Œ€์‘๋œ๋‹ค๋Š” ์ด๋ก ์„ ๊ด€๊ณ„๋Œ€์ˆ˜๋ผ๊ณ  ํ•˜๊ณ  ๊ด€๊ณ„๋Œ€์ˆ˜์˜ ๊ธฐ๋ณธ ๊ทœ์น™์€ ์ด๋ ‡๋‹ค

  • ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ด€๊ณ„๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์—ฐ์‚ฐํ•œ๋‹ค

  • ์—ฐ์‚ฐํ•œ ๊ฒฐ๊ณผ, ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒƒ ๋˜ํ•œ ๊ด€๊ณ„์ด๋‹ค

  • ์—ฐ์‚ฐ์„ ์ค‘์ฒฉ ๊ตฌ์กฐ๋กœ ์‹คํ–‰ํ•ด๋„ ์ƒ๊ด€์—†๋‹ค

๊ด€๊ณ„ํ˜• ๋ชจ๋ธ๊ณผ SQL

ํ…Œ์ด๋ธ” A์™€ ํ…Œ์ด๋ธ” B๊ฐ€ ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ๋ณด์ž

ํ•ฉ์ง‘ํ•ฉ ํ•ฉ์ง‘ํ•ฉ(union)์€ ๋ฆด๋ ˆ์ด์…˜๋ผ๋ฆฌ์˜ ๋ง์…ˆ์„ ์˜๋ฏธํ•˜๊ณ  SQL์—์„œ๋Š” UNION์— ํ•ด๋‹นํ•จ

SELECT * FROM A UNION SELECT * FROM B

์ฐจ์ง‘ํ•ฉ ์ฐจ์ง‘ํ•ฉ(difference)์€ ๋ฆด๋ ˆ์ด์…˜๋ผ๋ฆฌ์˜ ๋บ„์…ˆ์„ ์˜๋ฏธํ•˜๊ณ  SQL์—์„œ๋Š” EXCEPT์— ํ•ด๋‹นํ•จ

SELECT * FROM A EXCEPT SELECT * FROM B

๊ต์ง‘ํ•ฉ ๊ต์ง‘ํ•ฉ(intersection)์€ ๋ฆด๋ ˆ์ด์…˜๋ผ๋ฆฌ์˜ ๊ณตํ†ต๋ถ€๋ถ„์„ ์˜๋ฏธํ•˜๊ณ  SQL์—์„œ๋Š” INTERSECT์— ํ•ด๋‹นํ•จ

SELECT * FROM A INTERSECT SELECT * FROM B

๊ณฑ์ง‘ํ•ฉ ๊ณฑ์ง‘ํ•ฉ์€ ์ด์ „์— ๋ดค๋˜ ์นดํ‹ฐ์…˜ ํ”„๋กœ๋•ํŠธ์— ํ•ด๋‹นํ•˜๊ณ  CROSS JOIN์œผ๋กœ ๊ต์ฐจ๊ฒฐํ•ฉ์„ ํ†ตํ•ด์„œ ๊ณฑ์ง‘ํ•ฉ์„ ๊ตฌํ•ด๋‚ผ ์ˆ˜ ์žˆ์Œ

SELECT * FROM A, B SELECT * FROM A CROSS JOIN B

์„ ํƒ SELECT์€ ํŠœํ”Œ์˜ ์ถ”์ถœ์„ ์˜๋ฏธํ•˜๊ณ  ์„ ํƒ์˜ ์ œํ•œ์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค -> ์—ฌ๊ธฐ์„œ WHERE ๊ตฌ๋ฅผ ํ†ตํ•ด์„œ ์กฐ๊ฑด์„ ์ง€์ •ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰

SELECT * FROM A WHERE no < 3

ํˆฌ์˜ ํˆฌ์˜(projection)์€ ์†์„ฑ์˜ ์ถ”์ถœ์„ ์˜๋ฏธํ•˜๊ณ  SQL์—์„œ ์†์„ฑ์€ ์—ด์„ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์— SELECT ๊ตฌ์— ๊ฒฐ๊ณผ๋กœ ๋ฐ˜ํ™˜๋œ ์—ด์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์— ํ•ด๋‹น

SELECT a FROM A

๊ฒฐํ•ฉ ๊ฒฐํ•ฉ(join)์€ ๋ฆด๋ ˆ์ด์…˜๋ผ๋ฆฌ ๊ต์ฐจ๊ฒฐํ•ฉํ•ด ๊ณ„์‚ฐ๋œ ๊ณฑ์ง‘ํ•ฉ์—์„œ ๊ฒฐํ•ฉ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํŠœํ”Œ์„ ์ถ”์ถœํ•˜๋Š” ์—ฐ์‚ฐ์ด๊ณ  SQL์—์„œ๋Š” ๋‚ด๋ถ€๊ฒฐํ•ฉ์— ํ•ด๋‹น๋œ๋‹ค

SELECT a FROM A INNER JOIN B ON A.no=B.no

Last updated

Was this helpful?