๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

SQL/SQL ๋ ˆ๋ฒจ์—…10

[SQL ๋ ˆ๋ฒจ์—…] 10์žฅ: ์ธ๋ฑ์Šค ์‚ฌ์šฉ ์ธ๋ฑ์Šค์™€ B-tree 1. B-tree ์ธ๋ฑ์Šค ํŠธ๋ฆฌ๊ตฌ์กฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ธ๋ฑ์Šค ๊ท ํ˜•์žกํžŒ ๋ฒ”์šฉ์„ฑ์œผ๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์ธ๋ฑ์Šค ํŠธ๋ฆฌ์˜ ๋ฆฌํ”„๋…ธ๋“œ์—๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฐœ์„ ๋œ B+tree ๋ฒ„์ „์„ ๋ณดํ†ต ์‚ฌ์šฉ B+tree ํŠน์ง• - ๋ฃจํŠธ์™€ ๋ฆฌํ”„์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•œ ์ผ์ •ํ•˜๊ฒŒ ์œ ์ง€ํ•˜์—ฌ ๊ท ํ˜•์ด ์ž˜ ์žกํ˜€ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์ด ์•ˆ์ •์  (๋ฐ์ดํ„ฐ ์–‘์ด ์ฆ๊ฐ€ํ•ด๋„ ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ๊ฐ‘์ž๊ธฐ ์•…ํ™”๋˜๋Š” ์ผ์ด ์—†์Œ) - ํŠธ๋ฆฌ์˜ ๊นŠ์ด๋„ 3-4 ์ˆ˜์ค€์œผ๋กœ ์ผ์ •ํ•˜๊ณ , ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์—ฌ ์ด๋ถ„ ํƒ์ƒ‰์„ ํ†ตํ•ด ๊ฒ€์ƒ‰ ๋น„์šฉ ์ ˆ๊ฐ ๊ฐ€๋Šฅ - ์ง‘์•ฝ ํ•จ์ˆ˜ ๋“ฑ์—์„œ ์š”๊ตฌ๋˜๋Š” ์ •๋ ฌ์„ ํ•˜์ง€ ์•Š์€ ์ฑ„ ์‹คํ–‰ ๊ฐ€๋Šฅ - ๋“ฑํ˜ธ์™€ ๋ถ€๋“ฑํ˜ธ๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ B+tree ๊ตฌ์กฐ 2. ๊ธฐํƒ€ ์ธ๋ฑ์Šค ๋น„ํŠธ๋งต ์ธ๋ฑ์Šค ๋ฐ์ดํ„ฐ๋ฅผ ๋น„ํŠธ ํ”Œ๋ž˜๊ทธ๋กœ ๋ณ€ํ™˜ํ•ด ์ €์žฅํ•˜๋Š” ์ธ๋ฑ์Šค ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋‚ฎ.. 2022. 5. 23.
[SQL ๋ ˆ๋ฒจ์—…] 9์žฅ: ๊ฐฑ์‹ ๊ณผ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๊ฐฑ์‹ ์€ ํšจ์œจ์ ์œผ๋กœ 1. NULL ์ฑ„์šฐ๊ธฐ val ์ปฌ๋Ÿผ์— NULL์ธ ๋ถ€๋ถ„์€ ์ด์ „ ๋ ˆ์ฝ”๋“œ์™€ ๊ฐ™์€ ๊ฐ’์ž„์„ ์˜๋ฏธํ•จ ์ฆ‰, NULL ๋ถ€๋ถ„์— ์ด์ „ ๋ ˆ์ฝ”๋“œ์™€ ๊ฐ™์€ ๊ฐ’์„ ์ฑ„์›Œ๋„ฃ์–ด์•ผ ํ•จ 1) ๊ฐ™์€ keycol ํ•„๋“œ๋ฅผ ๊ฐ€์ง 2) ํ˜„์žฌ ๋ ˆ์ฝ”๋“œ๋ณด๋‹ค ์ž‘์€ seq ํ•„๋“œ ๊ฐ€์ง 3) valํ•„๋“œ๊ฐ€ NULL์ด ์•„๋‹˜ UPDATE OmitTbl SET val = (SELECT val FROM OmitTbl OT1 WHERE OT1.keycol = OmitTbl.keycol AND OT1.seq = (SELECT MAX(seq) FROM OmitTbl OT2 WHERE OT2.keycol = OmitTbl.keycol AND OT2.seq < OmitTbl.seq AND OT2.val IS NOT NULL)) WHERE val IS NULL; .. 2022. 5. 16.
[SQL ๋ ˆ๋ฒจ์—…] 8์žฅ: SQL์˜ ์ˆœ์„œ ์ˆœ์„œ์กฐ์ž‘ ๊ธฐ์ดˆ - ๋ ˆ์ฝ”๋“œ์— ์ˆœ๋ฒˆ ๋ถ™์ด๊ธฐ 1. ๊ธฐ๋ณธ ํ‚ค๊ฐ€ ํ•œ ๊ฐœ์˜ ํ•„๋“œ์ผ ๊ฒฝ์šฐ ์œˆ๋„์šฐ ํ•จ์ˆ˜ ์‚ฌ์šฉ SELECT student_id, ROW_NUMBER() OVER (ORDER BY student_id) AS seq FROM Weights; ์ƒ๊ด€ ์„œ๋ธŒ์ฟผ๋ฆฌ ์‚ฌ์šฉ SELECT student_id, (SELECT COUNT(*) FROM Weights W2 WHERE w2.student_id I/O์–‘์ด ๋Š˜์–ด๋‚˜ SELECT ๊ตฌ๋ฌธ ์„ฑ๋Šฅ์ด ๋‚˜๋น ์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ตฌํ˜„์˜์กด์  ๋ฐฉ๋ฒ•์ž„ 2) ์ธ๋ฑ์Šค์— ๋ณต์žกํ•œ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ๋ถ„์‚ฐ๋„๋ฅผ ๋†’์ž„ -> ๋ณต์žกํ•œ ํ•„๋“œ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ ๋ถˆํ•„์š”ํ•œ ์˜๋ฏธ๋ฅผ์ƒ์„ฑํ•˜๋ฏ€๋กœ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Œ ๊ฒฐ๋ก : ๋ฆฌ์Šคํฌ๋ฅผ ์ธ์ง€ํ•˜๊ณ  ์‚ฌ์šฉํ•˜์ž 2. IDENTITY ํ•„๋“œ - ํ…Œ์ด๋ธ”์˜ ํ•„๋“œ๋กœ ์ •์˜ํ•˜๊ณ  .. 2022. 5. 9.
[SQL ๋ ˆ๋ฒจ์—…] 7์žฅ: ์„œ๋ธŒ์ฟผ๋ฆฌ ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ํํ˜œ 1. ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๋ฌธ์ œ์  ์‹ค์ฒด์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์•„ ๋ฌธ์ œ ๋ฐœ์ƒ - ์—ฐ์‚ฐ ๋น„์šฉ ์ถ”๊ฐ€ ์„œ๋ธŒ์ฟผ๋ฆฌ์— ์ ‘๊ทผํ•  ๋•Œ๋งˆ๋‹ค SELECT ๊ตฌ๋ฌธ ์‹คํ–‰ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•จ ๋‚ด์šฉ์ด ๋ณต์žกํ• ์ˆ˜๋ก ์‹คํ–‰ ๋น„์šฉ ๊ธ‰์ฆ - ๋ฐ์ดํ„ฐ I/O ๋น„์šฉ ๋ฐœ์ƒ ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ํด ๊ฒฝ์šฐ ์ €์žฅ์†Œ์˜ ํŒŒ์ผ์— ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜์—ฌ ์˜ค๋ฒ„ํ—ค๋“œ ์ปค์งˆ ์ˆ˜ ์žˆ์Œ - ์ตœ์ ํ™” ๋ถˆ๊ฐ€ ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์ฟผ๋ฆฌ๋ฅผ ํ•ด์„ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด(๋ช…์‹œ์ ์ธ ์ œ์•ฝ, ์ธ๋ฑ์Šค ๋“ฑ)๋ฅผ ์„œ๋ธŒ์ฟผ๋ฆฌ์—์„œ ์–ป์„ ์ˆ˜ ์—†์Œ ๊ฒฐ๋ก : ๋‚ด๋ถ€์ ์œผ๋กœ ๋ณต์žกํ•œ ์—ฐ์‚ฐ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ๊ฒฐ๊ณผ ํฌ๊ธฐ๊ฐ€ ํฐ ์„œ๋ธŒ์ฟผ๋ฆฌ ์‚ฌ์šฉ ์‹œ ์„ฑ๋Šฅ ๋ฆฌ์Šคํฌ ๊ณ ๋ คํ•ด์•ผ ํ•จ 2. ์„œ๋ธŒ์ฟผ๋ฆฌ ์˜์กด์ฆ ๋ฌธ์ œ: ๊ณ ๊ฐ๋ณ„๋กœ ์ตœ์†Œ ์ˆœ๋ฒˆ์„ ๊ฐ€์ง„ ๋ ˆ์ฝ”๋“œ ๊ตฌํ•˜๊ธฐ 1) ์„œ๋ธŒ์ฟผ๋ฆฌ ์‚ฌ์šฉ SELECT R1.cust_id, R1.seq, R1.pri.. 2022. 5. 2.
[SQL ๋ ˆ๋ฒจ์—…] 6์žฅ: ๊ฒฐํ•ฉ ๊ธฐ๋Šฅ์  ๊ด€์ ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒฐํ•ฉ์˜ ์ข…๋ฅ˜ ๋“ฑ๊ฐ€ ๊ฒฐํ•ฉ: ๊ฒฐํ•ฉ ์กฐ๊ฑด์œผ๋กœ ๋“ฑํ˜ธ(=)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋น„๋“ฑ๊ฐ€ ๊ฒฐํ•ฉ: ๊ฒฐํ•ฉ ์กฐ๊ฑด์œผ๋กœ ๋ถ€๋“ฑํ˜ธ(>=, < ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ž์—ฐ ๊ฒฐํ•ฉ: ๋‚ด๋ถ€ ๊ฒฐํ•ฉ์ด๋ฉด์„œ ๋“ฑ๊ฐ€ ๊ฒฐํ•ฉ - ์ž์—ฐ ๊ฒฐํ•ฉ ์˜ˆ์‹œ SELECT * FROM Employees NATURAL JOIN Departments; ๋‚ด๋ถ€ ๊ฒฐํ•ฉ+ ๋“ฑ๊ฐ€ ๊ฒฐํ•ฉ ์ฟผ๋ฆฌ์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ ๋„์ถœ SELECT * FROM Employees E INNER JOIN Departments D ON E.dept_id=D.dept_id; USING ๊ตฌ๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ SELECT * FROM Employees INNER JOIN Departments USING(dept_id); 1. ํฌ๋กœ์Šค ๊ฒฐํ•ฉ SELECT * FROM Employees CROSS JOIN D.. 2022. 4. 25.
[SQL ๋ ˆ๋ฒจ์—…] 5์žฅ: ๋ฐ˜๋ณต๋ฌธ ๋ฐ˜๋ณต๋ฌธ ์˜์กด 1. ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐ˜๋ณต๋ฌธ ์‚ฌ์šฉ ๋ฐ˜๋ณต๋ฌธ์— ์ต์ˆ™ํ•œ ๊ฐœ๋ฐœ์ž๋“ค์€ ๋‹ค์Œ์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์ด ๋ ˆ์ฝ”๋“œ์— ํ•˜๋‚˜์”ฉ ์ ‘๊ทผํ•˜๊ณ  ํ˜ธ์ŠคํŠธ ์–ธ์–ด(์ ˆ์ฐจํ˜• ์–ธ์–ด)์—์„œ ๋ฐ˜๋ณต ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ฐ„ํ˜น ์žˆ์Œ ์˜จ๋ผ์ธ ์ฒ˜๋ฆฌ์—์„œ ํ™”๋ฉด์— ๋ช…์„ธ๋ฅผ ์ถœ๋ ฅํ•˜์กฐ๊ฐ€ ๋ ˆ์ฝ”๋“œ ํ•˜๋‚˜์”ฉ ์ ‘๊ทผํ•˜๋Š” SELECT ๊ตฌ๋ฌธ ๋ฐ˜๋ณต ์‚ฌ์šฉ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ์—์„œ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋ ˆ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜์”ฉ ํ˜ธ์ŠคํŠธ ์–ธ์–ด์—์„œ ์ฒ˜๋ฆฌํ•˜๊ณ  ํ…Œ์ด๋ธ”์— ๊ฐฑ์‹  ๋ฐ˜๋ณต๊ณ„์˜ ๊ณตํฌ 1. ๋ฐ˜๋ณต๋ฌธ์— ์˜์กดํ•œ ์ฝ”๋“œ์˜ ๋‹จ์  - Sales: ๋งค์ถœ ๊ณ„์‚ฐํ•˜๋Š” ํ…Œ์ด๋ธ” - Sales2: ๋งค์ถœ ๋ณ€ํ™”๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” var ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ ํ…Œ์ด๋ธ” - ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ๋น„๊ต ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„: (์ฒ˜๋ฆฌ ํšŸ์ˆ˜) * (ํ•œ ํšŒ์— ๊ฑธ๋ฆฌ๋Š” ์ฒ˜๋ฆฌ ์‹œ๊ฐ„) ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„: SQL ํŒจํ„ด์€ ๋‹ค์–‘ํ•˜์ง€๋งŒ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ค.. 2022. 4. 18.