[๊ตฌ๋””์•„์นด๋ฐ๋ฏธ IT๊ตญ๋น„์ง€์›] ์˜ค๋ผํด์„ ์ด์šฉํ•˜์—ฌ sql์— ๋Œ€ํ•œ ์ด๋ก ์„ ๋ฐฐ์šฐ๊ณ , ๋‚จ๋Š” ์‹œ๊ฐ„์—๋Š” ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ํšŒ์›์ „์šฉ ๊ฒŒ์‹œํŒ ํ”„๋กœ์ ํŠธ ์ž‘์—…์„ ํ–ˆ๋‹ค.


๐Ÿ’ก SQL


-- ํ•œ์ค„ ์ฃผ์„
/* ์—ฌ๋Ÿฌ์ค„ ์ฃผ์„ */

-- 1. ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ ํ™•์ธ
desc emp; -- empํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ๋ฅผ ํ™•์ธํ•œ๋‹ค describe emp์˜ ์•ฝ์‹ํ‘œํ˜„์ž„

-- 2. [select] ๋ชจ๋“  ์—ด๊ณผ ๋ชจ๋“  ํ–‰์„ ์กฐํšŒ
select * -- 2
from emp; -- 1

-- 3. [select] ๋ชจ๋“  ์—ด๊ณผ ๋ชจ๋“  ํ–‰์„ ์กฐํšŒ (์—ด์˜ ์ˆœ์„œ๋ฅผ ์ง€์ •)
select deptno, empno, ename, job, mgr, hiredate, sal, comm -- 2
from emp; -- 1

-- 4. [select] ์›ํ•˜๋Š” ์—ด๊ณผ ๋ชจ๋“  ํ–‰์„ ์กฐํšŒ
select empno, ename, sal, comm -- 2
from emp; -- 1

-- 5. [select] ์กฐํšŒ๋œ ๊ฒฐ๊ณผ๋ฌผ(ResultSet=๊ฒฐ๊ณผ์…‹)์˜ ์—ด ์ด๋ฆ„์— ๋ณ„์นญ(as) ์‚ฌ์šฉ
select empno as ๋ฒˆํ˜ธ, ename as ์ด๋ฆ„ -- 2
from emp; -- 1
-- as ํ‚ค์›Œ๋“œ๋Š” ์ƒ๋žต๊ฐ€๋Šฅ
select empno ๋ฒˆํ˜ธ, ename ์ด๋ฆ„ -- 2
from emp; -- 1

-- 6. [select] ์›๋ณธ ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ƒˆ๋กœ์šด ์—ด์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์กฐํšŒ(์ถœ๋ ฅ)
-- 6-1) ๊ฐ’
-- ๋ฌธ์ž๊ฐ’์€ ('') ์‚ฌ์šฉ
-- ์ƒˆ๋กœ์šด ๊ฐ’์€ ์ปฌ๋Ÿผ๋ช…์ด ์—†์œผ๋ฏ€๋กœ ๋ณ„์นญ์„ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค
select empno, ename, 100 ์ ์ˆ˜, 'ํ•œ๊ตญ' ๋‚˜๋ผ -- 2
from emp; -- 1

-- 6-2) ๊ณ„์‚ฐ์‹(ํ•จ์ˆ˜)
-- ๋‹จ์ˆœ ๊ณ„์‚ฐ์‹ ์™ธ์—๋„ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์˜ ๊ฐ’์„ ์ด์šฉํ•œ ๊ณ„์‚ฐ์‹๋„ ๊ฐ€๋Šฅ
-- || : ๋ฌธ์ž์—ด์„ ํ•ฉ์น˜๋Š” ์—ฐ์‚ฐ์ž
-- nvl(x,y) : x๊ฐ€ null์•„๋‹ˆ๋ฉด x๊ฐ’์„, null์ด๋ฉด y๊ฐ’์„ ๋ฐ˜ํ™˜
select empno, ename, 10*5, sal, sal*2, ename||' '||job, comm, nvl(comm, 0)
from emp;

-- 6-3) ์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ
-- ์„œ๋ธŒ์ฟผ๋ฆฌ : ํ•˜๋‚˜์˜ ์ฟผ๋ฆฌ ์•ˆ์— ํฌํ•จ๋œ ๋˜ ํ•˜๋‚˜์˜ ์ฟผ๋ฆฌ(=์ž์‹์ฟผ๋ฆฌ)
-- ์Šค์นผ๋ผ : ๊ฒฐ๊ณผ๊ฐ’์ด ๋‹จ ํ•˜๋‚˜์˜ ๊ฐ’(ํ–‰)์ด์–ด์•ผ ํ•˜๋ฏ€๋กœ select๋ฌธ์—์„œ where์ ˆ์„ ์‚ฌ์šฉ
select empno, ename, (select ename from emp where empno=7839) ceo
from emp;

-- 7. ์˜์‚ฌ์ปฌ๋Ÿผ(rowid, rownum)์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ถœ๋ ฅ
-- ์˜์‚ฌ์ปฌ๋Ÿผ : ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ํ…Œ์ด๋ธ”์— ์ €์žฅ๋˜์ง€ ์•Š๋Š” ์ปฌ๋Ÿผ
/*  rowid : ๋…ผ๋ฆฌ์ ์ธ ๋ฐ์ดํ„ฐ ๋‹จ์œ„(=ํ–‰)์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ๊ฐ’,
            ์ค‘๋ณต์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜์ง€ ์•Š์€ ์œ ์ผํ•œ ๊ฐ’
    rownum : select์ ˆ์ด ์‹คํ–‰๋˜๋Š” ์‹œ์ ์— ์ˆœ์„œ๋Œ€๋กœ ํ–‰๋ฒˆํ˜ธ๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ๊ฒฐ๊ณผ์…‹์„ ์ถœ๋ ฅ */
select rowid, rownum, empno, ename
from emp;
/*  ์ฃผ์˜ํ• ์ ) order by์ ˆ๊ณผ rownum์„ ๊ฐ™์ด ์‚ฌ์šฉ์‹œ, order by์ ˆ์€ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์—
            ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ข… ๊ฒฐ๊ณผ์…‹์˜ rownum์ด ํ•ญ์ƒ ์ˆœ์ฐจ์ ์ด์ง€๋Š” ์•Š๋‹ค! */
select rowid, rownum, empno, ename
from emp
order by ename asc;

-- 8. dual ํ…Œ์ด๋ธ”์— ์—ด ์ถ”๊ฐ€ํ•˜์—ฌ ๊ณ„์‚ฐํ•˜๊ธฐ
/*  dual ํ…Œ์ด๋ธ” : 1ํ–‰์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ถœ๋ ฅํ•˜๊ณ ์ž ํ• ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ…Œ์ด๋ธ”
                ํ•จ์ˆ˜(๊ณ„์‚ฐ)์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ž„์‹œ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹๋‹ค */
desc dual;
-- 1ํ–‰ 1์—ด
select * from dual; 

/*  sysdate : ์˜ค๋Š˜ ๋‚ ์งœ๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜, ํŠน์ • ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—
            from์ ˆ ๋’ค์— ํŠน์ • ํ…Œ์ด๋ธ” ๋ช…์„ ์ž…๋ ฅํ•ด์•ผํ•œ๋‹ค */
-- emp ํ–‰์˜ ์ˆ˜๋งŒํผ ์˜ค๋Š˜ ๋‚ ์งœ๊ฐ€ ์ถœ๋ ฅ๋จ
select sysdate from emp; 
-- dual์€ 1ํ–‰๋งŒ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋Š˜ ๋‚ ์งœ 1ํ–‰๋งŒ ์ถœ๋ ฅ๋จ
select sysdate from dual;

-- ๋‹จ์ˆœ ๊ณ„์‚ฐ
select 10+3 from dual;
select 10-3 from dual;
select 10*3 from dual;
select 10/3 from dual;
select mod(10, 3) from dual; -- mod() : ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜
select 10+3, 10-3, 10*3, 10/3 from dual; -- 1ํ–‰์— ๋ชจ๋“  ๊ฒฐ๊ณผ๊ฐ’์„ ์ถœ๋ ฅ



/*  where์ ˆ
    : from์ ˆ์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ํ•œํ–‰ ํ•œํ–‰์”ฉ where์ ˆ์— ๋Œ€์ž…์‹œ์ผœ์„œ
      where์ ˆ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ฐธ์ธ ํ–‰๋งŒ ๋‚จ๊ธด๋‹ค */
select * -- 3
from emp -- 1
where deptno = 10; --2
-- deptno๊ฐ€ 10์ธ ํ–‰๋งŒ ์ถœ๋ ฅ๋จ

select * -- 3
from emp -- 1
where 1 = 1; -- 2
-- 1 = 1;์€ ๋ฌด์กฐ๊ฑด ์ฐธ์ด๋ฏ€๋กœ ๋ชจ๋“  ํ–‰์ด ์ถœ๋ ฅ๋จ

select * -- 3
from emp -- 1
where 1 = 0; -- 2
-- 1 = 0;์€ ๋ฌด์กฐ๊ฑด ๊ฑฐ์ง“์ด๋ฏ€๋กœ ์•„๋ฌด ํ–‰๋„ ์ถœ๋ ฅ๋˜์ง€ ์•Š์Œ


/* where์ ˆ์—์„œ rownum ์‚ฌ์šฉ์‹œ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ์…‹์ด ์ถœ๋ ฅ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค
    where์ ˆ์ด select์ ˆ๋ณด๋‹ค ๋จผ์ € ์‹คํ–‰๋œ๋‹ค.
    ์ฆ‰, from์ ˆ ๊ฒฐ๊ณผ์…‹์—๋Š” rownum์ด ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค */
select rownum, ename
from emp
where rownum < 5;
-- rownum์€ 1๋ถ€ํ„ฐ ์ง„ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— where์ ˆ์ด ์ฐธ์ด๋ฏ€๋กœ ์‹คํ–‰๋จ

select rownum, ename
from emp
where rownum > 5;
-- rownum์€ 1๋ถ€ํ„ฐ ์ง„ํ–‰๋˜๋Š”๋ฐ, 1>5๋Š” ๊ฑฐ์ง“์ด๋ฏ€๋กœ ์‹คํ–‰์ž์ฒด๊ฐ€ ๋˜์ง€ ์•Š์Œ

select *
from (select rownum rnum, ename
        from emp) t
where rnum > 5;
-- ์ด๋Ÿด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด Inline View(์ธ๋ผ์ธ๋ทฐ)์ด๋‹ค
-- ์ธ๋ผ์ธ๋ทฐ : from์ ˆ์— ์‚ฌ์šฉ๋˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ



-- ์—ฐ์‚ฐ์ž
/* 1. ๋น„๊ต์—ฐ์‚ฐ์ž
    ์ˆซ์ž, ๋ฌธ์ž, ๋‚ ์งœ ๋น„๊ต์— ๋‹ค ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค
    =, !=, <>, >, <, >=, <=
    like ์—ฐ์‚ฐ์ž : ๋ฌธ์ž์—๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ, ๋ฌธ์ž์—์„œ ํŠน์ • ์ผ๋ถ€๋งŒ ๊ฐ™์•„๋„ ์ฐธ์œผ๋กœ ๋ฐ˜ํ™˜ */
select *
from emp
where empno > 7839; -- ์ˆซ์ž๋น„๊ต

select *
from emp
where ename < 'KING'; -- ๋ฌธ์ž๋น„๊ต
-- ๋ฌธ์ž๊ฐ’์€ ์ž‘์€๋”ฐ์˜ดํ‘œ('')๋ฅผ ์จ์•ผํ•œ๋‹ค, ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค

select *
from emp
where hiredate <= sysdate; -- ํ•จ์ˆ˜๋น„๊ต (๋‚ ์งœ)

-- like ์—ฐ์‚ฐ์ž
select *
from emp
where ename like 'S'; -- ename์ด S์ธ์ง€
/*  S% : S๋กœ ์‹œ์ž‘, %S : S๋กœ ๋๋‚จ, %S% S๊ฐ€ ๋“ค์–ด๊ฐ€๋Š”์ง€
    S_ : S๋กœ ์‹œ์ž‘ํ•˜๋ฉด์„œ ๋‘๊ธ€์ž, S____ : S๋กœ ์‹œ์ž‘ํ•˜๋ฉด์„œ ๋‹ค์„ฏ๊ธ€์ž  */

-- null๊ฐ’์€ ๋น„๊ต์—ฐ์‚ฐ์ž๋กœ ๋น„๊ตํ•  ์ˆ˜ ์—†๋‹ค
-- is null ๋˜๋Š” is not null ์‚ฌ์šฉ
select *
from emp
where comm is not null;
select *
from emp
where comm is null;

-- null๊ฐ’์˜ ์ผ๋ฐ˜ ์—ฐ์‚ฐ
-- ์ˆซ์ž์—ฐ์‚ฐ์€ ๋ฌด์กฐ๊ฑด null๊ฐ’์ด ๋ฐ˜ํ™˜๋œ๋‹ค
select null+10 from dual;
select null*10 from dual;
select mod(null, 10) from dual;
-- ๋ฌธ์ž์—ฐ์‚ฐ์€ null์„ ๊ณต๋ฐฑ์œผ๋กœ ๋ณ€ํ™˜ ํ›„ ์—ฐ์‚ฐ๋œ๋‹ค
select null||'๊ตฌ๋””' from dual; 

-- null๊ฐ’์ธ ๊ฒฝ์šฐ ์ˆซ์ž์—ฐ์‚ฐ ํ•˜๋Š” ๋ฐฉ๋ฒ•
-- nvl ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉ : null์ธ ๊ฒฝ์šฐ 0์œผ๋กœ ์น˜ํ™˜ํ•œ๋‹ค
select ename, sal+nvl(comm, 0) ์ด๊ธ‰์—ฌ
from emp;

-- where์ ˆ์˜ ์„œ๋ธŒ์ฟผ๋ฆฌ
-- ๊ผญ ์Šค์นผ๋ผ๋งŒ ๋“ค์–ด๊ฐ€์ง€๋Š” ์•Š๋Š”๋‹ค
select ename ์ด๊ธ‰์—ฌ
from emp
where deptno = (select deptno from dept where dname = 'SALES');



-- 2. ๋…ผ๋ฆฌ์—ฐ์‚ฐ์ž
-- or ์—ฐ์‚ฐ์ž
select *
from emp
where empno = 7839 or deptno = 30;

select * 
from emp
where empno = 7369 or empno = 7788 or empno = 7900;
-- IN์„ ์‚ฌ์šฉํ•˜๋ฉด ๋” ๊ฐ€๋…์„ฑ ์ข‹๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค
select *
from emp
where empno in (7369, 7788, 7900); -- ์œ„ ์ฟผ๋ฆฌ์™€ ๋™์ผํ•œ ์ฟผ๋ฆฌ

select *
from emp
where comm = 0 or comm is null;
-- ๋‹จ, null ๋น„๊ต์‹œ์—๋Š” IN์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค
select *
from emp
where comm in (0, null);
-- comm = 0 or comm = null ๋กœ ํ•ด์„๋˜๋ฏ€๋กœ

-- and ์—ฐ์‚ฐ์ž
select *
from emp
where deptno = 30 and sal < 2000;

select *
from emp
where sal >= 1500 and sal <=3000;
-- between์„ ์‚ฌ์šฉํ•˜๋ฉด ๋” ๊ฐ€๋…์„ฑ ์ข‹๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค
select *
from emp
where sal between 1500 and 3000; -- ์œ„ ์ฟผ๋ฆฌ์™€ ๋™์ผํ•œ ์ฟผ๋ฆฌ

-- any ์—ฐ์‚ฐ์ž์™€ all ์—ฐ์‚ฐ์ž

-- any ์—ฐ์‚ฐ์ž : ํ•œ๊ฐœ๋ผ๋„ ๋งŒ์กฑํ•˜๋ฉด ์ฐธ์ด๋‹ค, or์—ฐ์‚ฐ์ž์™€ ๋™์ผํ•œ ์—ญํ• 
-- in๊ณผ์˜ ์ฐจ์ด์ ์€ ๋น„๊ต์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค
select *
from emp
where sal > any(1000, 3000); -- sal > 1000

-- all ์—ฐ์‚ฐ์ž : ๋ชจ๋‘ ๋งŒ์กฑํ•˜๋ฉด ์ฐธ์ด๋‹ค, and์—ฐ์‚ฐ์ž์™€ ๋™์ผํ•œ ์—ญํ• 
select *
from emp
where sal > all(1000, 3000); -- sal < 3000

-- any ์—ฐ์‚ฐ์ž์™€ all ์—ฐ์‚ฐ์ž๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค
select *
from emp
where deptno in (select deptno from dept where deptno < 30);

select *
from emp
where deptno > all (select deptno from dept where deptno < 30);

select *
from emp
where deptno > any (select deptno from dept where deptno < 30);



์ฟผ๋ฆฌ์ง„ํ–‰์ˆœ์„œ

select * from emp; -- 1๋ฒˆ ๊ฒฐ๊ณผ์…‹

select empno ๋ฒˆํ˜ธ, sysdate ์˜ค๋Š˜๋‚ ์งœ -- 3
from emp -- 1
where 1=1; -- 2

select ename, deptno -- 3
from emp e -- 1 ํ…Œ์ด๋ธ” ๋ณ„์นญ์€ ์ƒ๋žต ๊ฐ€๋Šฅ
where e.deptno = 30; -- 2 ํ…Œ์ด๋ธ” ๋ณ„์นญ์€ ์ƒ๋žต ๊ฐ€๋Šฅ

select ename, deptno ๋ฒˆํ˜ธ -- 3
from emp -- 1
where ๋ฒˆํ˜ธ = 30 -- 2
order by ename desc; -- 4
-- select์ ˆ์—์„œ ์ž‘์„ฑํ•œ ๋ณ„์นญ์€ ์ˆœ์„œ์ƒ where์ ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

select ename, deptno ๋ฒˆํ˜ธ -- 3
from emp -- 1
where deptno = 30 -- 2
order by ๋ฒˆํ˜ธ desc; -- 4
-- order by์ ˆ์€ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์‹คํ–‰๋˜๋ฏ€๋กœ ๋ณ„์นญ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

select ename, deptno, job
from emp
where deptno = 30
order by 3 desc;
-- order by์ ˆ์— ์ˆซ์ž 3 ์‚ฌ์šฉ์‹œ, select์ ˆ์˜ ์„ธ๋ฒˆ์งธ ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค
/*  *๋กœ ์ž‘์„ฑํ•˜๋”๋ผ๋„ select์ ˆ์˜ ๊ฒฐ๊ณผ์…‹์€ ์ด๋ฏธ ๋‚˜์˜จ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ๊ฒฐ๊ณผ์…‹์„ ๊ธฐ์ค€์œผ๋กœ
     ์ปฌ๋Ÿผ๋ช…์„ ์ˆซ์ž์— ๋งž๊ฒŒ ์„ ํƒํ•œ๋‹ค */

select ename, deptno
from emp
where deptno = 30
order by job desc;
-- select์ ˆ์— ์ ํ˜€์žˆ์ง€ ์•Š๋Š” ์นผ๋Ÿผ๋ช…์ด๋”๋ผ๋„ order by์ ˆ์—์„œ ์ง€์ • ๊ฐ€๋Šฅ
-- ๊ทธ ์•ž๋‹จ๊ณ„์ธ from์ด๋‚˜ where์ ˆ๊นŒ์ง€ ์˜ฌ๋ผ๊ฐ€์„œ ๊ฐ’์„ ์ฐพ์•„์„œ ์ •๋ ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค
/*  ๋‹จ, ์ˆซ์ž๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฐ”๋กœ ์•ž๋‹จ๊ณ„์ธ select์ ˆ๋งŒ์ด ๊ธฐ์ค€์ด๊ธฐ ๋•Œ๋ฌธ์—
    select์ ˆ์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ˆซ์ž(์นผ๋Ÿผ)์œผ๋กœ order by๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์—†๋‹ค */

-- ์‘์šฉ
select deptno, count(*) cnt -- 5
from emp -- 1
where deptno is not null -- 2
group by deptno -- 3
having count(*) <= 5 -- 4 ์ˆœ์„œ์ƒ ๋ณ„์นญ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค
order by cnt asc; -- 6

-- from 1๋ฒˆ ๊ฒฐ๊ณผ์…‹
select * from emp;
-- group by 2๋ฒˆ ๊ฒฐ๊ณผ์…‹
select * from emp where deptno = 10;
select * from emp where deptno = 20;
select * from emp where deptno = 30;
select * from emp where deptno is null;



select empno, ename, 15 ์ „์ฒด์ธ์›, sysdate ์˜ค๋Š˜๋‚ ์งœ, rowid, rownum
from emp
where rownum < 3;
-- where rownum > 3 ์€ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์Œ

select empno, ename, 15 ์ „์ฒด์ธ์›, sysdate ์˜ค๋Š˜๋‚ ์งœ, rowid, rownum
from emp
where rownum >= 1 and rownum <= 10;

-- ์„œ๋ธŒ์ฟผ๋ฆฌ(=์ž์‹์ฟผ๋ฆฌ)
/*  ๋ถ€๋ชจ์ฟผ๋ฆฌ๋ณด๋‹ค ๋จผ์ € ์‹คํ–‰๋˜์–ด ๊ฒฐ๊ณผ์…‹์„ ๋‚จ๊ธด๋‹ค
    ์ด ๊ฒฐ๊ณผ์…‹์„ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ” ๊ฐ’์œผ๋กœ ๋ณด๊ณ  from์ ˆ ๋’ค์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ */
-- ๋ฉ€ํ‹ฐ ๊ฒฐ๊ณผ์…‹ : ํ…Œ์ด๋ธ” (= ์ธ๋ผ์ธ๋ทฐ)
select ename, ์ „์ฒด์ธ์›, rid, rnum, rownum -- ์ตœ์ข… ๊ฒฐ๊ณผ์˜ rownum์ž„
from
(select empno, ename, 15 ์ „์ฒด์ธ์›, sysdate ์˜ค๋Š˜๋‚ ์งœ, rowid rid, rownum rnum
from emp) -- 1 ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”๋กœ ๋ณธ๋‹ค
where rnum >= 11 and rnum <= 15;

/*  ๊ฐ’์˜ ๊ฒฐ๊ณผ์…‹์„ ๋‚จ๊ฒจ์„œ
    select์ ˆ ๋˜๋Š” where์ ˆ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅ */
-- ๊ฐ’ : ๋‹จ์ผํ–‰ ๊ฒฐ๊ณผ์…‹, select์ ˆ (=์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ)
select empno, ename, (select count(*) from emp) ์ „์ฒด์ธ์›
from emp;

-- ๊ฐ’ : ๋‹จ์ผor์—ฌ๋Ÿฌํ–‰ ๊ฒฐ๊ณผ์…‹, where์ ˆ (=์„œ๋ธŒ์ฟผ๋ฆฌ)
-- ๊ฐ’์ด ๋‹จ์ผํ–‰์ผ ๊ฒฝ์šฐ
select avg(sal) from emp;
select ename, sal
from emp
where sal > 2021.6;
-- ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•œ ๋‘๊ฐœ์˜ ์ฟผ๋ฆฌ๋ฅผ
select ename, sal
from emp
where sal > (select avg(sal) from emp);
-- ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋ฉด ํ•œ๋ฒˆ์— ์ž‘์„ฑ ๊ฐ€๋Šฅ

-- ๊ฐ’์ด ์—ฌ๋Ÿฌํ–‰์ผ ๊ฒฝ์šฐ
select ename, deptno
from emp
where deptno = 10 or deptno = 20;

select ename, deptno
from emp
where deptno in (10, 20);

select ename, deptno
from emp
where deptno in (select deptno from dept where deptno <30);



select empno, ename, 15 ์ „์ฒด์ธ์›, sysdate ์˜ค๋Š˜๋‚ ์งœ, rowid, rownum
from emp
where rownum < 3;
-- where rownum > 3 ์€ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์Œ

๊ฐ€๋Šฅํ•˜์ง€ ์•Š๋Š” ์ด์œ !

where์ ˆ์€ ์ฒซ๋ฒˆ์งธ ํ–‰๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ, ์กฐ๊ฑด์— ๋Œ€์ž…ํ•˜์—ฌ true์™€ false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. rownum์€ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋  ๋•Œ 1๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฒฐ๊ณผ์…‹์— ์ถœ๋ ฅ์ด ์ฐํžˆ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— select๋ณด๋‹ค ๋จผ์ € ์‹คํ–‰๋˜๋Š” where์ ˆ์—์„œ๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋‹จ, where์ ˆ์ด true์—ฌ์•ผ ํ•œํ–‰์”ฉ ์ถœ๋ ฅ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— rownum > 3์ด๋ผ๋Š” ์กฐ๊ฑด์€ 1 > 3์€ false๋กœ ์ถœ๋ ฅ์ž์ฒด๊ฐ€ ๋˜์ง€ ์•Š์•„ rownum์ด ์ฐํžˆ์ง€ ์•Š๋Š”๋‹ค. ๋งŒ์•ฝ 1์ด ์•„๋‹ˆ๋ผ 4๋ถ€ํ„ฐ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด? ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค!



์˜ค๋ผํด๋กœ ํŽ˜์ด์ง•ํ•˜๊ธฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ

-- rownum๊ณผ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ํŽ˜์ด์ง•ํ•˜๊ธฐ
/*  ์˜ค๋ผํด์€ limit๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— between A and B๋ฅผ ์‚ฌ์šฉ
    ๊ทธ๋ž˜์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž์ฒด๊ฐ€ ๋ฐ”๋€๋‹ค ?, ? ๊ฐ’ ์ค‘์—์„œ ๋งˆ์ง€๋ง‰ ?๋Š” rowPerPage์—ฌ์„œ
    ๊ณ ์ •๋œ ๊ฐ’์ด์—ˆ์ง€๋งŒ, A์™€ B ์ž๋ฆฌ์— ๋“ค์–ด๊ฐ€๋Š” ๋‘ ?๋Š” ๊ณ„์† ๊ฐ’์ด ๋ฐ”๋€Œ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. */
select rownum, employee_id, first_name, last_name
from
    (select rownum, employee_id, first_name, last_name
    from employees
    order by employee_id desc)
where rownum between 11 and 20;
-- ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ํ…Œ์ด๋ธ” ์ „์ฒด์— ๋‹ค์‹œ ์ƒˆ๋กญ๊ฒŒ rownum์„ ๋ถ™์ด๊ธฐ ๋•Œ๋ฌธ์— X

select rnum, employee_id, first_name, last_name
from
    (select rownum rnum, employee_id, first_name, last_name
    from employees
    order by employee_id desc)
where rnum between 11 and 20;
-- ๊ทธ๋ž˜์„œ ์ด๋ ‡๊ฒŒ ๋ณ„์นญ์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค

-- ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์งœ๋ณด๊ธฐ
int rowPerPage = 10;

currentPage    beginRow    endRow
1               1           10            
2               11          20
3               21          30
4               31          40
beginRow = (currentPage - 1) * rowPerPage + 1            
endRow = beginRow + (rowPerPage - 1)
-- ์ฆ‰, ๊ธฐ์กด ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋‹ค๋ฅด๊ฒŒ ?์— ๋“ค์–ด๊ฐˆ ๊ฐ’์€ beginRow์™€ endRow
/*  ์ด์ „/๋‹ค์Œ ์กฐ๊ฑด์„ ๊ฑธ ๋•Œ endRow์—๊ฒŒ ์กฐ๊ฑด์ด ๋“ค์–ด๊ฐ€์•ผ ํ•œ๋‹ค
    lastPage์ผ ๋•Œ, endRow์˜ ๊ฐ’์€ totalCnt์—ฌ์•ผํ•จ */

๐Ÿ’ก ์˜ค๋ผํดdb ์ดํด๋ฆฝ์Šค์— ์—ฐ๊ฒฐํ•˜๊ธฐ


String driver = "oracle.jdbc.driver.OracleDriver";
Class.forName(driver);
	
String dburl = "jdbc:oracle:thin:@localhost:1521:xe";
String dbuser = "****";
String dbpw = "****";
Connection conn = DriverManager.getConnection(dburl, dbuser, dbpw);

์˜ค๋ผํด๋„ mariadb๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์™€ ๊ฐ™์ด ๋“œ๋ผ์ด๋ฒ„ jar ํŒŒ์ผ์ด ํ•„์š”ํ•˜๋‹ค. ์˜ค๋ผํด์€ ์„ค์น˜ํด๋” ์•ˆ์— ํŒŒ์ผ์ด ๋“ค์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ์ฐพ์•„์„œ ๋‹ค์šด๋ฐ›์„ ํ•„์š” ์—†์ด ํ•ด๋‹น ํŒŒ์ผ์„ ํด๋”์—์„œ ์ฐพ์•„์„œ ์“ฐ๋ฉด ๋œ๋‹ค.

์œ„์น˜
C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib


๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ฃผ์†Œ, ๊ณ„์ •์ด๋ฆ„, ์•”ํ˜ธ๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.
jdbc:oracle:thin:๊ฐ€ ํ”„๋กœํ† ์ฝœ์ด๊ณ , localhost๋Š” mariadb ์—ฐ๊ฒฐ์‹œ ์ž‘์„ฑํ–ˆ๋˜ 127.0.0.1์˜ ๋ณ„์นญ์ด๋‹ค. ํฌํŠธ๋ฒˆํ˜ธ๋Š” ์„ค์น˜์‹œ ํ™•์ธํ•œ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค. xe๋Š” ์ธ์Šคํ„ด์Šค๋ช…์ด๋‹ค.

sql developer์—์„œ ๋ชจ๋‘ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค!



๐Ÿ’ก ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ํšŒ์›์ „์šฉ ๊ฒŒ์‹œํŒ ํ”„๋กœ์ ํŠธ

์˜ค๋Š˜์€ ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ/์ถ”๊ฐ€/์ˆ˜์ •/์‚ญ์ œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ๋“ค์€ ํšŒ์›๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ–ˆ๊ณ , ์นดํ…Œ๊ณ ๋ฆฌ๋Š” ์‚ฌ์šฉ ์ค‘์ธ ์นดํ…Œ๊ณ ๋ฆฌ(๊ฒŒ์‹œ๊ธ€์ด ์กด์žฌํ•˜๋Š” ์นดํ…Œ๊ณ ๋ฆฌ)๋Š” ์ˆ˜์ •/์‚ญ์ œ๋ฅผ ํ•  ์ˆ˜ ์—†๋„๋ก ํ–ˆ๋‹ค.

๐Ÿ“Œ ์ž‘์—…๊ธฐ๋ก


โœ” home.jsp ์ˆ˜์ •

ํšŒ์›์ด ๋กœ๊ทธ์ธํ•œ ์ƒํƒœ์—์„œ๋งŒ ์นดํ…Œ๊ณ ๋ฆฌ ๊ด€๋ฆฌ ๋ฒ„ํŠผ์ด ๋‚˜ํƒ€๋‚˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด

// ๋กœ๊ทธ์ธํ•œ ํšŒ์›๋งŒ ์นดํ…Œ๊ณ ๋ฆฌ ๊ด€๋ฆฌ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
if(session.getAttribute("loginMemberId") != null) {
		<a href="<%=request.getContextPath()%>/local/localList.jsp" class="btn btn-secondary">
			&#x2699; ์นดํ…Œ๊ณ ๋ฆฌ ๊ด€๋ฆฌ
		</a>
	}

ํ•ด๋‹น if๋ฌธ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

๐Ÿ“ ๊ฒฐ๊ณผ


๋กœ๊ทธ์ธ ์ „

๋กœ๊ทธ์ธ ํ›„ ์นดํ…Œ๊ณ ๋ฆฌ ๊ด€๋ฆฌ ๋ฒ„ํŠผ์ด ๋‚˜ํƒ€๋‚˜๊ณ , ํด๋ฆญ์‹œ localList.jsp๋กœ ์ด๋™ํ•œ๋‹ค.

โœ” ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ

localList.jsp

๐Ÿ“ ์ž‘์„ฑ

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page import="vo.*" %>
<%
	// ์„ธ์…˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
	if(session.getAttribute("loginMemberId") == null) {
		response.sendRedirect(request.getContextPath() + "/home.jsp");
		return;
	}
	String memberId = (String)session.getAttribute("loginMemberId");
	System.out.println(memberId + " <- localList session loginMemberId");
	
	// ๋ชจ๋ธ๊ฐ’ ๊ตฌํ•˜๊ธฐ - localList ๋ชจ๋ธ
	// ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ ๋ฐ db ์ ‘์†
	String driver = "org.mariadb.jdbc.Driver";
	String dburl = "jdbc:mariadb://127.0.0.1:3306/userboard";
	String dbuser = "****";
	String dbpw = "****";
	Class.forName(driver);
	Connection conn = DriverManager.getConnection(dburl, dbuser, dbpw);
	
	// select ์ฟผ๋ฆฌ ์ž‘์„ฑ // ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ƒ์„ฑํ•œ ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์ƒ๋‹จ์œผ๋กœ ๊ฐ€๋„๋ก ์ •๋ ฌ
	String sql = "SELECT local_name localName, createdate createdate FROM local ORDER BY createdate DESC";
	PreparedStatement stmt = conn.prepareStatement(sql);
	ResultSet rs = stmt.executeQuery();
	System.out.println(stmt + " <- localList stmt");
	
	// ArrayList๋กœ ๋ณ€ํ™˜
	ArrayList<Local> localList = new ArrayList<Local>();
	while(rs.next()) {
		Local l = new Local();
		l.setLocalName(rs.getString("localName"));
		l.setCreatedate(rs.getString("createdate"));
		localList.add(l);
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>localList.jsp</title>
	<!-- ๋ถ€ํŠธ์ŠคํŠธ๋žฉ5 ์‚ฌ์šฉ -->
	<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
	<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<!-- include ํŽ˜์ด์ง€ : ๋ฉ”์ธ๋ฉ”๋‰ด(๊ฐ€๋กœ) -->	
<div>
	<!-- ์•ก์…˜ํƒœ๊ทธ -->
	<jsp:include page="/inc/mainmenu.jsp"></jsp:include>
</div>
<!-------- include ํŽ˜์ด์ง€ ๋ ------->	
	
<div class="container mt-5">
<!-------------------------------------------- localList ๋ชจ๋ธ์…‹ ์‹œ์ž‘ ------------------------------------------->
	<h3 class="mt-4">์นดํ…Œ๊ณ ๋ฆฌ ๋ชฉ๋ก</h3>
	<h6>ํ˜„์žฌ ๊ฒŒ์‹œ๊ธ€์ด ์กด์žฌํ•˜๋Š” ์นดํ…Œ๊ณ ๋ฆฌ๋Š” ์ˆ˜์ •/์‚ญ์ œ๋ฅผ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค</h6>
	<!-- msg ๋ฐœ์ƒ์‹œ ๋ฉ”์„ธ์ง€ ์ถœ๋ ฅ -->
	<div class="text-danger">
		<%
			if(request.getParameter("msg") != null) {
		%>
				<%=request.getParameter("msg")%>
		<%
			}
		%>
	</div>
	<br>
	<table class="table container">
		<thead class="table-success">
			<tr>	
				<th>์นดํ…Œ๊ณ ๋ฆฌ</th>
				<th>์ƒ์„ฑ์ผ์ž</th>
				<th>์ˆ˜์ •</th>
				<th>์‚ญ์ œ</th>
			</tr>
		</thead>
		<tbody>
			<%
				for(Local l : localList) {
			%>
					<tr>
						<td><%=l.getLocalName()%></td>
						<td><%=l.getCreatedate()%></td>
						<td>
							<a href="<%=request.getContextPath()%>/local/updateLocalForm.jsp?localName=<%=l.getLocalName()%>" class="btn">
								&#x270F;
							</a>
						</td>
						<td>
							<a href="<%=request.getContextPath()%>/local/deleteLocalForm.jsp?localName=<%=l.getLocalName()%>" class="btn">
								&#x1F5D1;
							</a>
						</td>
					</tr>
			<%
				}
			%>
		</tbody>
	</table>
<!-------------------------------------------- localList ๋ชจ๋ธ์…‹ ๋ ------------------------------------------->
	<div class="text-center">
		<a href="<%=request.getContextPath()%>/local/insertLocalForm.jsp" class="btn btn-success">
			&#x1F4C3; ์ƒˆ๋กœ์šด ์นดํ…Œ๊ณ ๋ฆฌ ์ƒ์„ฑ
		</a>
	</div>
</div>

	<br>
	
<!-- include ํŽ˜์ด์ง€ : Copyright -->
<div>
	<!-- ์•ก์…˜ํƒœ๊ทธ -->
	<jsp:include page="/inc/copyright.jsp"></jsp:include>
</div>
<!-------- include ํŽ˜์ด์ง€ ๋ ------->

</body>
</html>

๐Ÿ“ ๊ฒฐ๊ณผ


๐Ÿง ์ƒ๊ฐํ•ด ๋ณด๊ธฐ

  • home ํŽ˜์ด์ง€์ฒ˜๋Ÿผ ํ•ด๋‹น ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ํ˜„์žฌ ๋ช‡๊ฐœ์˜ ๊ฒŒ์‹œ๊ธ€์— ์‚ฌ์šฉ ์ค‘์ธ์ง€(count)๋ฅผ ๊ฐ™์ด ์กฐํšŒํ•˜์—ฌ ํ…Œ์ด๋ธ”์— ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ๋‹ค.
  • ๋˜ํ•œ, ๊ทธ count ๊ฐ’์„ ์ด์šฉํ•˜๋ฉด ์ˆ˜์ •/์‚ญ์ œ ๋ฒ„ํŠผ์„ 0๊ฐœ์ผ ๋•Œ๋งŒ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

-> ์•„๋ฌด๋ฆฌ ์ƒ๊ฐํ•ด๋„ join๋ฌธ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค! ์ƒ์„ฑ์ผ์ž๋Š” local ํ…Œ์ด๋ธ”์˜ ์ƒ์„ฑ์ผ์ž์—ฌ์•ผ ํ•˜๊ณ , count๋Š” board ํ…Œ์ด๋ธ”์ด ๊ธฐ์ค€์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์•„์ง join๋ฌธ์„ ์ œ๋Œ€๋กœ ๋ฐฐ์šฐ์ง€ ์•Š์•„์„œ ์ด ๋ถ€๋ถ„์€ ์‹œ๊ฐ„์ด ๋‚ ๋•Œ ์ฐพ์•„๋ณด๊ณ  ๋„์ „ํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค!

2023.05.14 ์ถ”๊ฐ€!

LEFT JOIN๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•ด๋ณด์•˜๋‹ค.

SELECT
	l.local_name localName,
    l.createdate createdate,
    COUNT(b.local_name) cnt
FROM local l LEFT JOIN board b
ON l.local_name=b.local_name
GROUP BY localName
ORDER BY createdate DESC;

๋˜ํ•œ, ๊ทธ๋™์•ˆ์€ ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ปฌ๋Ÿผ์ธ count๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด, ์กด์žฌํ•˜๋Š” ๊ธฐ์กด ์ปฌ๋Ÿผ๋“ค๋„ ํฌํ•จํ•ด์„œ HashMap์œผ๋กœ ArrayList์— ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์™”์ง€๋งŒ ์ด๋ฒˆ์—๋Š” count๊ฐ’๋งŒ HashMap์œผ๋กœ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค.
// Voํƒ€์ž…์˜ ArrayList์™€ Map ์‚ฌ์šฉ
ArrayList<Local> localList = new ArrayList<Local>();
Map<String,Integer> cnt = new HashMap<>();
while(rs.next()) {
	Local l = new Local();	
    l.setLocalName(rs.getString("localName"));
	l.setCreatedate(rs.getString("createdate"));
	cnt.put(l.getLocalName(), rs.getInt("cnt"));
	// cnt.put(rs.getString("localName"), rs.getInt("cnt"));
	localList.add(l);
}

Local ๊ฐ์ฒด๋ฅผ ์ตœ๋Œ€ํ•œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™์•„์„œ ๋งŒ์กฑ์Šค๋Ÿฝ๋‹ค ๐Ÿ˜Š

โœ” ์นดํ…Œ๊ณ ๋ฆฌ ์ถ”๊ฐ€

insertLocalForm.jsp
๐Ÿ“ ์ž‘์„ฑ

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	// ์„ธ์…˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
	if(session.getAttribute("loginMemberId") == null) {
		response.sendRedirect(request.getContextPath() + "/home.jsp");
		return;
	}
	String memberId = (String)session.getAttribute("loginMemberId");
	System.out.println(memberId + " <- insertLocalForm session loginMemberId");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>insertLocalForm.jsp</title>
	<!-- ๋ถ€ํŠธ์ŠคํŠธ๋žฉ5 ์‚ฌ์šฉ -->
	<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
	<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<div> <!-- mainmenu include -->
	<jsp:include page="/inc/mainmenu.jsp"></jsp:include>
</div>

<div class="container mt-5">
	<!---------------------- ์นดํ…Œ๊ณ ๋ฆฌ insert form ์‹œ์ž‘ ---------------------->
	<h3 class="mt-4">์ƒˆ๋กœ์šด ์นดํ…Œ๊ณ ๋ฆฌ ์ƒ์„ฑ</h3>
	<h6>์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์ด๋ฆ„์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”</h6>
		<!-- ์ƒ์„ฑ ์‹คํŒจ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€ ์ถœ๋ ฅ -->
		<div class="text-danger">
			<%
				if(request.getParameter("msg") != null) {
			%>
					<%=request.getParameter("msg")%>
			<%
				}
			%>
		</div>
		<form action="<%=request.getContextPath()%>/local/insertLocalAction.jsp" method="post">
			<table class="table container">
				<tr>
					<th class="table-success">์นดํ…Œ๊ณ ๋ฆฌ ์ด๋ฆ„</th>
					<td>
						<input type="text" name="localName">
					</td>
				</tr>
			</table>
			<a href="<%=request.getContextPath()%>/local/localList.jsp" class="btn btn-success">
				๋’ค๋กœ๊ฐ€๊ธฐ
			</a>
			<button type="submit" class="btn btn-success">์ƒ์„ฑ</button>
		</form>
	<!---------------------- ์นดํ…Œ๊ณ ๋ฆฌ insert form ๋ ---------------------->
</div>

<div> <!-- copyright include -->
	<jsp:include page="/inc/copyright.jsp"></jsp:include>
</div>
</body>
</html>

insertLocalAction.jsp
๐Ÿ“ ์ž‘์„ฑ

est.getContextPath() + "/local/insertLocalForm.jsp?msg=" + msg);
		return;
	}
	String localName = request.getParameter("localName");
	// ๋””๋ฒ„๊น…
	System.out.println(memberId + " <- insertLocalAction session loginMemberId");
	System.out.println(localName + " <- insertLocalAction localName");
	
	// 2. ๋ชจ๋ธ๊ฐ’ ๊ตฌํ•˜๊ธฐ
	// 2-1. ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ ๋ฐ db ์ ‘์†
	String driver = "org.mariadb.jdbc.Driver";
	String dburl = "jdbc:mariadb://127.0.0.1:3306/userboard";
	String dbuser = "****";
	String dbpw = "****";
	Class.forName(driver);
	Connection conn = DriverManager.getConnection(dburl, dbuser, dbpw);
	
	// 2-2. localName ์ค‘๋ณต๊ฒ€์‚ฌ
	// ํ•ด๋‹น localName์ด ๋ฐ์ดํ„ฐ์— ์กด์žฌํ•˜๋Š”์ง€(where) count ํ•ด๋ณธ๋‹ค
	String countSql = "SELECT count(*) FROM local WHERE local_name = ?";
	PreparedStatement countStmt = conn.prepareStatement(countSql);
	countStmt.setString(1, localName);
	System.out.println(countStmt + " <- insertLocalAction count stmt");
	ResultSet countRs = countStmt.executeQuery();
	
	// ๊ฐฏ์ˆ˜ ํ™•์ธ
	int cnt = 0;
	if(countRs.next()) {
		cnt = countRs.getInt("count(*)");
		// ํ•ด๋‹น localName์˜ ๊ฐฏ์ˆ˜๋ฅผ cnt ๋ณ€์ˆ˜์— ์ €์žฅ
		// 0์ผ ๊ฒฝ์šฐ ์ค‘๋ณต ์—†์Œ 
	}
	
	// 0๋ณด๋‹ค ํด ๊ฒฝ์šฐ ์ค‘๋ณต ์žˆ์Œ // form์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜
	if(cnt > 0) {
		System.out.println(cnt + " <- insertLocalAction ์ค‘๋ณต๋œ ์นดํ…Œ๊ณ ๋ฆฌ ๊ฐฏ์ˆ˜");
		msg = URLEncoder.encode("์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค", "utf-8");
		response.sendRedirect(request.getContextPath() + "/local/insertLocalForm.jsp?msg=" + msg);
		return;
	} else {
		System.out.println("insertLocalAction ์ค‘๋ณต๋œ ์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ");
	}
	
	// 2-3. ์ฟผ๋ฆฌ ์ž‘์„ฑ
	String sql = "INSERT INTO local(local_name, createdate, updatedate) VALUES(?, NOW(), NOW())";
	PreparedStatement stmt = conn.prepareStatement(sql);
	stmt.setString(1, localName);
	System.out.println(stmt + " <- insertLocalAction stmt");
	
	// 2-4. ์ฟผ๋ฆฌ๊ฐ€ ์ž˜ ์ง„ํ–‰๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
	int row = stmt.executeUpdate();
	if(row == 1) { // ์„ฑ๊ณต์‹œ localList๋กœ
		System.out.println(row + " <- insertLocalAction ์„ฑ๊ณต");
		msg = URLEncoder.encode("์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", "utf-8");
		response.sendRedirect(request.getContextPath() + "/local/localList.jsp?msg=" + msg);
		return;
	} else { // ์‹คํŒจ์‹œ Form์œผ๋กœ
		System.out.println(row + " <- insertLocalAction ์‹คํŒจ");
		msg = URLEncoder.encode("์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”", "utf-8");
		response.sendRedirect(request.getContextPath() + "/local/insertLocalForm.jsp?msg=" + msg);
		return;
	}
%>

๐Ÿ“ ๊ฒฐ๊ณผ




โœ” ์นดํ…Œ๊ณ ๋ฆฌ ์ˆ˜์ •

updateLocalForm.jsp
๐Ÿ“ ์ž‘์„ฑ


	String memberId = (String)session.getAttribute("loginMemberId");
	String localName = request.getParameter("localName");
	System.out.println(memberId + " <- updateLocalForm session loginMemberId");
	System.out.println(localName + " <- updateLocalForm localName");
	
	// 2. ๋ชจ๋ธ๊ฐ’ ๊ตฌํ•˜๊ธฐ
	// localCnt ๋ชจ๋ธ
	String driver = "org.mariadb.jdbc.Driver";
	String dburl = "jdbc:mariadb://127.0.0.1:3306/userboard";
	String dbuser = "****";
	String dbpw = "****";
	Class.forName(driver);
	Connection conn = DriverManager.getConnection(dburl, dbuser, dbpw);
	
	// ํ•ด๋‹น localName์˜ ๊ฒŒ์‹œ๊ธ€ ์ˆ˜(board์˜ ๊ฐฏ์ˆ˜)๋ฅผ ์กฐํšŒํ•˜๋Š” ์ฟผ๋ฆฌ ์ž‘์„ฑ
	String sql = "SELECT count(*) FROM board WHERE local_name = ?";
	PreparedStatement stmt = conn.prepareStatement(sql);
	stmt.setString(1, localName);
	// ๋ณ€์ˆ˜์— ๊ฐ’ ์ €์žฅ
	ResultSet rs = stmt.executeQuery();
	System.out.println(stmt + " <- updateLocalForm stmt");
	int localCnt = 0;
	if(rs.next()) {
		localCnt = rs.getInt("count(*)");
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- ๋ถ€ํŠธ์ŠคํŠธ๋žฉ5 ์‚ฌ์šฉ -->
	<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
	<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<!-- include ํŽ˜์ด์ง€ : ๋ฉ”์ธ๋ฉ”๋‰ด(๊ฐ€๋กœ) -->	
<div>
	<!-- ์•ก์…˜ํƒœ๊ทธ -->
	<jsp:include page="/inc/mainmenu.jsp"></jsp:include>
</div>
<!-------- include ํŽ˜์ด์ง€ ๋ ------->	
	
<div class="container mt-5">
<!-------------------------------------------- updateLocalForm ์‹œ์ž‘ ------------------------------------------->
	<!-- localCnt๊ฐ€ 0์ผ ๊ฒฝ์šฐ์—๋งŒ form ํƒœ๊ทธ ์ถœ๋ ฅ -->
	<%
		if(localCnt == 0) {
	%>
			<h3 class="mt-4">์นดํ…Œ๊ณ ๋ฆฌ ์ˆ˜์ •</h3>
			<h6>์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์ด๋ฆ„์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”</h6>
			<!-- ์ˆ˜์ • ์‹คํŒจ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€ ์ถœ๋ ฅ -->
			<div class="text-danger">
				<%
					if(request.getParameter("msg") != null) {
				%>
						<%=request.getParameter("msg")%>
				<%
					}
				%>
			</div>
			<form action="<%=request.getContextPath()%>/local/updateLocalAction.jsp" method="post">
				<table class="table container">
					<tr>
						<th class="table-success">ํ˜„์žฌ ์ด๋ฆ„</th>
						<td>
							<input type="text" name="localName" value="<%=localName%>" readonly>
						</td>
					</tr>
					<tr>
						<th class="table-success">์ˆ˜์ • ํ›„ ์ด๋ฆ„</th>
						<td>
							<input type="text" name="localNewName">
						</td>
					</tr>
				</table>
				<a href="<%=request.getContextPath()%>/local/localList.jsp" class="btn btn-success">
				๋’ค๋กœ๊ฐ€๊ธฐ
				</a>
				<button type="submit" class="btn btn-success">์ˆ˜์ •</button>
			</form>
	<!-- localCnt๊ฐ€ 0์ด ์•„๋‹ ๊ฒฝ์šฐ ๋ฉ”์„ธ์ง€ ์ถœ๋ ฅ -->
	<%
		} else {
	%>
			<h5> ํ˜„์žฌ ๊ฒŒ์‹œ๊ธ€์ด ์กด์žฌํ•˜๋Š” ์นดํ…Œ๊ณ ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค &#x1F614; </h5>
			<h5 class="text-danger"> <%=localName%> ์นดํ…Œ๊ณ ๋ฆฌ์˜ ํ˜„์žฌ ๊ฒŒ์‹œ๊ธ€ ์ˆ˜๋Š” <%=localCnt%>๊ฐœ ์ž…๋‹ˆ๋‹ค.</h5>
			<br>
			<a href="<%=request.getContextPath()%>/local/localList.jsp" class="btn btn-success">
				๋’ค๋กœ๊ฐ€๊ธฐ
			</a>
	<%
		}
	%>
<!-------------------------------------------- updateLocalForm ๋ ------------------------------------------->
</div>

	<br>
	
<!-- include ํŽ˜์ด์ง€ : Copyright -->
<div>
	<!-- ์•ก์…˜ํƒœ๊ทธ -->
	<jsp:include page="/inc/copyright.jsp"></jsp:include>
</div>
<!-------- include ํŽ˜์ด์ง€ ๋ ------->

</body>
</html>

updateLocalAction.jsp
๐Ÿ“ ์ž‘์„ฑ

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.net.*" %>
<%
	// 1. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
	// ์„ธ์…˜๊ฐ’, localName
	if(session.getAttribute("loginMemberId") == null
			|| request.getParameter("localName") == null
			|| request.getParameter("localName").equals("")) {
		response.sendRedirect(request.getContextPath() + "/home.jsp");
		// ์„ธ์…˜๊ฐ’์ด๋‚˜ localName์ด ์—†์œผ๋ฉด home์œผ๋กœ
		return;
	}
	String memberId = (String)session.getAttribute("loginMemberId");
	String localName = request.getParameter("localName");
	// localNewName
	String msg = null;
	if(request.getParameter("localNewName") == null
			|| request.getParameter("localNewName").equals("")) {
		msg = URLEncoder.encode("์ˆ˜์ • ํ›„ ์ด๋ฆ„์ด ์ž…๋ ฅ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค", "utf-8");
		localName = URLEncoder.encode(localName, "utf-8");
		response.sendRedirect(request.getContextPath() + "/local/updateLocalForm.jsp?localName=" + localName + "&msg=" + msg);
		// localNewName๊ฐ’์ด ์—†์œผ๋ฉด form์œผ๋กœ
		return;
	}
	String localNewName = request.getParameter("localNewName");
	// ๋””๋ฒ„๊น…
	System.out.println(memberId + " <- updateLocalAction session loginMemberId");
	System.out.println(localName + " <- updateLocalAction localName");
	System.out.println(localNewName + " <- updateLocalAction localNewName");
		
	// 2. ๋ชจ๋ธ๊ฐ’ ๊ตฌํ•˜๊ธฐ
	// 2-1. ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ ๋ฐ db ์ ‘์†
	String driver = "org.mariadb.jdbc.Driver";
	String dburl = "jdbc:mariadb://127.0.0.1:3306/userboard";
	String dbuser = "****";
	String dbpw = "****";
	Class.forName(driver);
	Connection conn = DriverManager.getConnection(dburl, dbuser, dbpw);
	
	// 2-2. localName ์ค‘๋ณต๊ฒ€์‚ฌ
	// ํ•ด๋‹น localName์ด ๋ฐ์ดํ„ฐ์— ์กด์žฌํ•˜๋Š”์ง€(where) count ํ•ด๋ณธ๋‹ค
	String countSql = "SELECT count(*) FROM local WHERE local_name = ?";
	PreparedStatement countStmt = conn.prepareStatement(countSql);
	countStmt.setString(1, localNewName);
	System.out.println(countStmt + " <- updateLocalAction count stmt");
	ResultSet countRs = countStmt.executeQuery();
	
	// ๊ฐฏ์ˆ˜ ํ™•์ธ
	int cnt = 0;
	if(countRs.next()) {
		cnt = countRs.getInt("count(*)");
		// ํ•ด๋‹น localName์˜ ๊ฐฏ์ˆ˜๋ฅผ cnt ๋ณ€์ˆ˜์— ์ €์žฅ
		// 0์ผ ๊ฒฝ์šฐ ์ค‘๋ณต ์—†์Œ 
	}
	
	// 0๋ณด๋‹ค ํด ๊ฒฝ์šฐ ์ค‘๋ณต ์žˆ์Œ // form์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜
	if(cnt > 0) {
		System.out.println(cnt + " <- updateLocalAction ์ค‘๋ณต๋œ ์นดํ…Œ๊ณ ๋ฆฌ ๊ฐฏ์ˆ˜");
		msg = URLEncoder.encode("์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค", "utf-8");
		localName = URLEncoder.encode(localName, "utf-8");
		response.sendRedirect(request.getContextPath() + "/local/updateLocalForm.jsp?localName=" + localName + "&msg=" + msg);
		return;
	} else {
		System.out.println("updateLocalAction ์ค‘๋ณต๋œ ์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ");
	}
	
	// 2-3. ์ฟผ๋ฆฌ ์ž‘์„ฑ
	String sql = "UPDATE local SET local_name = ?, updatedate = NOW() WHERE local_name = ?";
	PreparedStatement stmt = conn.prepareStatement(sql);
	stmt.setString(1, localNewName);
	stmt.setString(2, localName);
	System.out.println(stmt + " <- updateLocalAction stmt");
	
	// 2-4. ์ฟผ๋ฆฌ๊ฐ€ ์ž˜ ์ง„ํ–‰๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
	int row = stmt.executeUpdate();
	if(row == 1) { // ์„ฑ๊ณต์‹œ localList๋กœ
		System.out.println(row + " <- updateLocalAction ์„ฑ๊ณต");
		msg = URLEncoder.encode("์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค", "utf-8");
		response.sendRedirect(request.getContextPath() + "/local/localList.jsp?msg=" + msg);
		return;
	} else { // ์‹คํŒจ์‹œ Form์œผ๋กœ
		System.out.println(row + " <- updateLocalAction ์‹คํŒจ");
		msg = URLEncoder.encode("์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์ˆ˜์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”", "utf-8");
		response.sendRedirect(request.getContextPath() + "/local/updateLocalForm.jsp?msg=" + msg);
		return;
	}
%>

๐Ÿ“ ๊ฒฐ๊ณผ






โœ” ์นดํ…Œ๊ณ ๋ฆฌ ์‚ญ์ œ

deleteLocalForm.jsp
๐Ÿ“ ์ž‘์„ฑ

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%
	// 1. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
	// ์„ธ์…˜๊ฐ’, localName
	if(session.getAttribute("loginMemberId") == null) {
		response.sendRedirect(request.getContextPath() + "/home.jsp");
		// ์„ธ์…˜๊ฐ’์ด ์—†์œผ๋ฉด home์œผ๋กœ
		return;
	} else if(request.getParameter("localName") == null
			|| request.getParameter("localName").equals("")) {
		response.sendRedirect(request.getContextPath() + "/local/localList.jsp");
		// localName๊ฐ’์ด ์—†์œผ๋ฉด localList๋กœ
		return;
	}
	String memberId = (String)session.getAttribute("loginMemberId");
	String localName = request.getParameter("localName");
	System.out.println(memberId + " <- deleteLocalForm session loginMemberId");
	System.out.println(localName + " <- deleteLocalForm localName");
	
	// 2. ๋ชจ๋ธ๊ฐ’ ๊ตฌํ•˜๊ธฐ
	// localCnt ๋ชจ๋ธ
	String driver = "org.mariadb.jdbc.Driver";
	String dburl = "jdbc:mariadb://127.0.0.1:3306/userboard";
	String dbuser = "****";
	String dbpw = "****";
	Class.forName(driver);
	Connection conn = DriverManager.getConnection(dburl, dbuser, dbpw);
	
	// ํ•ด๋‹น localName์˜ ๊ฒŒ์‹œ๊ธ€ ์ˆ˜(board์˜ ๊ฐฏ์ˆ˜)๋ฅผ ์กฐํšŒํ•˜๋Š” ์ฟผ๋ฆฌ ์ž‘์„ฑ
	String sql = "SELECT count(*) FROM board WHERE local_name = ?";
	PreparedStatement stmt = conn.prepareStatement(sql);
	stmt.setString(1, localName);
	// ๋ณ€์ˆ˜์— ๊ฐ’ ์ €์žฅ
	ResultSet rs = stmt.executeQuery();
	System.out.println(stmt + " <- deleteLocalForm stmt");
	int localCnt = 0;
	if(rs.next()) {
		localCnt = rs.getInt("count(*)");
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- ๋ถ€ํŠธ์ŠคํŠธ๋žฉ5 ์‚ฌ์šฉ -->
	<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
	<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<!-- include ํŽ˜์ด์ง€ : ๋ฉ”์ธ๋ฉ”๋‰ด(๊ฐ€๋กœ) -->	
<div>
	<!-- ์•ก์…˜ํƒœ๊ทธ -->
	<jsp:include page="/inc/mainmenu.jsp"></jsp:include>
</div>
<!-------- include ํŽ˜์ด์ง€ ๋ ------->	
	
<div class="container mt-5">
<!-------------------------------------------- deleteLocalForm ์‹œ์ž‘ ------------------------------------------->
	<!-- localCnt๊ฐ€ 0์ผ ๊ฒฝ์šฐ์—๋งŒ form ํƒœ๊ทธ ์ถœ๋ ฅ -->
	<%
		if(localCnt == 0) {
	%>
			<h3 class="mt-4">์นดํ…Œ๊ณ ๋ฆฌ ์‚ญ์ œ</h3>
			<h5>์ •๋ง ์‚ญ์ œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?</h5>
			<form action="<%=request.getContextPath()%>/local/deleteLocalAction.jsp" method="post">
				<table class="table container">
					<tr>
						<th class="table-success">์นดํ…Œ๊ณ ๋ฆฌ ์ด๋ฆ„</th>
						<td>
							<input type="text" name="localName" value="<%=localName%>" readonly>
						</td>
					</tr>
				</table>
				<a href="<%=request.getContextPath()%>/local/localList.jsp" class="btn btn-success">
				๋’ค๋กœ๊ฐ€๊ธฐ
				</a>
				<button type="submit" class="btn btn-danger">์‚ญ์ œ</button>
			</form>
	<!-- localCnt๊ฐ€ 0์ด ์•„๋‹ ๊ฒฝ์šฐ ๋ฉ”์„ธ์ง€ ์ถœ๋ ฅ -->
	<%
		} else {
	%>
			<h5> ํ˜„์žฌ ๊ฒŒ์‹œ๊ธ€์ด ์กด์žฌํ•˜๋Š” ์นดํ…Œ๊ณ ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์‚ญ์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค &#x1F614; </h5>
			<h5 class="text-danger"> <%=localName%> ์นดํ…Œ๊ณ ๋ฆฌ์˜ ํ˜„์žฌ ๊ฒŒ์‹œ๊ธ€ ์ˆ˜๋Š” <%=localCnt%>๊ฐœ ์ž…๋‹ˆ๋‹ค.</h5>
			<br>
			<a href="<%=request.getContextPath()%>/local/localList.jsp" class="btn btn-success">
				๋’ค๋กœ๊ฐ€๊ธฐ
			</a>
	<%
		}
	%>
<!-------------------------------------------- deleteLocalForm ๋ ------------------------------------------->
</div>

	<br>
	
<!-- include ํŽ˜์ด์ง€ : Copyright -->
<div>
	<!-- ์•ก์…˜ํƒœ๊ทธ -->
	<jsp:include page="/inc/copyright.jsp"></jsp:include>
</div>
<!-------- include ํŽ˜์ด์ง€ ๋ ------->

</body>
</html>

deleteLocalAction.jsp
๐Ÿ“ ์ž‘์„ฑ

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.net.*" %>
<%
	// 1. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
	// ์„ธ์…˜๊ฐ’, localName
	if(session.getAttribute("loginMemberId") == null) {
		response.sendRedirect(request.getContextPath() + "/home.jsp");
		// ์„ธ์…˜๊ฐ’์ด ์—†์œผ๋ฉด home์œผ๋กœ
		return;
	} else if(request.getParameter("localName") == null
			|| request.getParameter("localName").equals("")) {
		response.sendRedirect(request.getContextPath() + "/local/localList.jsp");
		// localName๊ฐ’์ด ์—†์œผ๋ฉด localList๋กœ
		return;
	}
	String memberId = (String)session.getAttribute("loginMemberId");
	String localName = request.getParameter("localName");
	System.out.println(memberId + " <- deleteLocalAction session loginMemberId");
	System.out.println(localName + " <- deleteLocalAction localName");
	
	// 2. delete
	// 2-1. ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ ๋ฐ db ์ ‘์†
	String driver = "org.mariadb.jdbc.Driver";
	String dburl = "jdbc:mariadb://127.0.0.1:3306/userboard";
	String dbuser = "****";
	String dbpw = "****";
	Class.forName(driver);
	Connection conn = DriverManager.getConnection(dburl, dbuser, dbpw);
	
	// 2-2. ์ฟผ๋ฆฌ ์ž‘์„ฑ
	String sql = "DELETE FROM local WHERE local_name = ?";
	PreparedStatement stmt = conn.prepareStatement(sql);
	stmt.setString(1, localName);
	System.out.println(stmt + " <- deleteLocalAction stmt");
	
	// 2-3. ์ฟผ๋ฆฌ๊ฐ€ ์ž˜ ์ง„ํ–‰๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
	int row = stmt.executeUpdate();
	String msg = null;
	if(row == 1) { // ์„ฑ๊ณต์‹œ localList๋กœ
		System.out.println(row + " <- deleteLocalAction ์„ฑ๊ณต");
		msg = URLEncoder.encode("์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", "utf-8");
		response.sendRedirect(request.getContextPath() + "/local/localList.jsp?msg=" + msg);
		return;
	} else {
		System.out.println(row + " <- deleteLocalAction ์„ฑ๊ณต");
		msg = URLEncoder.encode("์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์‚ญ์ œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”", "utf-8");
		response.sendRedirect(request.getContextPath() + "/local/localList.jsp?msg=" + msg);
		return;
	}
%>

๐Ÿ“ ๊ฒฐ๊ณผ





profile
ํ•˜๋ฃจ ํ•œ๊ฑธ์Œ์”ฉ๐Ÿ’ช ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž ๋„์ „๊ธฐ ๐ŸŒฑ๐Ÿ’ป

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