
๐ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ฐ๋ฅธ ์ฌ๋ฌ ์ข ๋ฅ์ ์ค์ฝํ๊ฐ ์๋ค.
๐ ์๋ช
: ํด๋ผ์ด์ธํธ๊ฐ ์น ์ดํ๋ฆฌ์ผ์ด์
์ ์ ์ํ์ฌ ์ธ์
์์ฑ, ์ธ์
์ด ์ข
๋ฃ๋ ๋๊น์ง ์ ์ง๋จ.
๐ ๋ฒ์ : ๊ฐ์ ์ฌ์ฉ์๊ฐ ์ฌ๋ฌ ํ์ด์ง๋ฅผ ๊ฑฐ์น ๋ ์ธ์
์ ํตํด ๋ฐ์ดํฐ ์ ์ง.
๐ ์ฌ์ฉ์์ : ๋ก๊ทธ์ธ ์ ๋ณด, ์ฌ์ฉ์ ์ค์ , ์ฅ๋ฐ๊ตฌ๋์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ์ฌ์ฉ๋จ.
๐ ์ ๊ทผ๋ฐฉ๋ฒ : ์๋ธ๋ฆฟ์์๋ httpSession ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ ์ ๊ทผ.
๐ ์๋ช
: ์น ์ ํ๋ฆฌ์ผ์ด์
์ด ์์๋๊ณ ์ข
๋ฃ๋ ๋๊น์ง ์ ์ง
๐ ๋ฒ์ : ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์
์์ ๊ณต์ ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋๋ฐ ์ฌ์ฉ, ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์ ๊ทผ ํ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ์ ์ฉ
๐ ์ฌ์ฉ์์ : ์ ํ๋ฆฌ์ผ์ด์
์ ์ค์ ์ ๋ณด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋ฑ
๐ ์ ๊ทผ๋ฐฉ๋ฒ : ServletContext ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ทผ
๐ ์๋ช
: HTTP์์ฒญ์ด ์๋ฒ์ ๋์ฐฉํ์ฌ ์๋ต์ด ์๋ฃ๋ ๋๊น์ง ์ ์ง๋จ.
๐ ๋ฒ์ : HTTP์์ฒญ ๋ด์์๋ง ๋ฐ์ดํฐ ๊ณต์ , ๋ค๋ฅธ HTTP์์ฒญ์์๋ ์๋ก์ด request scope๊ฐ ์์ฑ๋จ.
๐ ์ฌ์ฉ์์ : ํผ ๋ฐ์ดํฐ, ์ฌ์ฉ์ ์์ฒญ์ฒ๋ฆฌ๋ฑ ๋ฐ์ดํฐ ์์์ ์ฅ
๐ ์ ๊ทผ๋ฐฉ๋ฒ : HttpServletRequest ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ทผ
๐ ๋ ๊ฐ ์ด์์ ํ ์ด๋ธ์ ์ฐ๊ฒฐํ์ฌ ํ๋์ ๊ฒฐ๊ณผ ์งํฉ์ผ๋ก ๋ฐํํ๋๋ฐ ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ.
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');
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 ('๋์ ์ด๋ฆ์');
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);
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์ด๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ์๋ฅผ ์ค์ฌ์ค๋ค.
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'
;
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๋ฅผ ์ฌ์ฉํ๋ค.
๐ ๋ถ์(๋ณ)๋ก ๋๋์ด์ง๋๊ฒ.
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
;