SELECT

SELECT ์ ˆ์˜ ์ธ๋ฑ์Šค ์‚ฌ์šฉ

์ธ๋ฑ์Šค ์‚ฌ์šฉ์„ ์œ„ํ•œ ๊ธฐ๋ณธ ๊ทœ์น™

์ธ๋ฑ์Šค๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‘ ๊ฐ€์ง€ ๊ทœ์น™์„ ์ง€์ผœ์•ผํ•œ๋‹ค.

  • WHERE ์ ˆ์˜ ์กฐ๊ฑด๋ฌธ์ด ์ธ๋ฑ์Šค ์ปฌ๋Ÿผ ์ž์ฒด๋ฅผ ๊ฐ€๊ณตํ•˜์ง€ ์•Š๊ณ  ์›๋ž˜์˜ ๊ฐ’ ๊ทธ๋Œ€๋กœ ๋น„๊ต

  • ๋น„๊ต ๋Œ€์ƒ์ด ๋™์ผํ•œ ํƒ€์ž…์ด์–ด์•ผ ํ•จ

-- ์ธ๋ฑ์Šค ์‚ฌ์šฉ ๋ถˆ๊ฐ€
SELECT *
FROM salaries
WHERE salary * 10 > 1000000;

-- ์ธ๋ฑ์Šค ์‚ฌ์šฉ ๊ฐ€๋Šฅ
SELECT *
FROM salaries
WHERE salary > 1000000 / 10;

WHERE ์ ˆ์˜ ์ธ๋ฑ์Šค

WHERE ์กฐ๊ฑด์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ธ๋ฑ์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ•˜๋А๋ƒ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ๋‹ฌ๋ผ์ง„๋‹ค.

  • AND: ์ธ๋ฑ์Šค์˜ ๊ฐ€์žฅ ์•ž์ชฝ ์ปฌ๋Ÿผ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์กฐ๊ฑด์ด ์ผ์น˜ํ•ด์•ผ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

  • OR: OR๋กœ ์—ฐ๊ฒฐ๋œ ๊ฐ ์กฐ๊ฑด์ด ๋ชจ๋‘ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€ ์•Š๋‹ค๋ฉด, ์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ํ’€ ํ…Œ์ด๋ธ” ์Šค์บ” ๊ฐ€๋Šฅ์„ฑ ๋†’์Œ

GROUP BY / ORDER BY ์ ˆ์˜ ์ธ๋ฑ์Šค

GROUP BY์™€ ORDER BY๋Š” ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ์†ŒํŠธ๋‚˜ ์ž„์‹œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ช…์‹œ๋œ ์ปฌ๋Ÿผ์ด ์ธ๋ฑ์Šค ์ปฌ๋Ÿผ ์ˆœ์„œ์™€ ์œ„์น˜ ์ผ์น˜

  • ์ธ๋ฑ์Šค ๊ตฌ์„ฑ ์ปฌ๋Ÿผ ์ค‘ ๋’ค์ชฝ ์ปฌ๋Ÿผ์€ ๋ช…์‹œ๋˜์ง€ ์•Š์•„๋„ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์•ž์ชฝ ์ปฌ๋Ÿผ์ด ๋ช…์‹œ๋˜์ง€ ์•Š์œผ๋ฉด ์ธ๋ฑ์Šค ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅ

  • (ORDER BY ์ ˆ์—๋งŒ ํ•ด๋‹น) ๋ช…์‹œ๋œ ์ปฌ๋Ÿผ์ด ๋ชจ๋‘ ์˜ค๋ฆ„์ฐจ์ˆœ์ด๊ฑฐ๋‚˜ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด์•ผ ํ•จ

WHERE + ORDER BY(or GROUP BY) ์ ˆ์˜ ์ธ๋ฑ์Šค

WHERE ์ ˆ๊ณผ ORDER BY ์ ˆ์„ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์•„๋ž˜์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

  • WHERE ์ ˆ๋งŒ ์ธ๋ฑ์Šค ์ด์šฉ

    • OWHERE ์ ˆ์˜ ๋Œ€์ƒ ์ปฌ๋Ÿผ์ด ์ธ๋ฑ์Šค์— ํฌํ•จ๋ผ ์žˆ์„ ๋•Œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

    • WHERE ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์กฐํšŒ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ณ„๋„๋กœ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ

    • WHERE ์ ˆ ์กฐ๊ฑด์— ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ ๊ฑด์ˆ˜๊ฐ€ ์ ์„ ์ˆ˜๋ก(Cardinality๊ฐ€ ๋†’์„ ์ˆ˜๋ก) ์„ฑ๋Šฅ์ด ์ข‹์Œ

  • ORDER BY ์ ˆ๋งŒ ์ธ๋ฑ์Šค ์ด์šฉ

    • ORDER BY ์ ˆ์˜ ์ •๋ ฌ ๋Œ€์ƒ ์ปฌ๋Ÿผ์ด ์ธ๋ฑ์Šค์— ํฌํ•จ๋ผ ์žˆ์„ ๋•Œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

    • ORDER BY ์ ˆ์˜ ์ˆœ์„œ๋Œ€๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ฝ์œผ๋ฉด์„œ ๋ ˆ์ฝ”๋“œ ํ•œ ๊ฑด์”ฉ WHERE ์กฐ๊ฑด์— ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ

  • WHERE ์ ˆ + ORDER BY ์ ˆ ๋™์‹œ์— ๊ฐ™์€ ์ธ๋ฑ์Šค ์ด์šฉ

    • WHERE ์ ˆ์˜ ๋ฒ”์œ„ ๋น„๊ต ์กฐ๊ฑด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ปฌ๋Ÿผ + ORDER BY ์ ˆ์˜ ์ •๋ ฌ ๋Œ€์ƒ ์ปฌ๋Ÿผ์ด ๋ชจ๋‘ ํ•˜๋‚˜์˜ ์ธ๋ฑ์Šค์— ์—ฐ์†ํ•ด์„œ ํฌํ•จ๋ผ ์žˆ์„ ๋•Œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

    • WHERE ์ ˆ์˜ ๋™๋“ฑ ๋น„๊ต ์กฐ๊ฑด์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ปฌ๋Ÿผ + ORDER BY ์ ˆ์˜ ์ •๋ ฌ ๋Œ€์ƒ ์ปฌ๋Ÿผ์ด ์ค‘์ฒฉ ์ƒ๊ด€ ์—†์ด ์ธ๋ฑ์Šค ์ˆœ์„œ๋Œ€๋กœ ํฌํ•จ๋ผ ์žˆ์„ ๋•Œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

GROUP BY + ORDER BY ์ ˆ์˜ ์ธ๋ฑ์Šค

  • GROUP BY ์ ˆ๊ณผ ORDER BY ์ ˆ์— ๋ช…์‹œ๋œ ์ปฌ๋Ÿผ์˜ ์ˆœ์„œ์™€ ๋‚ด์šฉ์ด ๋ชจ๋‘ ๊ฐ™์•„์•ผ ์ธ๋ฑ์Šค ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • ๋งŒ์•ฝ ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์—†์„ ๊ฒฝ์šฐ ๋ชจ๋‘ ์ธ๋ฑ์Šค ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ

WHERE + GROUP BY + ORDER BY ์ ˆ์˜ ์ธ๋ฑ์Šค

์œ„์˜ ๊ทœ์น™์ด ๋ชจ๋‘ ์ ์šฉ๋˜๋ฉฐ, ๊ทธ ํ๋ฆ„์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

index-flow-chart.png

WHERE ์ ˆ ๋น„๊ต ์กฐ๊ฑด ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์‚ฌํ•ญ

  • ๋ฌธ์ž์—ด / ์ˆซ์ž ๋น„๊ต: ๋ฐ˜๋“œ์‹œ ๊ทธ ํƒ€์ž…์— ๋งž๋Š” ์ƒ์ˆ˜๊ฐ’ ์‚ฌ์šฉํ•ด์•ผ ์ธ๋ฑ์Šค๋ฅผ ์ •์ƒ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • ๋‚ ์งœ ๋น„๊ต: ๋‚ ์งœ๋ฅผ ์ €์žฅํ•˜๋Š” ํƒ€์ž…์— DATETIME, DATE, TIMESTAMP, TIME ์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๊ฐ ํƒ€์ž…์„ ๋น„๊ตํ•  ๋•Œ ์ฃผ์˜ ํ•„์š”

    • DATE(DATETIME) + ๋ฌธ์ž์—ด: ๋ฌธ์ž์—ด์„ DATETIME ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋น„๊ต(์ธ๋ฑ์Šค ์ •์ƒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)

    • DATE + DATETIME: DATETIME ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋น„๊ต(์ธ๋ฑ์Šค ์ •์ƒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)

LIMIT n

์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์—์„œ ์ง€์ •๋œ ์ˆœ์„œ์— ์œ„์น˜ํ•œ ๋ ˆ์ฝ”๋“œ๋งŒ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ๋ฒ•์œผ๋กœ, ํ•ญ์ƒ ์ฟผ๋ฆฌ์˜ ๋งˆ์ง€๋ง‰์— ์‹คํ–‰๋œ๋‹ค.

LIMIT์€ ํ•„์š”ํ•œ ๋ ˆ์ฝ”๋“œ ๊ฑด์ˆ˜๊ฐ€ ์กฐํšŒ๋˜๋ฉด ์ฆ‰์‹œ ์ฟผ๋ฆฌ๋ฅผ ์ข…๋ฃŒํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ฟผ๋ฆฌ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ธ๋ฑ์Šค ์ฒ˜๋ฆฌ ๋˜์ง€ ์•Š์€ GROUP BY / ORDER BY ์‚ฌ์šฉ: ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ์–ด์•ผ ํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ ํ–ฅ์ƒ ๋ฏธ๋ฏธ

  • DISTINCT ์‚ฌ์šฉ: ์œ ๋‹ˆํฌํ•œ ๋ ˆ์ฝ”๋“œ ๊ฑด์ˆ˜๊ฐ€ LIMIT์— ๋ช…์‹œ๋œ ๊ฐ’๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ ๊ธฐ๋Œ€(ํ…Œ์ด๋ธ”์„ ์ฝ๋Š” ๋„์ค‘ ์ค‘๋‹จ)

  • ๊ทธ ์™ธ: ํฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ ๊ธฐ๋Œ€ ๊ฐ€๋Šฅ

OFFSET

LIMIT ์ ˆ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฉฐ, ๊ฒฐ๊ณผ์—์„œ ๋ช‡ ๋ฒˆ์งธ ๋ ˆ์ฝ”๋“œ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜ฌ์ง€๋ฅผ ์ง€์ •ํ•œ๋‹ค.

์œ„ ์ฟผ๋ฆฌ๋Š” 20๋งŒ ๋ฒˆ์งธ ๋ ˆ์ฝ”๋“œ๋ถ€ํ„ฐ ๋‹จ 10๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋งŒ ์กฐํšŒํ•˜์ง€๋งŒ,MySQL์€ 20๋งŒ ๋ฒˆ์งธ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ์•ž์˜ 200,000๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ์ฝ์–ด์•ผํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์‹ฌ๊ฐํ•ด์ง„๋‹ค.

COUNT()

๊ฒฐ๊ณผ ๋ ˆ์ฝ”๋“œ์˜ ๊ฑด์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜

  • ๋‚ด๋ถ€ ์ธ์ž

    • ์ปฌ๋Ÿผ๋ช… / * / 1 ์‚ฌ์šฉ ๊ฐ€๋Šฅ

    • *๋Š” SELECT ์ ˆ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์ตœ์ ํ™”ํ•˜์—ฌ ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ปฌ๋Ÿผ ์‚ฌ์šฉ

      • ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ์ž‘์€ ์„ธ์ปจ๋”๋ฆฌ ์ธ๋ฑ์Šค๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ์ฒ˜๋ฆฌ(์—†๋Š” ๊ฒฝ์šฐ, ํด๋Ÿฌ์Šคํ„ฐ๋œ PK ์ธ๋ฑ์Šค ์‚ฌ์šฉ)

    • ๋งŒ์•ฝ ์ธ์ž๋กœ ์ปฌ๋Ÿผ์„ ๋„ฃ์€ ๊ฒฝ์šฐ ํ•ด๋‹น ์ปฌ๋Ÿผ์ด NULL์ด ์•„๋‹Œ ๋ ˆ์ฝ”๋“œ๋งŒ ์นด์šดํŠธ

  • WHERE ์กฐ๊ฑด

    • WHERE ์กฐ๊ฑด์ด ์—†๋Š” ๊ฒฝ์šฐ ํด๋Ÿฌ์Šคํ„ฐ ์ธ๋ฑ์Šค๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์Šค์บ”ํ•˜์—ฌ ๋ ˆ์ฝ”๋“œ ๊ฑด์ˆ˜๋ฅผ ์นด์šดํŠธ(MyISAM ์—”์ง„: ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ)

      • ์กฐ๊ฑด์ ˆ / GROUP BY ๋‘˜ ๋‹ค ์—†๋Š” ๊ฒฝ์šฐ ์ฟผ๋ฆฌ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ๋ ˆ์ฝ”๋“œ ๊ฑด์ˆ˜๋ฅผ ์ตœ์ ํ™”ํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ

    • ์กฐ๊ฑด์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—” WHERE ์กฐ๊ฑด์— ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ ์กฐํšŒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์ธ DBMS์™€ ๋™์ผํ•˜๊ฒŒ ์ฒ˜๋ฆฌ

  • ORDER BY

    • ๊ฐœ์ˆ˜ ์กฐํšŒ๋ฅผ ํ•˜๋Š” ๋ฐ์— ์ •๋ ฌ์ด ํ•„์š”ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ•„์š”ํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Œ(MySQL 8.0 ๋ฏธ๋งŒ)

    • MySQL 8.0 ์ด์ƒ๋ถ€ํ„ฐ๋Š” ORDER BY๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์˜ตํ‹ฐ๋งˆ์ด์ €์—์„œ ์ตœ์ ํ™”(๋ฌด์‹œ)ํ•˜์—ฌ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ฐฉ์ง€

์—ฌ๊ธฐ์„œ InnoDB์—์„œ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” MVCC ์ง€์›๊ณผ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ„ํ•ด ํŠธ๋žœ์žญ์…˜ ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

JOIN()

์กฐ์ธ ์„ฑ๋Šฅ์€ ๋“œ๋ผ์ด๋น™(Driving) ํ…Œ์ด๋ธ”๊ณผ ๋“œ๋ฆฌ๋ธ(Driven) ํ…Œ์ด๋ธ”์˜ ์„ ํƒ / ์กฐ์ธ ์กฐ๊ฑด์˜ ์ธ๋ฑ์Šค ์œ ๋ฌด์— ๋”ฐ๋ผ ๊ฒฐ์ •๋˜๋Š”๋ฐ, ์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ ์›์น™์— ๋”ฐ๋ผ ์กฐ์ธ ์ˆœ์„œ๋ฅผ ์ตœ์ ํ™”ํ•œ๋‹ค.

  1. ๋‘ ํ…Œ์ด๋ธ” ๋ชจ๋‘ ์กฐ์ธ ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด, ํ†ต๊ณ„ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋” ์ ์€ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง„ ํ…Œ์ด๋ธ”์„ ๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”๋กœ ์„ ํƒ

  2. ํ•œ ํ…Œ์ด๋ธ”์—๋งŒ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ธ๋ฑ์Šค๊ฐ€ ์—†๋Š” ํ…Œ์ด๋ธ”์„ ๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”๋กœ ์„ ํƒํ•˜์—ฌ ํ’€ ์Šค์บ”์„ ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰ํ•˜๊ณ , ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋Š” ํ…Œ์ด๋ธ”์„ ๋“œ๋ฆฌ๋ธ ํ…Œ์ด๋ธ”๋กœ ์‚ผ์•„ ํšจ์œจ์ ์œผ๋กœ ์กฐํšŒ

  3. ๋‘ ํ…Œ์ด๋ธ” ๋ชจ๋‘ ์ธ๋ฑ์Šค๊ฐ€ ์—†๋‹ค๋ฉด, ๋ ˆ์ฝ”๋“œ ๊ฑด์ˆ˜๊ฐ€ ๋” ์ ์€ ํ…Œ์ด๋ธ”์„ ๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”๋กœ ์„ ํƒ

์œ„์˜ ์ฟผ๋ฆฌ๊ฐ€ ์กด์žฌํ•  ๋•Œ ์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค.(๋ฌด์กฐ๊ฑด ์•„๋ž˜์™€ ๊ฐ™์ด ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค.)

emp_no ์ธ๋ฑ์Šค
dept_no ์ธ๋ฑ์Šค
์กฐ์ธ ์ˆœ์„œ์™€ ์˜ตํ‹ฐ๋งˆ์ด์ € ๋™์ž‘

O

O

์–ด๋А ํ…Œ์ด๋ธ”์„ ๋“œ๋ผ์ด๋น™์œผ๋กœ ์„ ํƒํ•˜๋“  ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•ด ๋“œ๋ฆฌ๋ธ ํ…Œ์ด๋ธ” ์กฐํšŒ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ†ต๊ณ„ ์ •๋ณด๋ฅผ ์ด์šฉํ•ด ์ ์ ˆํžˆ ์„ ํƒ

O

X

dept_emp ํ…Œ์ด๋ธ”์„ ๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”๋กœ ์„ ํƒํ•˜์—ฌ ํ…Œ์ด๋ธ” ํ’€ ์Šค์บ”์„ ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ , employees ํ…Œ์ด๋ธ”์„ ๋“œ๋ฆฌ๋ธ ํ…Œ์ด๋ธ”๋กœ ์„ ํƒํ•˜์—ฌ ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•ด ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ

X

O

์œ„์™€ ๋ฐ˜๋Œ€๋กœ ๋™์ž‘

X

X

์–ด๋–ค ๊ฒฝ์šฐ์—์„œ๋“  ๋“œ๋ฆฌ๋ธ ํ…Œ์ด๋ธ”์˜ ํ’€ ์Šค์บ”์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ ˆ์ฝ”๋“œ ๊ฑด์ˆ˜๊ฐ€ ์ ์€ ํ…Œ์ด๋ธ”์„ ๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”๋กœ ์„ ํƒ

์ง€์—ฐ ์กฐ์ธ(Delayed Join)

๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ธํ•œ ํ›„ ORDER BY๋‚˜ GROUP BY๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด, ๊ฑฐ๋Œ€ํ•ด์ง„ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ์ €ํ•˜๋œ๋‹ค.

  • ์กฐ์ธ์„ ํ•  ์ˆ˜๋ก ๋ ˆ์ฝ”๋“œ ๊ฑด์ˆ˜์™€ ๋ ˆ์ฝ”๋“œ ์ž์ฒด์˜ ํฌ๊ธฐ๊ฐ€ ๋Š˜์–ด๋‚จ

  • GROUP BY, ORDER BY ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋ ˆ์ฝ”๋“œ ๊ฑด์ˆ˜๊ฐ€ ๋งŽ๊ฑฐ๋‚˜ ๋ ˆ์ฝ”๋“œ ์ž์ฒด์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๋ฉด์„œ ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฐœ์ƒ

๋•Œ๋ฌธ์— ๋จผ์ € WHERE, ORDER BY,LIMIT ๋“ฑ์„ ํ†ตํ•ด ํ•„์š”ํ•œ ๋ ˆ์ฝ”๋“œ์˜ PK๋งŒ ์ถ”๋ ค๋‚ธ ํ›„, ๊ทธ ๊ฒฐ๊ณผ์™€ ๋“œ๋ฆฌ๋ธ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜๋Š” ์ตœ์ ํ™” ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ง€์—ฐ ์กฐ์ธ ์ ์šฉ ์ „

  1. employees ํ…Œ์ด๋ธ”์„ ๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”๋กœ ์„ ํƒ

  2. 10001 ~ 13000 ์‚ฌ์ด์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์กฐํšŒ

  3. salaries ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธ(์กฐ์ธ ํ›„ ๋ ˆ์ฝ”๋“œ ๊ฑด์ˆ˜๊ฐ€ ์ฆ๊ฐ€)

  4. ์œ„ ๊ฒฐ๊ณผ๋ฅผ ์ž„์‹œํ…Œ์ด๋ธ”์— ์ €์žฅ

  5. GROUP BY ์ž‘์—… ์ˆ˜ํ–‰ํ•˜์—ฌ ์ตœ๋Œ€ 3000๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋กœ ์ค„์–ด๋“ฆ

  6. ORDER BY ์ž‘์—… ์ˆ˜ํ–‰

  7. LIMIT 10์œผ๋กœ ์ตœ์ข… ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜

์ง€์—ฐ ์กฐ์ธ ์ ์šฉ ํ›„

  1. salaries ํ…Œ์ด๋ธ”์—์„œ 10001 ~ 13000 ์‚ฌ์ด์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์กฐํšŒ

  2. GROUP BY / ORDER BY / LIMIT ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ตœ๋Œ€ 10๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋กœ ์ค„์–ด๋“ฆ

  3. employees ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธ

์œ„์˜ ์˜ˆ์‹œ๋Š” ์ง€์—ฐ ์กฐ์ธ์„ ์ ์šฉํ–ˆ์„ ๋•Œ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜๋Š” ์˜ˆ์‹œ์ด์ง€๋งŒ, ์ง€์—ฐ ์กฐ์ธ์„ ์ ์šฉํ–ˆ์„ ๋•Œ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๋Š” ๊ฒฝ์šฐ๋„ ์กด์žฌํ•˜๋ฏ€๋กœ ๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

  • LEFT(OUTER) JOIN์ธ ๊ฒฝ์šฐ

    • ๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”:๋“œ๋ฆฌ๋ธ ํ…Œ์ด๋ธ” = 1:1 || M:1 ๊ด€๊ณ„

  • INNER JOIN์ธ ๊ฒฝ์šฐ

    • ๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”:๋“œ๋ฆฌ๋ธ ํ…Œ์ด๋ธ” = 1:1 || M:1 ๊ด€๊ณ„

    • ๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ ˆ์ฝ”๋“œ๋Š” ๋“œ๋ฆฌ๋ธ ํ…Œ์ด๋ธ”์— ๋ชจ๋‘ ์กด์žฌํ•ด์•ผ ํ•จ

๋ž˜ํ„ฐ๋Ÿด ์กฐ์ธ(Lateral Join)

MySQL 8.0๋ถ€ํ„ฐ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ํŠน์ • ๊ทธ๋ฃน๋ณ„๋กœ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ด์„œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

์œ„ ์ฟผ๋ฆฌ๋Š” LATERAL ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํฐ ํŠน์ง•์ด ์žˆ๋‹ค.

  • LATERAL ํ‚ค์›Œ๋“œ๋ฅผ ๊ฐ€์ง„ ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ์กฐ์ธ ์ˆœ์„œ์ƒ ํ›„์ˆœ์œ„๋กœ ๋ฐ€๋ฆฌ๊ณ , ์™ธ๋ถ€ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ ๋ ˆ์ฝ”๋“œ ๋‹จ์œ„๋กœ ์ž„์‹œ ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ๋˜์–ด ์ฒ˜๋ฆฌ

  • ๋‚ด๋ถ€์—์„œ ์™ธ๋ถ€ ์ฟผ๋ฆฌ์˜ FROM ์ ˆ์— ์ •์˜๋œ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์„ ์ฐธ์กฐ ๊ฐ€๋Šฅ

ORDER BY

ORDER BY๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ์–ด๋–ค ์ˆœ์„œ๋กœ ์ •๋ ฌํ•˜์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์ ˆ์ธ๋ฐ, ๋ช…์‹œํ•˜์ง€ ์•Š์œผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ •๋ ฌ๋˜์–ด ๋ฐ˜ํ™˜๋œ๋‹ค.

  • ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์กฐํšŒ ๋œ ๊ฒฝ์šฐ์—” ์ธ๋ฑ์Šค์˜ ์ •๋ ฌ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ˜ํ™˜

  • InnoDB์—์„œ ํ’€ ํ…Œ์ด๋ธ” ์Šค์บ”์„ ํ•œ ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค ์ˆœ์„œ๋Œ€๋กœ ๋ฐ˜ํ™˜

  • SELECT ์ฟผ๋ฆฌ๊ฐ€ ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ ์กฐํšŒ๋์„ ๊ฒฝ์šฐ์—” ๋ ˆ์ฝ”๋“œ ์ˆœ์„œ๋ฅผ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ค์›€

์ฐธ๊ณ ์ž๋ฃŒ

Last updated

Was this helpful?