SQL subquery - swkim0128/PARA GitHub Wiki


type: Database archive: false

์„œ๋ธŒ ์ฟผ๋ฆฌ (Subquery)


์„œ๋ธŒ์ฟผ๋ฆฌ๋ž€ ๋‹ค๋ฅธ ์ฟผ๋ฆฌ ๋‚ด๋ถ€์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” select ๋ฌธ์„ ์˜๋ฏธํ•œ๋‹ค.

์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์ฟผ๋ฆฌ๋ฅผ ์™ธ๋ถ€ ์ฟผ๋ฆฌ(outer query) ๋˜๋Š” ๋ฉ”์ธ ์ฟผ๋ฆฌ๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, ์„œ๋ธŒ ์ฟผ๋ฆฌ๋Š” ๋‚ด๋ถ€ ์ฟผ๋ฆฌ(inner query)๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.

์„œ๋ธŒ ์ฟผ๋ฆฌ๋Š” ๋น„๊ต ์—ฐ์‚ฐ์ž์˜ ์˜ค๋ฅธ์ชฝ์— ๊ธฐ์ˆ ํ•ด์•ผ ํ•˜๊ณ  ๋ฐ˜๋“œ์‹œ ๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ์ ธ ์žˆ์–ด์•ผ๋งŒ ํ•œ๋‹ค.

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


์ค‘์ฒฉ ์„œ๋ธŒ ์ฟผ๋ฆฌ(Nested Subquery) where ๋ฌธ์— ์ž‘์„ฑํ•˜๋Š” ์„œ๋ธŒ ์ฟผ๋ฆฌ

  1. ๋‹จ์ผ ํ–‰
  2. ๋ณต์ˆ˜(๋‹ค์ค‘) ํ–‰
  3. ๋‹ค์ค‘ ์ปฌ๋Ÿผ

์ธ๋ผ์ธ ๋ทฐ(inline view) - from ๋ฌธ์— ์ž‘์„ฑํ•˜๋Š” ์„œ๋ธŒ ์ฟผ๋ฆฌ

์Šค์นผ๋ผ ์„œ๋ธŒ ์ฟผ๋ฆฌ (Sclalar subquery) - select ๋ฌธ์— ์ž‘์„ฑํ•˜๋Š” ์„œ๋ธŒ ์ฟผ๋ฆฌ

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


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

  • ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ๋ฐ˜๋“œ์‹œ ()๋กœ ๊ฐ์‹ธ์•ผ ํ•œ๋‹ค.
  • ์„œ๋ธŒ ์ฟผ๋ฆฌ๋Š” ๋‹จ์ผ ํ–‰ ๋˜๋Š” ๋‹ค์ค‘ ํ–‰ ๋น„๊ต ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋œ๋‹ค.

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

  • select
  • from
  • where
  • having
  • order by
  • insert ๋ฌธ์˜ values
  • update ๋ฌธ์˜ set

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


Nested Subquery - ๋‹จ์ผ ํ–‰

  • ์„œ๋ธŒ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‹จ์ผํ–‰์„ ๋ฆฌํ„ด.

Nested Subquery - ๋‹ค์ค‘ ํ–‰

  • ์„œ๋ธŒ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค์ค‘ํ–‰์„ ๋ฆฌํ„ด : IN

    !Untitled 57.png

  • ์„œ๋ธŒ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค์ค‘ํ–‰์„ ๋ฆฌํ„ด : ANY

    !Untitled 1 35.png

  • ์„œ๋ธŒ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค์ค‘ํ–‰์„ ๋ฆฌํ„ด : ALL

    !Untitled 2 34.png

Nested Subquery - ๋‹ค์ค‘ ์—ด

  • ์„œ๋ธŒ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค์ค‘์—ด์„ ๋ฆฌํ„ด.

    !Untitled 3 33.png

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

  • FROM ์ ˆ์— ์‚ฌ์šฉ๋˜๋Š” ์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์ธ๋ผ์ธ ๋ทฐ(inline view) ๋ผ ํ•œ๋‹ค.

  • ์„œ๋ธŒ ์ฟผ๋ฆฌ๊ฐ€ from์ ˆ์— ์‚ฌ์šฉ๋˜๋ฉด ๋ทฐ(view)์ฒ˜๋Ÿผ ๊ฒฐ๊ณผ๊ฐ€ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋œ ํ…Œ์ด๋ธ”๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • ์ž„์‹œ์ ์ธ ๋ทฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ์ €์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค.

  • ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋œ ํ…Œ์ด๋ธ”์ด๊ธฐ ๋•Œ๋ฌธ์— column์„ ์ž์œ ๋กญ๊ฒŒ ์ฐธ์กฐ ๊ฐ€๋Šฅ.

    !Untitled 4 29.png

์ธ๋ผ์ธ ๋ทฐ(inline view) - TopN ์งˆ์˜

  • ๋ชจ๋“  ์‚ฌ์›์˜ ์‚ฌ๋ฒˆ, ์ด๋ฆ„, ๊ธ‰์—ฌ๋ฅผ ์ถœ๋ ฅ.

    ์‚ฌ์› ์ •๋ณด๋ฅผ ๊ธ‰์—ฌ์ˆœ์œผ๋กœ ์ •๋ ฌ

    ํ•œ ํŽ˜์ด์ง€๋‹น 5๋ช…์ด ์ถœ๋ ฅ

    ํ˜„์žฌ ํŽ˜์ด์ง€๊ฐ€ 3ํŽ˜์ด์ง€๋ผ๊ณ  ๊ฐ€์ •.

    !Untitled 5 26.png

์ธ๋ผ์ธ ๋ทฐ(inline view) - limit ํ™œ์šฉ (Mysql)

  • ๋ชจ๋“  ์‚ฌ์›์˜ ์‚ฌ๋ฒˆ, ์ด๋ฆ„, ๊ธ‰์—ฌ๋ฅผ ์ถœ๋ ฅ.

    ์‚ฌ์› ์ •๋ณด๋ฅผ ๊ธ‰์—ฌ์ˆœ์œผ๋กœ ์ •๋ ฌ.

    ํ•œ ํŽ˜์ด์ง€๋‹น 5๋ช…์ด ์ถœ๋ ฅ

    ํ˜„์žฌ ํŽ˜์ด์ง€๊ฐ€ 3ํŽ˜์ด์ง€๋ผ๊ณ  ๊ฐ€์ •

    !Untitled 6 23.png

์Šค์นผ๋ผ ์„œ๋ธŒ ์ฟผ๋ฆฌ (Scalar Subquery)

  • select ์ ˆ์— ์žˆ๋Š” ์„œ๋ธŒ ์ฟผ๋ฆฌ

  • ํ•œ ๊ฐœ์˜ ํ–‰๋งŒ ๋ฐ˜ํ™˜

    ์ง๊ธ‰ ์•„์ด๋””๊ฐ€ IT_PROG์ธ ์‚ฌ์›์˜ ์‚ฌ๋ฒˆ, ์ด๋ฆ„, ์ง๊ธ‰ ์•„์ด๋””, ๋ถ€์„œ์ด๋ฆ„

    !Untitled 7 20.png

    60๋ฒˆ ๋ถ€์„œ์— ๊ทผ๋ฌดํ•˜๋А ์‚ฌ์›์˜ ์‚ฌ๋ฒˆ, ์ด๋ฆ„, ๊ธ‰์—ฌ, ๋ถ€์„œ๋ฒˆํ˜ธ, 60๋ฒˆ๋ถ€์„œ์˜ ํ‰๊ท  ๊ธ‰์—ฌ

    !Untitled 8 18.png

์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•œ create

  • employees table์„ emp_copy๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋ณต์‚ฌ(์ปฌ๋Ÿผ ์ด๋ฆ„ ๋™์ผ)

    create table emp_copy
    select * from employees;
  • employees table์˜ ๊ตฌ์กฐ๋งŒ emp_blank๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ƒ์„ฑ(์ปฌ๋Ÿผ ์ด๋ฆ„ ๋™์ผ)

    create table emp_blank
    select * from employees
    where 1 = 0;
  • 50 ๋ฒˆ ๋ถ€์„œ์˜ ์‚ฌ๋ฒˆ(eid), ์ด๋ฆ„(name), ๊ธ‰์—ฌ(sal), ๋ถ€์„œ๋ฒˆํ˜ธ(did)๋งŒ emp50์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ƒ์„ฑ

    !Untitled 9 17.png

์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•œ insert

  • employees table์—์„œ ๋ถ€์„œ๋ฒˆํ˜ธ๊ฐ€ 80์ธ ์‚ฌ์›์˜ ๋ชจ๋“  ์ •๋ณด๋ฅผ emp_blank์— insert.

    !Untitled 10 15.png

์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•œ update

  • employees table์˜ ๋ชจ๋“  ์‚ฌ์›์˜ ํ‰๊ท  ๊ธ‰์—ฌ๋ณด๋‹ค ์ ๊ฒŒ ๋ฐ›๋Š” emp50 table์˜ ์‚ฌ์›์˜ ๊ธ‰์—ฌ๋ฅผ 500 ์ธ์ƒ.

    !Untitled 11 13.png

์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•œ delete

  • employees table์˜ ๋ชจ๋“  ์‚ฌ์›์˜ ํ‰๊ท  ๊ธ‰์—ฌ๋ณด๋‹ค ์ ๊ฒŒ ๋ฐ›๋Š” emp50 table์˜ ์‚ฌ์›์€ ํ‡ด์‚ฌ.

    !Untitled 12 12.png

โš ๏ธ **GitHub.com Fallback** โš ๏ธ