JOIN

์ด๋™์–ธยท2024๋…„ 8์›” 2์ผ

new world

๋ชฉ๋ก ๋ณด๊ธฐ
21/62
post-thumbnail

8.2 (๊ธˆ)

1. scope

๐Ÿ‘‰ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์— ๋”ฐ๋ฅธ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์Šค์ฝ”ํ”„๊ฐ€ ์žˆ๋‹ค.

1-1. Session Scope

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




1-2. ServletContext Scope

๐Ÿ‘‰ ์ˆ˜๋ช… : ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋˜๊ณ  ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์œ ์ง€
๐Ÿ‘‰ ๋ฒ”์œ„ : ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ณต์œ ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ ์‚ฌ์šฉ, ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ์œ ์šฉ
๐Ÿ‘‰ ์‚ฌ์šฉ์˜ˆ์‹œ : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ค์ • ์ •๋ณด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๋“ฑ
๐Ÿ‘‰ ์ ‘๊ทผ๋ฐฉ๋ฒ• : ServletContext ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ ‘๊ทผ




1-3. Request Scope

๐Ÿ‘‰ ์ˆ˜๋ช… : HTTP์š”์ฒญ์ด ์„œ๋ฒ„์— ๋„์ฐฉํ•˜์—ฌ ์‘๋‹ต์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์œ ์ง€๋จ.
๐Ÿ‘‰ ๋ฒ”์œ„ : HTTP์š”์ฒญ ๋‚ด์—์„œ๋งŒ ๋ฐ์ดํ„ฐ ๊ณต์œ , ๋‹ค๋ฅธ HTTP์š”์ฒญ์—์„œ๋Š” ์ƒˆ๋กœ์šด request scope๊ฐ€ ์ƒ์„ฑ๋จ.
๐Ÿ‘‰ ์‚ฌ์šฉ์˜ˆ์‹œ : ํผ ๋ฐ์ดํ„ฐ, ์‚ฌ์šฉ์ž ์š”์ฒญ์ฒ˜๋ฆฌ๋“ฑ ๋ฐ์ดํ„ฐ ์ž„์‹œ์ €์žฅ
๐Ÿ‘‰ ์ ‘๊ทผ๋ฐฉ๋ฒ• : HttpServletRequest ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ ‘๊ทผ



2. JOIN

๐Ÿ‘‰ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•˜์—ฌ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ.

2-1. tbl_category

create table tbl_category (
                              cno int auto_increment primary key,
                              cname varchar(50)
);

insert into tbl_category (cname) values ('Action');
insert into tbl_category (cname) values ('Drama');
insert into tbl_category (cname) values ('Dacu');
insert into tbl_category (cname) values ('Comedy');
insert into tbl_category (cname) values ('SF');
insert into tbl_category (cname) values ('Fantasy');


2-2. tbl_movie

create table tbl_movie (
                           mno int auto_increment primary key ,
                           title varchar(100) not null
);

insert into tbl_movie (title) values ('๋ฒ”์ฃ„๋„์‹œ');

insert into tbl_movie (title) values ('๋ฐ˜์ง€์˜์ œ์™•');

insert into tbl_movie (title) values ('ํ•ธ์ธ๊ฐ€์ด์ฆˆ');

insert into tbl_movie (title) values ('์•„๋งˆ์กด์˜ ๋ˆˆ๋ฌผ');

insert into tbl_movie (title) values ('์Šคํƒ€์›Œ์ฆˆ');

insert into tbl_movie (title) values ('๋„ˆ์˜ ์ด๋ฆ„์€');

2-3. tbl_movie_category

create table tbl_movie_category (
                                    mno int not null,
                                    cno int not null
);

select * from tbl_movie;

select * from tbl_category;

insert into tbl_movie_category (mno, cno) values (1,1);

insert into tbl_movie_category (mno, cno) values (1,4);

insert into tbl_movie_category (mno, cno) values (2,2);

insert into tbl_movie_category (mno, cno) values (2,5);

insert into tbl_movie_category (mno, cno) values (3,4);

insert into tbl_movie_category (mno, cno) values (2,6);

1. ํŠน์ •์˜ํ™”๊ฐ€ ์†ํ•œ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

select
    m.mno, m.title, c.cname
from
    tbl_movie m
    inner join
    tbl_movie_category tmc on m.mno = tmc.mno
    inner join
    tbl_category c on tmc.cno = c.cno
where m.mno = 1
;

๐Ÿ‘‰ ์ด๋ ‡๊ฒŒ ์ด๋„ˆ์กฐ์ธ์„ ํ•ด๋ฒ„๋ฆฌ๋ฉด 6๊ฐœ์ปฌ๋Ÿผ * 6๊ฐœ์ปฌ๋Ÿผ์œผ๋กœ 36๊ฐœ์˜์ปฌ๋Ÿผ์ด ๋งŒ๋“ค์–ด์ง€๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ํ•ด์„œ where ์กฐ๊ฑด์œผ๋กœ ๊ฐ€์ ธ์˜ค๋ฉด ์†๋„๊ฐ€ ๋„ˆ๋ฌด ๋А๋ ค์ง€๋ฏ€๋กœ on์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒ”์œ„๋ฅผ ์ค„์—ฌ์ค€๋‹ค.


2. ํŠน์ • ์นดํ…Œ๊ณ ๋ฆฌ์— ์†ํ•œ ์˜ํ™”๋ฅผ ์กฐํšŒ

select
    *
from
    tbl_category cat
    inner join
    tbl_movie_category tmc on cat.cno = tmc.cno
    inner join
    tbl_movie tm on tm.mno = tmc.mno
where
    cname='Action'
;

3. ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์˜ํ™”์˜ ์ˆ˜

select *
from
    tbl_category cat
    left outer join
    tbl_movie_category tmc on cat.cno = tmc.cno
order by cat.cno

๐Ÿ‘‰ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์˜ํ™”์˜ ์ˆ˜
๐Ÿ‘‰ ๊ธฐ์กด์˜ inner join์„ ์‚ฌ์šฉํ•˜๋ฉด on์— ๊ณตํ†ต์ ์ธ ๊ฐ’๋งŒ ๊ฐ€์ ธ์˜ค๋ฏ€๋กœ 3๋ฒˆ ์นดํ…Œ๊ณ ๋ฆฌ๋Š” ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ณ ๋กœ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ left outer join์„ ํ•œ๋‹ค๋ฉด ์นดํ…Œ๊ณ ๋ฆฌ ์ปฌ๋Ÿผ์€ ๋ชจ๋‘ ๋‹ค ์ถœ๋ ฅ๋˜๋„๋ก ํ•œ๋‹ค.

๊ทผ๋ฐ ๋ฌธ์ œ๋Š” 4๋ฒˆ์˜ ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ๋‘๊ฐœ๋กœ ๋‚˜์˜ค๋Š”๋ฐ ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด GROUP BY๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.


4. GROUP BY

๐Ÿ‘‰ ๋ถ€์„œ(๋ณ„)๋กœ ๋‚˜๋‰˜์–ด์ง€๋Š”๊ฒƒ.

select
    cno,max(cname),count(mno)
from
(
    select
        cat.cno, cat.cname, mno
    from
        tbl_category cat
        left outer join
        tbl_movie_category tmc on cat.cno = tmc.cno
    order by cat.cno
) m
group by cno
;

0๊ฐœ์˜ ๋Œ“๊ธ€