subQuery

Sub Query

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

=> ์ฟผ๋ฆฌ๋ฌธ ์•ˆ์— ์ฟผ๋ฆฌ๋ฌธ์„ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋ฒ• (SELECT์ ˆ/ WHERE์ ˆ/FROM ์ ˆ ์•ˆ์— ๋“ค์–ด๊ฐ€๋Š” ์ฟผ๋ฆฌ๋ฅผ ํ†ต์นญํ•˜์—ฌ ์„œ๋ธŒ์ฟผ๋ฆฌ) => ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ์ƒ๊ฐํ•˜๋ฉด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

join์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•œ ๋ฐฉ๋ฒ•

select la.lano, l.titl, m.name, s.work, la.rdt, r.name, m2.name, mr.posi
from lect_appl la 
        inner join memb m on la.mno=m.mno
        inner join stnt s on la.mno=s.mno 
        inner join lect l on la.lno=l.lno
        left outer join room r on l.rno=r.rno 
        left outer join memb m2 on l.mno=m2.mno 
        left outer join mgr mr on l.mno=mr.mno;

select ์ ˆ์— ์„œ๋ธŒ์ฟผ๋ฆฌ ์‚ฌ์šฉํ•˜๊ธฐ

  1. 1๋‹จ๊ณ„: ์ˆ˜๊ฐ•์‹ ์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅ

select 
  la.lano, 
  la.lno, 
  la.mno, 
  date_format(la.rdt, '%Y-%m-%d') reg_dt
from lect_appl la;
  1. 2๋‹จ๊ณ„ : ์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ•์˜๋ช…์„ ๊ฐ€์ ธ์˜ค๊ธฐ

select 
    la.lano, 
    (select titl from lect where lno=la.lno) as lect_title, 
    la.mno, 
    la.rdt
from lect_appl la;
  1. 3๋‹จ๊ณ„ : ์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•™์ƒ๋ช…์„ ๊ฐ€์ ธ์˜ค๊ธฐ

select 
    la.lano, 
    (select titl from lect where lno=la.lno) as lect_title, 
    (select name from memb where mno=la.mno) as stud_name,
    la.rdt
from lect_appl la;

from ์ ˆ์— ์„œ๋ธŒ์ฟผ๋ฆฌ ์‚ฌ์šฉํ•˜๊ธฐ

  1. 0๋‹จ๊ณ„ : ๊ฐ•์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

    select
     l.lno,
     l.titl,
     l.rno,
     l.mno
    from lect l;
  2. 1๋‹จ๊ณ„ : ๊ฐ•์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” select๋ฅผ ์ค€๋น„ํ•œ๋‹ค. => ์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ•์˜์‹ค ์ด๋ฆ„๊ณผ ๋งค๋‹ˆ์ € ์ด๋ฆ„, ์ง์œ„ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ

select 
    l.lno, 
    l.titl, 
    (select name from room where rno=l.rno) as room_name, 
    (select name from memb where mno=l.mno) as manager_name,
    (select posi from mgr where mno=l.mno) as manager_posi
from lect l
  1. 2๋‹จ๊ณ„: ์œ„์—์„œ ์ค€๋น„ํ•œ select ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ƒ ํ…Œ์ด๋ธ”๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด์˜ lect_appl ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธํ•œ๋‹ค

select 
    la.lano, 
    /*(select titl from lect where lno=la.lno) as lect_title,*/ 
    (select name from memb where mno=la.mno) as stud_name,
    lec.titl,
    lec.room_name,
    lec.manager_name,
    lec.manager_posi
from lect_appl la 
    join (select 
                l.lno, 
                l.titl, 
                (select name from room where rno=l.rno) as room_name, 
                (select name from memb where mno=l.mno) as manager_name,
                (select posi from mgr where mno=l.mno) as manager_posi
            from lect l) as lec on la.lno=lec.lno;
  • from ์ ˆ์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ธŒ ์ฟผ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๋ฉด, ๊ฐ€์ƒ ํ…Œ์ด๋ธ”์ธ view๋กœ ์ •์˜ํ•ด๋†“๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํŽธํ•˜๋‹ค.

create view lect2 as
select 
    l.lno, 
    l.titl, 
    (select name from room where rno=l.rno) as room_name, 
    l.mno as manager_no,
    (select name from memb where mno=l.mno) as manager_name,
    (select posi from mgr where mno=l.mno) as manager_posi
from lect l;
  • ์œ„์˜ ์งˆ์˜๋ฌธ์„ view๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์‹œ ์ž‘์„ฑํ•ด๋ณด์ž!

select 
    la.lano, 
    (select titl from lect where lno=la.lno) as lect_title, 
    (select name from memb where mno=la.mno) as stud_name,
    lec.titl,
    lec.room_name,
    lec.manager_name,
    lec.manager_posi
from lect_appl la 
    join lect2 lec on la.lno=lec.lno;

where ์ ˆ์— ์„œ๋ธŒ์ฟผ๋ฆฌ ์‚ฌ์šฉํ•˜๊ธฐ

  • ๊ณผ์žฅ ๋˜๋Š” ๋Œ€๋ฆฌ ๋งค๋‹ˆ์ €๊ฐ€ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋Š” ์ˆ˜๊ฐ• ์‹ ์ฒญ๋งŒ ์ถ”์ถœํ•˜๊ธฐ

select 
    la.lano, 
    /* (select titl from lect where lno=la.lno) as lect_title, */ 
    (select name from memb where mno=la.mno) as stud_name,
    lec.titl,
    lec.room_name,
    /* lec.manager_no, */
    lec.manager_name,
    lec.manager_posi
from lect_appl la 
    join lect2 as lec on la.lno=lec.lno 
where
    lec.manager_no in (select mno from mgr where posi in ('๊ณผ์žฅ', '์ฃผ์ž„'));

Last updated

Was this helpful?