Sub Query

๋ถ€์†์งˆ์˜ (Sub Query)

  • ํ•˜๋‚˜์˜ SQL๋ฌธ ์•ˆ์— ๋‹ค๋ฅธ SQL์ด ์ค‘์ฒฉ๋œ (nested) ์งˆ์˜๋ฅผ ๋œปํ•œ๋‹ค.

  • ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์—์„œ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋กœ ํ˜„์žฌ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ์ •๋ณด๋ฅผ ์ฐพ๊ฑฐ๋‚˜ ๊ฐ€๊ณต ์‹œ ์‚ฌ์šฉ.

  • ๋‘ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ด€์‹œํ‚ฌ ๋•Œ๋Š” ์กฐ์ธ ํ˜น์€ ๋ถ€์†์งˆ์˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋‘˜ ์ค‘ ์–ด๋–ค ๊ฒƒ์„ ์„ ํƒํ• ์ง€๋Š” ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ์™€ ์–‘์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ, ๋ฐ์ดํ„ฐ๊ฐ€ ๋Œ€๋Ÿ‰์ผ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ํ•ฉ์ณ์„œ ์—ฐ์‚ฐํ•˜๋Š” ์กฐ์ธ๋ณด๋‹ค๋Š” ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ฐพ์•„์„œ ๊ณต๊ธ‰ํ•ด์ฃผ๋Š” ๋ถ€์†์งˆ์˜์˜ ์„ฑ๋Šฅ์ด ๋” ์ข‹๋‹ค.

  • ๋ถ€์†์งˆ์˜๋Š” ์œ„์น˜์™€ ์—ญํ• ์— ๋”ฐ๋ผ์„œ ๊ตฌ๋ถ„์ด ๋œ๋‹ค.

    ๋ช…์นญ

    ์œ„์น˜

    ์˜๋ฌธ ๋ฐ ๋™์˜์–ด

    ์„ค๋ช…

    ์Šค์นผ๋ผ ๋ถ€์†์งˆ์˜

    SELECT ์ ˆ

    scalar subqueery

    select ์ ˆ์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋‹จ์ผ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šค์นผ๋ผ ๋ถ€์†์งˆ์˜๋ผ๊ณ  ํ•œ๋‹ค.

    ์ธ๋ผ์ธ ๋ทฐ

    FROM์ ˆ

    inline view, table subquery

    from ์ ˆ์—์„œ ๊ฒฐ๊ณผ๋ฅผ ๋ทฐ(view) ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ธ๋ผ์ธ ๋ทฐ๋ผ๊ณ  ํ•œ๋‹ค.

    ์ค‘์ฒฉ์งˆ์˜

    WHERE์ ˆ

    nested subquery, predicate subquery

    wherer์ ˆ์— ์ˆ ์–ด์™€ ๊ฐ™์ด ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ฒฐ๊ณผ๋ฅผ ํ•œ์ •์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. (์ƒ๊ด€ ํ˜น์€ ๋น„์ƒ๊ด€ ํ˜•ํƒœ)

๋ถ€์†์งˆ์˜ ๋‹ค๋ฅธ ๋ถ„๋ฅ˜

  • ๋™์ž‘๋ฐฉ์‹

    • ๋ถ€์† ์งˆ์˜๊ฐ€ ์ฃผ ์งˆ์˜์˜ ๊ฐ’์„ ์ฐธ์กฐํ•˜๋Š” ์œ ๋ฌด์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜.

    • ์ƒ๊ด€ ๋ถ€์†์งˆ์˜: ์ฃผ ์งˆ์˜์˜ ํŠน์ • ์—ด๊ฐ’์„, ๋ถ€์†์งˆ์˜๊ฐ€ ์ƒ์†๋ฐ›์•„ ๋ถ€์†์งˆ์˜์˜ ์งˆ์˜์— ์‚ฌ์šฉํ•˜๋Š” ํ˜•ํƒœ

    • ๋น„์ƒ๊ด€ ๋ถ€์†์งˆ์˜(์ผ๋ฐ˜ ๋ถ€์† ์งˆ์˜): ๋…๋ฆฝ๋œ ์งˆ์˜๋ฅผ ์ˆ˜ํ–‰ํ•ด์„œ ๊ฒฐ๊ณผ๊ฐ’ ๊ฐ€์ ธ์˜ด

  • ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฐ๊ณผ ํ˜•ํƒœ

    • ๋ถ€์†์งˆ์˜๊ฐ€ ๋‹จ์ผํ–‰์„ ๋ฐ˜ํ™˜ํ•˜๋Š๋ƒ, ๋‹ค์ค‘ ํ–‰์„ ๋ฐ˜ํ™˜ํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜.

    • ๋‹จ์ผํ–‰ ๋ถ€์†์งˆ์˜: ๋ถ€์† ์งˆ์˜์˜ ๊ฒฐ๊ณผ ํ•˜๋‚˜์˜ ํ–‰์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์ฃผ ์งˆ์˜์— ์ „๋‹ฌ. (๋น„๊ต ์—ฐ์‚ฐ์ž์˜ ์ˆ˜ํ–‰์ด๋‚˜ ์Šค์นผ๋ผ ๋ถ€์†์งˆ์˜ ๋“ฑ์—์„œ ๋‚˜ํƒ€๋‚œ๋‹ค.)

    • ๋‹ค์ค‘ํ–‰ ๋ถ€์†์งˆ์˜: ๋ถ€์†์งˆ์˜์˜ ๊ฒฐ๊ณผ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ–‰์„ ๋ฐ˜ํ™˜ (IN ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ํ–‰ ์ฒ˜๋ฆฌ)

์Šค์นผ๋ผ ๋ถ€์†์งˆ์˜ ์˜ˆ

select ๋ฌธ

select (
    select name
    from customer cs
    where cs.custid = orders.custid
) as 'customer name', sum(saleprice)
from orders
group by orders.custid;

UPDATE ๋ฌธ

  • ๊ธฐ์กด ํ…Œ์ด๋ธ”์— ์ƒˆ๋กœ์šด ์—ด์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ์—ด์— ์ƒˆ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธ๋ฅผ ์ผ์ผ์ด ํ•ด์ฃผ๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๋‹ค.

  • ์Šค์นผ๋ผ ๋ถ€์†์งˆ์˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ, ์ผ๊ด„ ์ˆ˜์ • ๊ฐ€๋Šฅ.

update orders
set bname = (
        select bookname
        from book
        where book.bookid =  orders.bookid);

์ธ๋ผ์ธ ๋ทฐ - FROM ๋ถ€์†์งˆ์˜

  • from ์ ˆ์— ์‚ฌ์šฉํ•˜๋Š” ๋ถ€์†์งˆ์˜

  • ๋ทฐ(view): ๊ธฐ์กด ํ…Œ์ด๋ธ”๋กœ๋ถ€ํ„ฐ ์ผ์‹œ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”

  • SQL์˜ FROM์ ˆ์—๋Š” ํ…Œ์ด๋ธ”์ด๋ฆ„์ด ์œ„์น˜ํ•˜๋Š”๋ฐ, ์ธ๋ผ์ธ ๋ทฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณดํ†ต ํ…Œ์ด๋ธ”๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ.

  • ๋ถ€์†์งˆ์˜ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋‹ค์ค‘ ํ–‰, ๋‹ค์ค‘ ์—ด์ด์–ด๋„ ์ƒ๊ด€ ์—†๋‹ค.

  • ๋‹จ, ๊ฐ€์ƒ ํ…Œ์ด๋ธ”์ด๋ฏ€๋กœ ์ƒ๊ด€ ๋ถ€์†์งˆ์˜๋กœ๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€.

Last updated