Dev.Beth
๐Ÿ๐Ÿ’ป๐Ÿ
Dev.Beth
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (175)
    • ๐Ÿค” PS(Problem Solving) (119)
      • ๋ฐฑ์ค€(BOJ) (59)
      • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (47)
      • Leet, ๊ตฌ๋ฆ„ (6)
      • ์ฝ”ํ…Œ (7)
    • ๐Ÿ› ๏ธ ํˆด, ๊ทธ์™ธ (10)
    • ๐Ÿ•ท๏ธ ์—๋Ÿฌ, ๋ฒ„๊ทธ (15)
    • โœ๏ธ ์ด๋ก  (30)
      • ์ด๋ก , ์„ค๊ณ„ (3)
      • ๋””์ž์ธํŒจํ„ด (1)
      • ์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜ (13)
      • ๋„คํŠธ์›Œํฌ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (11)
      • ๊ฐœ๋ฐœ์„œ (2)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • WRITE
  • ADMIN

๊ณต์ง€์‚ฌํ•ญ

  • ๐Ÿต PS challenge

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ๋ฐฑ์ค€ 1520 c++
  • boj 2293
  • ๋ฐฑ์ค€ 1509 c++
  • ์‚ผ์„ฑ ํ™”๋ฉด ๋ฉˆ์ถค
  • ๊ฐค๋Ÿญ์‹œ ๋ฉˆ์ถค
  • ๊ฐค๋Ÿญ์‹œ ์žฌ๋ถ€ํŒ…
  • ๊ฐค๋Ÿญ์‹œ ๋ฆฌ๋ถ€ํŒ…
  • 1520 c++
  • ๋ฐฑ์ค€ 2240
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋„คํŠธ์›Œํฌ java
  • boj 1509 c++
  • 2294 ๋ฐฑ์ค€ c++
  • Retrofit ํ•œ๊ธ€๊นจ์ง
  • ๋ฐฑ์ค€ 2293
  • c++ 2294
  • ๋ฐฑ์ค€
  • Retrofit Post ํ•œ๊ธ€
  • ๋ฐฑ์ค€ c++
  • ๋ฐฑ์ค€ c++ 2293
  • ๊ฐค๋Ÿญ์‹œ ๊ฒ€์€ํ™”๋ฉด ์žฌ๋ถ€ํŒ…
  • ๊ฐค๋Ÿญ์‹œ ๊ฒ€์€ํ™”๋ฉด
  • 2293 c++
  • 1509 c++
  • ๋ฐฑ์ค€ 2294
  • 2294
  • ๋ฐฑ์ค€ 2294 c++
  • 2293
  • ๊ฐค๋Ÿญ์‹œ ๊ฐ•์ œ ์žฌ๋ถ€ํŒ…
  • Retrofit ํ•œ๊ธ€ ๊นจ์ง
  • 2294 c++

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Dev.Beth

๐Ÿ๐Ÿ’ป๐Ÿ

โœ๏ธ ์ด๋ก /๋„คํŠธ์›Œํฌ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

[OracleSQL] ๋ช…๋ น์–ด ๊ฐœ์ธ ๋ ˆํผ๋Ÿฐ์Šค

2019. 9. 28. 10:33
๋ฐ˜์‘ํ˜•

1. basic

* ์˜ค๋ผํด ์ ‘์† ๋ฐฉ๋ฒ•
- sqlplus
- sqlplus ์‚ฌ์šฉ์ž๋ช…/๋น„๋ฒˆ

* ์˜ค๋ผํด ๋ช…๋ น์–ด
-[1] ์ตœ๊ณ  ๊ด€๋ฆฌ์ž(system/sys)๋กœ ์ ‘์†ํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ๊ณ„์ •์„ ํ’€์–ด์คŒ.
    : alter user ์‚ฌ์šฉ์ž๋ช… account unlock;

-[2] ํ˜„์žฌ ์ ‘์†ํ•˜๊ณ  ์žˆ๋Š” ๊ณ„์ • ํ™•์ธ
    : show user;

-[3] ์ ‘์† ๊ณ„์ • ๋ณ€๊ฒฝ
    : conn ์‚ฌ์šฉ์ž๋ช…/๋น„๋ฒˆ

-[4] ์‚ฌ์šฉ์ž ์•”ํ˜ธ ๋ณ€๊ฒฝ (์ตœ๊ณ  ๊ด€๋ฆฌ์ž์—์„œ๋งŒ)
    : alter user ์‚ฌ์šฉ์ž๋ช… identified by ๋ณ€๊ฒฝํ•  ๋น„๋ฒˆ;

-[5] ๊ณ„์ •๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ•œ๋ฒˆ์— ๋ณ€๊ฒฝ
    : alter user ์‚ฌ์šฉ์ž๋ช… identified by ๋ณ€๊ฒฝํ•  ๋น„๋ฒˆ account unlock;

* ์˜ค๋ผํด ๋ช…๋ น์–ด (select๋ฌธ)
-[1] scott ์‚ฌ์šฉ์ž๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ํ…Œ์ด๋ธ” ๋ชฉ๋ก
    : select * from tab;

-[2] ํŠน์ • ํ…Œ์ด๋ธ” ๊ตฌ์กฐ ํ™•์ธ
    : desc ํ…Œ์ด๋ธ”๋ช…;

-[3] ํŠน์ • ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ํ‘œ์‹œ
    : select * from ํ…Œ์ด๋ธ”๋ช…

-[4] ๋ชจ๋“  ์ปฌ๋Ÿผ(ํ•„๋“œ๋ช…)์ด ์•„๋‹Œ, ํ•„์š”ํ•œ ์ปฌ๋Ÿผ(ํ•„๋“œ๋ช…) ๋‚ด์šฉ๋งŒ ์ถœ๋ ฅ
    : select ํ•„๋“œ๋ช…(์—ฌ๋Ÿฌ๊ฐœ) from ํ…Œ์ด๋ธ”๋ช…

-[5] ๊ฐ๊ฐ ํ•„๋“œ๋ช…์— ๋ณ„์นญ์„ ์ฃผ์–ด์„œ ์ถœ๋ ฅ (์ถœ๋ ฅํ•˜๋Š” ์ˆœ๊ฐ„๋งŒ)
    : select ํ•„๋“œ๋ช… (as) "๋ณ„๋ช…" from ํ…Œ์ด๋ธ”๋ช…;

-[6] ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ ์ œ๊ฑฐํ•˜๊ณ  ์ถœ๋ ฅ
    : select distinct ํ•„๋“œ๋ช… from ํ…Œ์ด๋ธ”๋ช…
       ex) ์‚ฌ์›๋“ค์˜ ์ง์›๋ช…(job)์„ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ ํ›„ ์ถœ๋ ฅ.
           select distinct job from emp;

-[7] ๊ธ‰์—ฌ๊ฐ€ 3000์ด์ƒ์ธ ์‚ฌ์› ์ •๋ณด ์ถœ๋ ฅ
    : select empno, ename, sal from emp where sal >= 3000;

-[8] ์ด๋ฆ„์ด scott์ธ ์‚ฌ์›์˜ ์ •๋ณด ์ถœ๋ ฅ
    : select empon, ename, sal from emp where ename = 'SCOTT';
     ****๋ฐ์ดํ„ฐ๋Š” ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ณ„ํ•จ

-[9] ๋ถ€์„œ๋ฒˆํ˜ธ๊ฐ€ 10์ด๊ณ  ์ง์—…์ด 'MANAGER'์ธ ์‚ฌ์› ์ถœ๋ ฅ
    : select deptno, ename, job from emp
      where deptno = 10 and job = 'MANAGER';

-[10] ๋ถ€์„œ๋ฒˆํ˜ธ๊ฐ€ 10์ด๊ฑฐ๋‚˜ ์ง์—…์ด 'MANAGER'์ธ ์‚ฌ์› ์ถœ๋ ฅ
    : select deptno, ename, job from emp
      where deptno = 10 or job = 'MANAGER';

-[11] 1985๋…„๋„ ์ดํ›„์— ์ž…์‚ฌํ•œ ์‚ฌ์› ์ •๋ณด
    : select empno, ename, hiredate from emp
      where hiredate >= '1985/01/01';

-[12] ๋ถ€์„œ๋ฒˆํ˜ธ๊ฐ€ 10์ด ์•„๋‹Œ ์‚ฌ์›
    : select deptno, ename from emp where not(deptno = 10);
      select deptno, ename from emp where deptno <> 10;

-[13] ๊ธ‰์—ฌ๊ฐ€ 1000~3000 ์‚ฌ์ด์ธ ์‚ฌ์›์„ ์ถœ๋ ฅ
    : select ename, sal from emp where sal >= 1000 and sal <= 3000;
      select ename, sal from emp where sal between 1000 and 3000;

-[14] ๊ธ‰์—ฌ๊ฐ€ 1300 ๋˜๋Š” 1500 ๋˜๋Š” 1600์ธ ์‚ฌ์› ์ •๋ณด ์ถœ๋ ฅ
    : select ename, sal from emp where sal = 1300 or sal = 1500 or sal = 1600;
      select ename, sal from emp where sal in (1300, 1500, 1600);

-[15]  ์ด๋ฆ„์ด 'K'๋กœ ์‹œ์ž‘ํ•˜๋Š” ์‚ฌ์› ์ถœ๋ ฅ
    : select empno, ename from emp where ename like 'K%';

-[16]  ์ด๋ฆ„์ด 'K'๋กœ ๋๋‚˜๋Š” ์‚ฌ์› ์ถœ๋ ฅ
    : select empno, ename from emp where ename like '%K';

-[17]  ์ด๋ฆ„์— 'K'๊ฐ€ ํฌํ•จ๋˜๋Š” ์‚ฌ์› ์ถœ๋ ฅ
    : select empno, ename from emp where ename like '%K%';

-[18]  ์ด๋ฆ„ 2๋ฒˆ์งธ์— 'A'๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ์‚ฌ์› ์ถœ๋ ฅ
    : select empno, ename from emp where ename like '_A%';

-[19] ์ปค๋ฏธ์…˜์„ ๋ฐ›์ง€ ์•Š๋Š” ์‚ฌ์›
    : select empno, ename, comm from emp where comm is null;

-[20] ์ปค๋ฏธ์…˜์„ ๋ฐ›๋Š” ์‚ฌ์›
    : select empno, ename, comm from emp where comm is not null;

-[21] ์‚ฌ๋ฒˆ์˜ ์ •๋ ฌ(์˜ค๋ฆ„์ฐจ์ˆœ)์œผ๋กœ ์ถœ๋ ฅ
    : select empno, ename from emp order by empno (asc);

-[22] ์‚ฌ๋ฒˆ์˜ ์ •๋ ฌ(๋‚ด๋ฆผ์ฐจ์ˆœ)์œผ๋กœ ์ถœ๋ ฅ
    : select empno, ename from emp order by empno desc;

-[23] ์‚ฌ์›์˜ ์—ฐ๋ด‰ ๊ณ„์‚ฐ ์ถœ๋ ฅ
    : select ename, sal, sal*12 from emp;
      select ename, sal, sal*12 (as) "์—ฐ๋ด‰" from emp;

-[24] ์ปค๋ฏธ์…˜์„ ํฌํ•จํ•œ ์ตœ์ข… ์—ฐ๋ด‰ ์ถœ๋ ฅ (*์˜ค๋ฅ˜๋‚จ)
    : select ename, sal, comm, sal*12+comm "์—ฐ๋ด‰" from emp;

-[25] [24]์˜ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ๋ฒ• (ํ•œ๋ฒˆ๋„ ์ž…๋ ฅํ•˜์ง€์•Š์€ ํ•ญ๋ชฉ์„ 0์œผ๋กœ ์ฑ„์šฐ๋ผ๋Š” ํ•จ์ˆ˜ ์ด์šฉ)
    : select ename, sal, comm, nvl(comm, 0), sal*12+nvl(comm, 0) "์—ฐ๋ด‰" from emp;





2. ๊ทธ๋ฃนํ•จ์ˆ˜

*์˜ค๋ผํด ๋ช…๋ น์–ด: Group ํ•จ์ˆ˜

-[1] ํ•ฉ๊ณ„ > sum()
      : select sum(sal) from emp;

-[2] ์นด์šดํŠธ > count()
      : select count(*) from emp;

-[3] ํ‰๊ท  > avg()
      : select avg(sal) from emp;

-[4] ์ตœ๋Œ€๊ฐ’ > max()
      : select max(sal) from emp;

-[4] ์ตœ๋Œ€๊ฐ’ > min()
      : select min(sal) from emp;

-[5] Group by ์ ˆ > ์ง์—…๋ณ„ ๊ธ‰์—ฌ ํ‰๊ท 
      : select job, avg(sal) from emp; (X) -> ๋‹จ์ผ ํ•„๋“œ์™€ ์—ฐ๊ด€ํ•ด์„œ ์ถœ๋ ฅํ•˜๋Š”๊ฑด ์•ˆ๋จ!
      : select job, avg(sal) from emp group by job;
     



3. ๋‚ด์žฅํ•จ์ˆ˜

*์˜ค๋ผํด ๋ช…๋ น์–ด: ๋‚ด์žฅ ํ•จ์ˆ˜

-[1] ์ƒ˜ํ”Œ ํ…Œ์ด๋ธ”์ธ dual ํ…Œ์ด๋ธ” (๊ฐ€์ƒํ…Œ์ด๋ธ”)
: select * from dual;

-[2] ์ž„์‹œ ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ
    : select 1234*1234 from dual;

-[3] ๋ฐ˜์˜ฌ๋ฆผ > round()  (์–‘์ˆ˜๋Š” ์†Œ์ˆซ์  ์ดํ•˜์ž๋ฆฌ๋กœ, ์Œ์ˆ˜๋Š” ์ •์ˆ˜์ž๋ฆฌ๋กœ)
    : select deptno, round(Sal, -3) from emp where deptno = 30;
      select round(12.3456, 3) from dual; -> 12.346

-[4] ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ > lower()
    : select lower('Hong Kil Dong') "์†Œ๋ฌธ์ž" from dual;

-[5] ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€ํ™˜ > upper()
    : select upper('Hong Kil Dong') "๋Œ€๋ฌธ์ž" from dual;

-[6] ์ฒซ๊ธ€์ž๋งŒ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€ํ™˜ > initcap()
    : select initcap('hong kil dong') "์ฒซ๊ธ€์ž๋งŒ ๋Œ€๋ฌธ์ž" from dual;

-[7] ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ > concat()
    : select concat('Hel', 'lo') from dual;

-[8] ๋ฌธ์ž์—ด ๊ธธ์ด > length(), lengthb()  
    ( length๋Š” ๊ธ€์ž์ˆ˜๋ฅผ , lengthb๋Š” byte๊ฐ’ ๋ฐ˜ํ™˜ -> ํ•œ๊ธ€ 2byte, ์˜์–ด 1byte ์œ ๋‹ˆ์ฝ”๋“œ๋ƒ ์•„์Šคํ‚ค์ฝ”๋“œ๋ƒ์—๋”ฐ๋ผ ๋‹ค๋ฆ„)
    : select length('์—์ด์ฝ˜'), lengthb('์—์ด์ฝ˜'), length('Acorn'), lengthb('Acorn') from dual;

-[9] ๋ฌธ์ž์—ด ์ถ”์ถœ > substr(), substrb()
    :  select substr('๋ฌธ์ž์—ด', ์‹œ์ž‘์œ„์น˜, ๋์œ„์น˜) from ํ…Œ์ด๋ธ”๋ช…;
    :  select substr('ํ™๊ธธ๋™ ๋งŒ์„ธ', 3, 5) from dual;
    :  select substrb('ํ™๊ธธ๋™ ๋งŒ์„ธ', 3, 5) from dual;

-[10] ํŠน์žฅ ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘ ์œ„์น˜ > instr()
    : select instr('ํ™๊ธธ๋™ ๋งŒ์„ธ', '์„ธ') from dual;

-[11] ์ž๋ฆฌ ์ฑ„์šฐ๊ธฐ > lpad(), rpad()
    : select lpad('๋ฌธ์ž์—ด', ์ž๋ฆฌ๊ฐฏ์ˆ˜, ๋นˆ๊ณต๊ฐ„์—์ฑ„์›Œ์งˆ๋ฌธ์ž ) from dual;
    : select lpad('Oracle', 20, '#') from dual;   -> #########Oracle
    : select rpad('Oracle', 20, '#') from dual;   -> Oracle#########

-[12] ์ปฌ๋Ÿผ์ด๋‚˜ ๋Œ€์ƒ ๋ฌธ์ž์—ด์—์„œ ํŠน์ • ๋ฌธ์ž๊ฐ€ ์ฒซ๋ฒˆ์งธ ๊ธ€์ž์ด๊ฑฐ๋‚˜ ๋งˆ์ง€๋ง‰ ๊ธ€์ž์ด๋ฉด
        ์ž˜๋ผ๋‚ด๊ณ  ๋‚จ์€ ๋ฌธ์ž์—ด๋งŒ ๋ฐ˜ํ™˜ (๊ณต๋ž€์„ ์—†์• ๋ ค๊ณ ํ•  ๋•Œ ๋งŽ์ด ์“ฐ์ž„) > trim()
    : select trim('a' from 'aaaOracleaaaaaa') from dual; -> Oracle
    : select trim(' ' from '      Oracle         ') from dual; -> Oracle

-[13] ์ ˆ๋Œ€๊ฐ’ > abs()
    : select abs(-10) from dual;

-[14] ์†Œ์ˆ˜์ž๋ฆฌ ๋ฒ„๋ฆฌ๊ธฐ > florr()
    : select floor(12.3456) from dual;

-[15] ํŠน์ • ์ž๋ฆฌ ์ž๋ฅด๊ธฐ > trunc()
    : select trunc(12.3456, 3) from dual;

-[16] ๋‚˜๋จธ์ง€ > mod()
    : select mod(3, 5) from dual;

-[17] ๋‚ ์งœ > sysdate()
    : select sysdate from dual;

-[18] ๊ฐœ์›” ์ˆ˜ ๊ตฌํ•˜๊ธฐ > months_between()  (ํ˜„์žฌ๋‚ ์งœ๊นŒ์ง€ ๊ฐœ์›” ์ˆ˜ )
    : select ename, months_between(sysdate, hiredate) from emp where deptno = 10;

-[19] ๊ฐœ์›” ์ˆ˜ ๋”ํ•˜๊ธฐ > add_months()
    : select add_months(sysdate, 4) from dual; -> ํ˜„์žฌ๋‚ ์งœ์— 4๊ฐœ์›” ๋”ํ•จ

-[20] ๋‹ค๊ฐ€์˜ฌ ์š”์ผ์— ํ•ด๋‹นํ•˜๋Š” ๋‚ ์งœ > next_day()
    : select next_day(sysdate, '์ผ์š”์ผ') from dual; -> ์ด๋ฒˆ์ฃผ ์ผ์š”์ผ ๋‚ ์งœ ์•Œ๋ ค์คŒ

-[21] ํ•ด๋‹น ๋‹ฌ์˜ ๋งˆ์ง€๋ง‰ ์ผ ์ˆ˜ > last_day()
    : select last_day(sysdate) from dual;

-[22] ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ > to_char()
    : select to_char(sysdate, 'yyyy-mm-dd') from dual;

-[23] ๋‚ ์งœํ˜•์œผ๋กœ ๋ณ€ํ™˜ > to_date()
    : select to_date('2009/12/31', 'yyyy/mm/dd') from dual;

-[24] NULL์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€๊ฒฝ > nvl()
    : select ename, nvl(comm, 0) from emp; -> ์ถœ๋ ฅํ•˜๋Š” ์ˆœ๊ฐ„์—๋งŒ 0์œผ๋กœ ๋ฐ”๊ฟ”์คŒ

-[25] switch๋ฌธ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ > decode()
    : select ename, deptno, decode(deptno, 10, 'ACCOUNT',
                                                             20, 'RESEARCH',
                                                             30, 'SALES',
                                                             40, 'OPERATIONS') as "๋ถ€์„œ๋ฒˆํ˜ธ"
       from emp;

-[26] if elseif else ๋ฌธ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ > case()
    : select ename, deptno,
      case when deptno = 10 then 'ACCOUNT'
             when deptno = 20 then 'RECEARCH'
              when deptno = 30 then 'SALES'
               when deptno = 40 then 'OPERATIONS'
      end as "๋ถ€์„œ๋ช…" from emp;



4. ํ…Œ์ด๋ธ” ์ƒ์„ฑ/ ์ˆ˜์ •/ ์‚ญ์ œ

*์˜ค๋ผํด SQL๋ฌธ : ํ…Œ์ด๋ธ” ์ƒ์„ฑ/์ˆ˜์ •/์‚ญ์ œ

-[1] ํ…Œ์ด๋ธ” ์ƒ์„ฑ : create ๋ฌธ
    > create table exam01
       (
             exno      number(2),
             exname  varchar2(20),
             exsal      number(7, 2)    
       );
     
      -> char๋Š” ๋ฐ”์ดํŠธํ• ๋‹น ๊ทธ๋Œ€๋กœ varchar2๋Š” ๊ฐ€๋ณ€์ ์œผ๋กœ ๋ฐ์ดํ„ฐํ• ๋‹น
      -> number(ํ• ๋‹น๋ฉ”๋ชจ๋ฆฌ ,์‹ค์ˆ˜๋ฅผ ํ‘œํ˜„ํ• ๋•Œ ์†Œ์ˆซ์  ์ดํ•˜ ๋‘˜์งธ์ž๋ฆฌ๊นŒ์ง€)

-[2] ๊ธฐ์กด ํ…Œ์ด๋ธ”๊ณผ ๋™์ผํ•˜๊ฒŒ ํ…Œ์ด๋ธ” ๋งŒ๋“ค๊ธฐ
    > create table exam02
       as
       select * from emp;

-[3] ๊ธฐ์กด ํ…Œ์ด๋ธ”์—์„œ ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ ์ถ”๊ฐ€ : alter๋ฌธ(ํ•„๋“œ ์ถ”๊ฐ€)
    > alter table exam01
       add
       (
             exjob varchar2(10)
        );
    
-[4]  ํ…Œ์ด๋ธ” ๊ตฌ์กฐ ์ˆ˜์ • : ํ•„๋“œ ์ˆ˜์ •
    > alter table exam01
       modify
       (
           exjob varchar2(20)
        );

-[5]  ํ…Œ์ด๋ธ” ๊ตฌ์กฐ ์ˆ˜์ • : ํ•„๋“œ ์‚ญ์ œ
    > alter table exam01
       drop column exjob;
      
-[6] ํ…Œ์ด๋ธ” ์‚ญ์ œ
    > drop table exam02;     

      -> 10 ์ดํ›„๋ถ€ํ„ฐ ์˜ค๋ผํด์—์„œ ์™„์ „์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ž„์‹œํ…Œ์ด๋ธ” ํ˜•ํƒœ๋กœ ๋ณ€๊ฒฝ๋˜์–ด์ง„๋‹ค.
      -> ๋‹ค์‹œ ์‚ฌ์šฉํ•˜๊ณ ์‹ถ์„๋•Œ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ ค๊ณ 
      -> 10๋ฒ„์ „๋ถ€ํ„ฐ๋Š” ์ž„์‹œํ…Œ์ด๋ธ”๋„ ์‚ญ์ œ์‹œ์ผœ์ฃผ์–ด์•ผํ•จ

   --- ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ์‚ญ์ œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด?
    > purge recyclebin;
 
   --- ์ฒ˜์Œ๋ถ€ํ„ฐ ํ…Œ์ด๋ธ”์„ ์™„์ „ ์‚ญ์ œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด?
    > drop table exam02 purge;

-[7] ํ…Œ์ด๋ธ” ์ด๋ฆ„ ๋ณ€๊ฒฝ
    > alter table exam01 rename to exam02;
    > rename exam01 to exam02;

-[8] ํ…Œ์ด๋ธ” ๋‚ด์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ(๋ ˆ์ฝ”๋“œ) ์‚ญ์ œ
    > truncate table exam01;





5. ์ž๋ฃŒํ˜• ๋ช…๋ช…๊ทœ์น™

*์˜ค๋ผํด ์ž๋ฃŒํ˜• ํƒ€์ž…

1. ์ •์ˆ˜ํ˜• ํƒ€์ž… : number(2)๋Š” ์ด ์ž๋ฆฌ์ˆ˜๊ฐ€ 2์ž๋ฆฌ์ธ ์ •์ˆ˜ํ˜• ๊ฐ’์ด ํ•„๋“œ์— ์ €์žฅ๋œ๋‹ค.
2. ์‹ค์ˆ˜ํ˜• ํƒ€์ž… : number(6, 2)๋Š” ์†Œ์ˆ˜์ ์„ ํฌํ•จํ•œ ์ด์ž๋ฆฌ์ˆ˜๊ฐ€ 6์ž๋ฆฌ์ด๊ณ ,  ์†Œ์ˆ˜์  ๋‘˜์งธ์ž๋ฆฌ๊นŒ์ง€ ์žˆ๋Š” ์‹ค์ˆ˜ํ˜• ๊ฐ‘์‹ฑ ์ €์žฅ๋œ๋‹ค.
                      ์ฒซ๋ฒˆ์งธ ์ธ์ž๊ฐ’ 6์€ ์†Œ์ˆ˜์ ์„ ํฌํ•จํ•œ ์ด ์ž๋ฆฌ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๊ณ , ๋‘๋ฒˆ์งธ ์ธ์ž๊ฐ’ 2๋Š” ์†Œ์ˆ˜์  ์ž๋ฆฌ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
 
3. ๊ฐ€๋ณ€ํ˜• ๋ฌธ์ž์—ด : varchar2()
                          ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๊ฐ€ ์‹ค์ œ ํฌ๊ธฐ๋ฅผ ๋„˜์–ด์„œ๋ฉด ๋„˜์–ด์„  ํฌ๊ธฐ๋งŒํผ ์ž๋ฃŒํ˜• ํฌ๊ธฐ๊ฐ€ ๋Š˜์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.
                          ๋งŒ์•ฝ varchar2(10)์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ํ•„๋“œ์—๋Š” 10์ž๋ฆฌ๊นŒ์ง€๋งŒ ์ €์žฅ๋œ๋‹ค. ์˜๋ฌธ์ž๋กœ 5์ž์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค๋ฉด,
                          varchar2๋Š” ํฌ๊ธฐ๊ฐ€ ์‹ค์ œ ๋ ˆ์ฝ”๋“œ ํฌ๊ธฐ๊ฐ€ 5์ธ๋งŒํผ ์ค„์–ด๋“ค์–ด ์ €์žฅ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ธฐ์–ต์žฅ์†Œ ์ ˆ์•ฝ์˜ ์žฅ์ ์ด ์žˆ๋‹ค.

4. ๊ณ ์ •ํ˜• ๋ฌธ์ž์—ด : char()
          char(10)์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ํ•„๋“œ์— ์˜๋ฌธ์ž 5 ํฌ๊ธฐ ๋งŒํผ ๋ ˆ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค๋ฉด char ์ž๋ฃŒํ˜•์€ ๊ณ ์ •ํ˜•์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ ๋ ˆ์ฝ”๋“œ ํฌ๊ธฐ๋งŒํผ(10) ์ค„์–ด๋“ค์ง€ ์•Š๊ณ 
          ๊ณ ์ •ํ˜•์œผ๋กœ ํ• ๋‹น๋œ๋‹ค.

* ํ…Œ์ด๋ธ”๋ช…, ์ปฌ๋Ÿผ๋ช… ๋ช…๋ช… ๊ทœ์น™

1. ๋ฐ˜๋“œ์‹œ ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผํ•œ๋‹ค.
2. 1~30์ž๊นŒ์ง€ ๊ฐ€๋Šฅ
3. A~Z๊นŒ์ง€์˜ ๋Œ€์†Œ๋ฌธ์ž์™€ 0~9๊นŒ์ง€์˜ ์ˆซ์ž ์กฐํ•ฉ
   ํŠน์ˆ˜ ๊ธฐํ˜ธ๋Š”(_, $, #)๋งŒ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Œ
4. ์˜ค๋ผํด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์˜ˆ์•ฝ์–ด๋‚˜ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ช…๊ณผ ์ค‘๋ณต ๋ถˆ๊ฐ€.
5. ๊ณต๋ฐฑ ํ—ˆ์šฉ ์•ˆ๋จ.

cf) ์˜ค๋ผํด์˜ ๊ฐ์ฒด : ํ…Œ์ด๋ธ”, ๋ทฐ, ์‹œํ€€์Šค, ์ธ๋ฑ์Šค





6. ๋ฐ์ดํ„ฐ ์ž…๋ ฅ/ ์ˆ˜์ •/ ์‚ญ์ œ

* ์˜ค๋ผํด SQL๋ฌธ : ๋ฐ์ดํ„ฐ ์ž…๋ ฅ/ ์ถœ๋ ฅ(select๋ฌธ)/ ์ˆ˜์ •/ ์‚ญ์ œ

-[1] ์ƒ˜ํ”Œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ
> create table exam02
   (
     deptno number(2),
     dname varchar2(14),
     loc varchar2(14)
    );

-[2] ๋ฐ์ดํ„ฐ ์ž…๋ ฅ : insert into ๋ฌธ
> insert into exam02(loc, deptno, dname)
  values('NEW YORK', 10, 'ACCOUNT');

-[3] ๋ฐ์ดํ„ฐ ์ž…๋ ฅ : ํ–‰ ์ƒ๋žต
> insert into exam02
  values(20, 'SALES', 'CHICAGO');

-[4] null ๊ฐ’ ์ž…๋ ฅ
> insert into exam02
  values(30, 'RESEARCH', null);

-[5] ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ : select ๋ฌธ

-[6] ๋ฐ์ดํ„ฐ ์ˆ˜์ • : ํ•„๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝ
๋ถ€์„œ๋ฒˆํ˜ธ ๋ณ€๊ฒฝ
> update exam02
   set deptno = 30;

-[7] ๊ธ‰์—ฌ 10% ์ธ์ƒ
>  update exam03
    set sal = sal * 1.1;

-[8] ๋ถ€์„œ๋ฒˆํ˜ธ๊ฐ€ 10์ธ ์‚ฌ์›์˜ ๋ถ€์„œ๋ฒˆํ˜ธ๋ฅผ 20์œผ๋กœ ๋ณ€๊ฒฝ
> update exam03
   set deptno = 20
   where deptno = 10;

-[9] ๊ธ‰์—ฌ๊ฐ€ 3000์ด์ƒ์ธ ์‚ฌ์›๋งŒ ๊ธ‰์—ฌ๋ฅผ 10% ์ธ์ƒ
> update exam03
   set sal = sal*1.1
   where sal >= 3000;

-[10] ์‚ฌ์› ์ด๋ฆ„์ด SCOTT์ธ ์ž๋ฃŒ์˜ ๋ถ€์„œ๋ฒˆํ˜ธ๋ฅผ 10,
        ์ง๊ธ‰์„ MANAGER๋กœ ๋ณ€๊ฒฝ
> update exam03
   set deptno = 10, job = 'MANAGER'
   where ename = 'SCOTT';

-[11] 30๋ฒˆ ๋ถ€์„œ ์‚ฌ์›์„ ์‚ญ์ œ
> delete from exam03
   where deptno = 30;

-[12] ๋ชจ๋“  ์ž๋ฃŒ ์‚ญ์ œ
> delete from exam03;

--- trunc()์™€ ์ฐจ์ด์  ?
delete๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์‚ญ์ œ trunc๋Š” ํ…Œ์ด๋ธ”์„ ์‚ญ์ œํ•œ๋‹ค์Œ ๋‹ค์‹œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ด์ฃผ๋Š” ์‹œํ€€์Šค.





7. ์กฐ์ธ(Join)

* ์˜ค๋ผํด SQL ๊ตฌ๋ฌธ : ์กฐ์ธ (Join)

-[1] ์›ํ•˜๋Š” ์ •๋ณด๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์— ๋‚˜๋‰˜์–ด์ ธ ์žˆ์„ ๋•Œ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
> select deptno from emp where ename = 'SCOTT'; -> 20
> select * from dept where deptno = 20;

-[2] ์กฐ์ธ : ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์— ๋‚˜๋‰˜์–ด์ ธ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ
                ํ•œ๋ฒˆ์˜ sql๋ฌธ์œผ๋กœ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ.

//cross join : 2๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ๋‹จ์ˆœ ์—ฐ๊ฒฐ
//equi join : ๋™์ผ ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ join

>  select * from emp, dept;
>  select *
    from emp, dept
    where emp.deptno = dept.deptno;

> select *
   from emp, dept
   where emp.deptno = dept.deptno
   and ename = 'SCOTT';

> select emp.ename, dept.dname, emp,deptno
   from emp, dept
   where emp.deptno = dept.deptno
   and emp.ename = 'SCOTT';

> select e.ename, d.dname, e.deptno
   from emp e, dept d
   where e.deptno =d.deptno
   and e.ename = 'SCOTT'

-[๋ฌธ์ œ] ์กฐ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ACCOUTING ๋ถ€์„œ ์†Œ์† ์‚ฌ์›์˜ ์ด๋ฆ„๊ณผ ์ž…์‚ฌ์ผ์„ ์ถœ๋ ฅ
> select ename, dname, hiredate
   from emp e, dept d
   where d.dname = 'ACCOUNTING'
   and d.deptno = e.deptno; 





8. ์„œ๋ธŒ์ฟผ๋ฆฌ

* ์˜ค๋ผํด ๋ช…๋ น์–ด : ์„œ๋ธŒ์ฟผ๋ฆฌ

- SQL : Structed Query Langage
- ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ select ๋ฌธ์žฅ์˜ ์ ˆ ์•ˆ์— ํฌํ•จ๋œ ๋˜ ํ•˜๋‚˜์˜ select ๋ฌธ์ด๋‹ค.
- ๋ฉ”์ธ์ฟผ๋ฆฌ / ์„œ๋ธŒ์ฟผ๋ฆฌ
- ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ๋น„๊ต ์—ฐ์‚ฐ์ž์˜ ์˜ค๋ฅธ์ชฝ์— ๊ธฐ์ˆ ํ•ด์•ผํ•˜๊ณ   ๋ฐ˜๋“œ์‹œ ๊ด„ํ˜ธ๋กœ ๋‘˜๋Ÿฌ์Œ“์•„์•ผํ•œใ„ทใ….
- ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ๋ฉ”์ธ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ด์ „์— ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰์ด ๋œ๋‹ค.
- ๋‹จ์ผํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ / ๋‹ค์ค‘ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ

SQL > select deptno
        from emp
        where ename = 'SCOTT';
SQL > select dname
        from dept
        where deptno = 20 ;

SQL > select dname
        from dept
        where deptno = (select deptno
                             from emp
                             where ename = 'SCOTT') ;

[๋‹จ์ผํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ]
SQL > select deptno from emp where ename = 'SCOTT';
SQL > select dname from dept where deptno = 20 ;

SQL > select dname
        from dept
        where deptno = (select deptno
                             from emp
                             where ename = 'SCOTT') ;

[๋ฌธ์ œ] SCOTT๊ณผ ๋™์ผํ•œ ์ง๊ธ‰(job)์„ ๊ฐ€์ง„ ์‚ฌ์›์„ ์ถœ๋ ฅํ•˜๋Š” sql๋ฌธ์„ ์ž‘์„ฑํ•ด๋ณด์„ธ์šฉ.
SQL > select ename, job
        from emp
        where job = (select job
                      from emp
                      where ename = 'SCOTT');

[๋ฌธ์ œ] SCOTT์˜ ๊ธ‰์—ฌ์™€ ๋™์ผํ•˜๊ฑฐ๋‚˜ ๋” ๋งŽ์ด ๋ฐ›๋Š” ์‚ฌ์›๋ช…๊ณผ ๊ธ‰์—ฌ๋ฅผ ์ถœ๋ ฅํ•ด๋ณด์•„๋ผ
SQL > select ename, sal
        from emp
        where sal >= (select sal
                    from emp
                    where ename = 'SCOTT'
                    );


[์„œ๋ธŒ์ฟผ๋ฆฌ & ๊ทธ๋ฃนํ•จ์ˆ˜]
ํ‰๊ท  ๊ธ‰์—ฌ๋ณด๋‹ค ๋” ๋งŽ์€ ๊ธ‰์—ฌ๋ฅผ ๋ฐ›๋Š” ์‚ฌ์›๋“ค์„ ์ถœ๋ ฅํ•ด๋ผ.
SQL > select ename, sal
        from emp
        where sal > (select avg(sal)
                        from emp 
                        );

[๋‹ค์ค‘ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ]
์—ฐ๋ด‰์„ 3000์ด์ƒ ๋ฐ›๋Š” ์‚ฌ์›์ด ์†Œ์†๋œ ๋ถ€์„œ์™€ ๋™์ผํ•œ ๋ถ€์„œ์—์„œ ๊ทผ๋ฌดํ•˜๋Š” ์‚ฌ์›๋“ค์˜ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•˜์„ธ์—ฌ.
SQL > select ename, deptno
        from emp
        where sal >= 3000;

-error
SQL > select ename, sal, deptno
        from emp
        where deptno = (select ename, deptno
                              from emp
                              where sal >= 3000 );

[in ์—ฐ์‚ฐ์ž] ๋ฉ”์ธ์ฟผ๋ฆฌ์˜ ๋น„๊ต ์กฐ๊ฑด('=' ์—ฐ์‚ฐ์ž๋กœ ๋น„๊ตํ•  ๊ฒฝ์šฐ)์ด ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ์ค‘์—
              ํ•˜๋‚˜๋ผ๋„ ์ผ์น˜ํ•˜๋ฉด ์ฐธ์ด๋‹ค.
              ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒฐ๊ณผ๊ฐ’์ด ๋‘ ๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์šฐ, (deptno = 10, 20)
SQL > select ename, sal, deptno
        from emp
        where deptno in ( select deptno
                                from emp
                                where sal >= 3000
                              );
             
[๋ฌธ์ œ] in ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ถ€์„œ๋ณ„๋กœ ๊ฐ€์žฅ ๊ธ‰์—ฌ๋ฅผ ๋งŽ์ด ๋ฐ›๋Š” ์‚ฌ์›์˜ ์ •๋ณด(์‚ฌ์› ๋ฒˆํ˜ธ,
        ์‚ฌ์›๋ช…, ๊ธ‰์—ฌ, ๋ถ€์„œ๋ฒˆํ˜ธ)๋ฅผ ์ถœ๋ ฅํ•˜์„ธ์š”.
SQL > select empno, ename, sal, deptno
         from emp
         where sal in ( select max(sal)
                           from emp
                   group by deptno   
                         );

[all ์—ฐ์‚ฐ์ž]
: ๋ฉ”์ธ์ฟผ๋ฆฌ์˜ ๋น„๊ต ์กฐ๊ฑด์ด ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์™€ ๋ชจ๋“  ๊ฐ’์ด ์ผ์น˜ํ•˜๋ฉด ์ฐธ์ด๋‹ค.
: ์ฐพ์•„์ง„ ๊ฐ’์— ๋Œ€ํ•ด์„œ and ์—ฐ์‚ฐ์„ ํ•ด์„œ ๋ชจ๋‘ ์ฐธ์ด๋ฉด ์ฐธ์ด๋˜๋Š” ์…ˆ์ด๋œ๋‹ค.
: > all์€ '๋ชจ๋“  ๋น„๊ต๊ฐ’๋ณด๋‹ค ํฌ๋ƒ'๊ณ  ๋ฌป๋Š” ๊ฒƒ์ด ๋˜๋ฏ€๋กœ ์ตœ๋Œ€๊ฐ’๋ณด๋‹ค ๋” ํฌ๋ฉด ์ฐธ์ด ๋œ๋‹ค.

-30๋ฒˆ ์†Œ์† ์‚ฌ์›๋“ค ์ค‘์—์„œ ๊ธ‰์—ฌ๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ๋ฐ›๋Š” ์‚ฌ์›๋ณด๋‹ค ๋” ๋งŽ์€ ๊ธ‰์—ฌ๋ฅผ ๋ฐ›๋Š” ์‚ฌ๋žŒ์˜
์ด๋ฆ„๊ณผ ๊ธ‰์—ฌ๋ฅผ ์ถœ๋ ฅํ•ด.
-๋‹จ์ผํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ & ๊ทธ๋ฃนํ•จ์ˆ˜ ์ด์šฉ
SQL > select ename, sal
        from emp
        where sal > (select max(sal)
                       from emp
                       where deptno = 30
                       ) ;

/error
SQL > select ename, sal
        from emp
        where sal > (select sal
                        from emp
                        where deptno = 30
                        );

SQL > select ename, sal
        from emp
        where sal > all ( select sal
                              from emp
                              where deptno = 30
                             ) ;

[๋ฌธ์ œ] ์˜์—…์‚ฌ์›(saleman)๋“ค๋ณด๋‹ค ๊ธ‰์—ฌ๋ฅผ ๋งŽ์ด ๋ฐ›๋Š” ์‚ฌ์›๋“ค์˜ ์ด๋ฆ„๊ณผ ๊ธ‰์—ฌ๋ฅผ ์ถœ๋ ฅํ•˜๋˜
        ์˜์—…์‚ฌ์›์€ ์ถœ๋ ฅ๋˜์ง€ ์•Š๊ฒŒ ๋ช…๋ น๋ฌธ์„ ์ž‘์„ฑํ•ด ๋ณด์„ธ์š”.
>>์˜์—…์‚ฌ์›์ค‘์— ๊ฐ€์žฅ ๋งŽ์ด ๋ฐ›๋Š” ์‚ฌ๋žŒ?๋ณด๋‹ค ๋” ๋งŽ์ด ๋ฐ›๋Š”
SQL > select ename, sal
        from emp
        where sal > all ( select sal
                             from emp
                             where job = 'SALESMAN'
                             );

[any ์—ฐ์‚ฐ์ž]
: any ์กฐ๊ฑด์€ ๋ฉ”์ธ ์ฟผ๋ฆฌ์˜ ๋น„๊ต ์กฐ๊ฑด์ด ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์™€ ํ•˜๋‚˜ ์ด์ƒ๋งŒ ์ผ์น˜ํ•˜๋ฉด ์ฐธ์ด๋‹ค.
: > any ๋Š” ์ฐพ์•„์ง„ ๊ฐ’์— ๋Œ€ํ•ด์„œ ํ•˜๋‚˜๋ผ๋„ ํฌ๋ฉด ์ฐธ์ด ๋œ๋‹ค.
: ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ฐพ์•„์ง„ ๊ฐ’ ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’. ์ฆ‰, ์ตœ์†Œ๊ฐ’ ๋ณด๋‹ค ํฌ๋ฉด ์ฐธ์ด๋œ๋‹ค.


- ๋ถ€์„œ ๋ฒˆํ˜ธ๊ฐ€ 30๋ฒˆ์ธ ์‚ฌ์›๋“ค์˜ ๊ธ‰์—ฌ ์ค‘ ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฐ’(950)๋ณด๋‹ค ๋†’์€ ๊ธ‰์—ฌ๋ฅผ ๋ฐ›๋Š” ์‚ฌ์›์˜
  ์ด๋ฆ„, ๊ธ‰์—ฌ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ช…๋ น๋ฌธ์„ ์ž‘์„ฑํ•ด๋ดyo
[๋‹จ์ผํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ & ๊ทธ๋ฃนํ•จ์ˆ˜]
SQL > select ename, sal
        from emp
        where sal > ( select min(sal)
                         from emp
                         where deptno = 30
                         ) ;
[๋‹ค์ค‘ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ]
SQL > select ename, sal
        from emp
        where sal > any(
                             select sal
                             from emp
                             where deptno = 30
                             );

[๋ฌธ์ œ] ์˜์—… ์‚ฌ์›๋“ค์˜ ์ตœ์†Œ ๊ธ‰์—ฌ๋ณด๋‹ค ๋งŽ์ด ๋ฐ›๋Š” ์‚ฌ์›๋“ค์˜ ์ด๋ฆ„, ๊ธ‰์—ฌ, ์ง๊ธ‰์„ ์ถœ๋ ฅํ•˜๋˜
        ์˜์—… ์‚ฌ์›์€ ์ถœ๋ ฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
SQL > select ename, sal, job
        from emp
        where sal > any (
                              select sal
                              from emp
                              where job = 'SALESMAN'
                              )
         and job <> 'SALESMAN' ;





9. ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด

* ์˜ค๋ผํด - ํ…Œ์ด๋ธ” ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด

* ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ ์กฐ๊ฑด (Data Interity Constraint Rule)
  : ํ…Œ์ด๋ธ”์— ๋ถ€์ ์ ˆํ•œ ์ž๋ฃŒ(๋ฐ์ดํ„ฐ)๊ฐ€ ์ž…๋ ฅ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•  ๋•Œ
   ๊ฐ ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด์„œ ์ •์˜ํ•˜๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ทœ์น™์„ ์˜๋ฏธ.

- Not null/null : null์„ ํ—ˆ์šฉํ•  ์ง€ ์•„๋‹ˆ๋ฉด ๋ฐ˜๋“œ์‹œ ์ž…๋ ฅ๋ฐ›๊ฒŒ ํ•  ๊ฒƒ์ธ์ง€์˜ ์กฐ๊ฑด.
- Unuique : ์ง€์ •๋œ ์ปฌ๋Ÿผ์— ์ค‘๋ณต๋˜์ง€ ์•Š๊ณ  ์œ ์ผํ•œ ๊ฐ’๋งŒ ์ €์žฅ๋˜๋Š” ์กฐ๊ฑด.
- Primary key(๊ธฐ๋ณธํ‚ค) : unique + not null
- Check : ํŠน์ •ํ•œ ๊ฐ’๋งŒ ์ €์žฅ๋˜๋Š” ํ•„๋“œ ์กฐ๊ฑด.
- Default : ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ํŠน์ • ๊ฐ’์ด ์ €์žฅ๋˜๋„๋ก ์„ค์ •ํ•˜๋Š” ์กฐ๊ฑด.
- Foreign key(์™ธ๋ž˜ํ‚ค) : ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’๋งŒ ์ €์žฅ์„ ํ—ˆ์šฉ.

* USER_CONSTRATINT ๋ฐ์ดํ„ฐ ๋”•์…”๋„ˆ๋ฆฌ ๋ทฐ : ์ œ์•ฝ ์กฐ๊ฑด์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ ์•Œ๋ ค ์คŒ.

SQL > desc user_constraints ;
        - owner : ์ œ์•ฝ ์กฐ๊ฑด์„ ์†Œ์œ ํ•œ ์‚ฌ์šฉ์ž๋ช…์„ ์ €์žฅํ•˜๋Š” ์นผ๋Ÿผ.
        - constraint_name : ์ œ์•ฝ ์กฐ๊ฑด๋ช…์„ ์ €์žฅํ•˜๋Š” ์ปฌ๋Ÿผ.
        - constraint_type : ์ œ์•ฝ ์กฐ๊ฑด์˜ ์œ ํ˜•์„ ์ €์žฅํ•˜๋Š” ์ปฌ๋Ÿผ.
           . P : Primary key
           . R : Foriegn key
           . U : Unique
           . C : Check, Not null
        - table_name : ๊ฐ ์ œ์•ฝ ์กฐ๊ฑด๋“ค์ด ์†ํ•œ ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„.
        - search_condition : ์–ด๋–ค ๋‚ด์šฉ์ด ์กฐ๊ฑด์œผ๋กœ ์‚ฌ์šฉ๋˜์—ˆ๋Š”์ง€ ์„ค๋ช….
        - r_constraint_name : ์ œ์•ฝ ์กฐ๊ฑด์ด foreign key์ธ ๊ฒฝ์šฐ ์–ด๋–ค primary key๋ฅผ
                                   ์ฐธ์กฐํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ–์Œ.

> column constraint_name format a15
> select constraint_name, constraint_type, table_name
   from user_constraints;

* user_cons_columns ๋ฐ์ดํ„ฐ ๋”•์…”๋„ˆ๋ฆฌ ๋ทฐ : ์–ด๋–ค ์ปฌ๋Ÿผ์— ์–ด๋–ค ์ œ์•ฝ ์กฐ๊ฑด์ด ์ง€์ •๋˜์—ˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ๋Š”
                                                          ๋ฐ์ดํ„ฐ ๋”•์…”๋„ˆ๋ฆฌ.
> column owner format a10   (์ปฌ๋Ÿผ ์ถœ๋ ฅ์„ 10์นธ์œผ๋กœ ์„ค์ •)
> column constraint_name format a15
> column table_name format a15
> column column_name format a15
> select * from user_cons_columns;



== ์ปฌ๋Ÿผ ๋ ˆ๋ฒจ ์ œ์•ฝ ์กฐ๊ฑด ์ง€์ •==

--[1] NOT NULL ์ œ์•ฝ ์กฐ๊ฑด์„ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ํ…Œ์ด๋ธ” ์ƒ์„ฑ
> drop table emp01;
> create table emp01
   (
       empno number(4),
       ename varchar2(10),
       job varchar2(10),
       deptno number(2)
   );

> insert into emp01
   values (null, null, 'SALEMAN', 40);

--[2] not null ์ œ์•ฝ ์กฐ๊ฑด์„ ๊ฑธ๊ณ  ํ…Œ์ด๋ธ” ์ƒ์„ฑ
> drop table emp02;
> create table emp02
   (
       empno number(4) not null,
       ename varchar2(10) not null,
       job varchar2(10),
       deptno number(2)
   );
> insert into emp02
   values (null, null, 'SALEMAN', 40);
  #[err] not null์กฐ๊ฑด์œผ๋กœ ์ธํ•ด null ๊ฐ’์€ ์‚ฝ์ž…ํ•  ์ˆ˜ ์—†์Œ!!

> insert into emp02
   values (null, 'SCOTT', 'SALEMAN', 40); 
  #[err] ํ•˜๋‚˜๋ผ๋„ null์ด ์žˆ์œผ๋ฉด ์•ˆ๋จ!

> insert into emp02
   values (7499, 'ALLEN', 'SALEMAN', 40); 

--[3] Unique ์ œ์•ฝ ์กฐ๊ฑด์„ ์„ค์ •ํ•˜์—ฌ ํ…Œ์ด๋ธ” ์ƒ์„ฑ
> drop table emp03;
> create table emp03
   (
       empno number(4) unique,
       ename varchar2(10) not null,
       job varchar2(10),
       deptno number(2)
   );

-> unique ์†์„ฑ์€ desc ๋ช…๋ น์–ด๋กœ ์•ˆ๋ณด์ธ๋‹ค.

> insert into emp03
   values (7499, 'ALLEN', 'SALEMAN', 40);
> insert into emp03
   values (7499, 'JONES', 'MANAGER', 20); 
#[err]๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด(SCOTT.SYS_COO11056์— ์œ„๋ฐฐ๋ฉ๋‹ˆ๋‹ค.  ๋ฐ์ดํ„ฐ ์ค‘๋ณต X

> insert into emp03
   values (7566, 'JONES', 'MANAGER', 20);  #์ž˜ ๋„ฃ์–ด์ง
> insert into emp03
   values (null, 'SMITH', 'CLERK', 30);   #๊ทผ๋ฐ NULL๊ฐ’์ด ๋“ค์–ด๊ฐ€๋„ค?

--[4] not null & unique ์ œ์•ฝ ์กฐ๊ฑด
   - ์‚ฌ์šฉ์ž๊ฐ€ ์ œ์•ฝ ์กฐ๊ฑด๋ช…์„ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ์ œ์•ฝ ์กฐ๊ฑด๋งŒ์„ ๋ช…์‹œํ•  ๊ฒฝ์šฐ
      ์˜ค๋ผํด ์„œ๋ฒ„๊ฐ€ ์ž๋™์œผ๋กœ ์ œ์•ฝ ์กฐ๊ฑด๋ช…์„ ๋ถ€์—ฌํ•œ๋‹ค.
   - ์˜ค๋ผํด์ด ๋ถ€์—ฌํ•˜๋Š” ์ œ์•ฝ ์กฐ๊ฑด๋ช…์€ SYS_๋‹ค์Œ์— ์ˆซ์ž๋ฅผ ๋‚˜์—ดํ•œ๋‹ค.
   - ์–ด๋–ค ์ œ์•ฝ ์กฐ๊ฑด์„ ์œ„๋ฐฐํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—
     ์‚ฌ์šฉ์ž๊ฐ€ ์˜๋ฏธ์žˆ๊ฒŒ ์ œ์•ฝ ์กฐ๊ฑด๋ช…์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋„๋ก ์˜ค๋ผํด์€ ์ œ๊ณต,
  
> drop table emp04;
> create table emp04
   (
       empno number(4) constraint emp04_empno_uk unique, 
       ename varchar2(10) constraint emp04_ename_nn not null,
       job varchar2(10),
       deptno number(2)
   );
# ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋‚ ๋•Œ ์ œ์•ฝ ์กฐ๊ฑด ์•ž์— ์ง€์–ด์ง„ ์ด๋ฆ„์ด ๋œฌ๋‹ค.

> insert into emp04
   values (7499, 'ALLEN', 'SALEMAN', 40);
> insert into emp04
   values (7499, 'JONES', 'MANAGER', 20);
   #๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ ์กฐ๊ฑด(SCOTT.EMP04_EMPNO_UK)์— ์œ„๋ฐฐ๋ฉ๋‹ˆ๋‹ค.

> select table_name, constraint_name
   from user_constraints
   where table_name in ('EMP04');
#ํŠน์ • ํ…Œ์ด๋ธ”์˜ ์ œ์•ฝ์กฐ๊ฑด๋“ค ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ํ…Œ์ด๋ธ”์ด๋ฆ„์€ ๋ฐ˜๋“œ์‹œ ๋Œ€๋ฌธ์ž๋กœ!

--[5] Primary key(๊ธฐ๋ณธํ‚ค) ์ œ์•ฝ ์กฐ๊ฑด ์„ค์ •ํ•˜๊ธฐ
    - unique + not null
    - ๋ฐ˜๋“œ์‹œ ์ž…๋ ฅํ•˜๋˜ ๋ฐ์ดํ„ฐ ์ค‘๋ณต X

> drop table emp05;
> create table emp05
   (
       empno number(4) constraint emp05_empno_pk primary key, 
       ename varchar2(10) constraint emp05_ename_nn not null,
       job varchar2(10),
       deptno number(2)
   );
> insert into emp05
   values (7499, 'ALLEN', 'SALEMAN', 40);
> insert into emp05
   values (7499, 'JONES', 'MANAGER', 20);  #๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด (SCOTT. EMP05_EMPNO_PK)์— ์œ„๋ฐฐ๋ฉ๋‹ˆ๋‹ค.
> insert into emp05
   values (null, 'SMITH', 'CLERK', 30);  #null๊ฐ’ ๋„ฃ์„ ์ˆ˜ ์—†๋‹ค!

--[6] ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ„ํ•œ Foreign key(์™ธ๋ž˜ํ‚ค) ์ œ์•ฝ ์กฐ๊ฑด
   : ๋ถ€๋ชจ ํ‚ค๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ์ปฌ๋Ÿผ์€ ๋ฐ˜๋“œ์‹œ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธํ‚ค(primary key)์ด๊ฑฐ๋‚˜,
     ์œ ์ผํ‚ค(unique)๋กœ ์„ค์ •๋˜์–ด ์žˆ์–ด์•ผํ•œ๋‹ค.

> drop table dept01;
> create table dept01
   as
   select * from dept;
#๋ณต์‚ฌ๋ฅผ ํ•ด์˜ฌ๋•Œ ๋ฐ์ดํ„ฐ๋งŒ ํ•ด์˜ค๊ณ  ์ œ์•ฝ์กฐ๊ฑด์€ ๋ณต์‚ฌํ•˜์ง€์•Š๋Š”๋‹ค!

> create table dept01 (
     deptno  number(2) constraint dept01_deptno_pk primary key,
     deptname varchar2(14),
     loc varchar2(13)         
    );
> insert into dept01
   values (10, 'ACCOUTING', 'NEW YORK');
> insert into dept01
   values (20, 'RESEARCH', 'DALLAS');
> insert into dept01
   values (30, 'SALES', 'CHICAGO');

> create table emp06  (
       empno number(4) constraint emp06_empno_pk primary key, 
       ename varchar2(10) constraint emp06_ename_nn not null,
       job varchar2(10),
       deptno number(2) constraint emp06_deptno_fk references dept01(deptno)
   );
  #์ž์‹ํ…Œ์ด๋ธ”์—์„œ ์™ธ๋ž˜ํ‚ค ์ œ์•ฝ์กฐ๊ฑด์„ ๊ฑธ์–ด์ค˜์•ผํ•œ๋‹ค.

> select table_name, constraint_name
   from user_constraints
   where table_name in ('EMP06');

> insert into emp06
   values (7499, 'ALLEN', 'SALEMAN', 30);
> insert into emp06
   values (7566, 'JONES', 'MANAGER', 50); #[err] ๋ถ€๋ชจํ‚ค๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

--[7] Check ์ œ์•ฝ ์กฐ๊ฑด ์„ค์ •ํ•˜๊ธฐ
       : ๊ธ‰์—ฌ ์ปฌ๋Ÿผ์„ ์ƒ์„ฑํ•˜๋˜ ๊ฐ’์€ 500~5000 ์‚ฌ์ด์˜ ๊ฐ’๋งŒ ์ €์žฅ ๊ฐ€๋Šฅ
       : ์„ฑ๋ณ„ ์ €์žฅ ์ปฌ๋Ÿผ์œผ๋กœ gender๋ฅผ ์ •์˜ํ•˜๊ณ  'M', 'F' ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ ์ €์žฅ ๊ฐ€๋Šฅ

> drop table emp07;
> create table emp07(
     empno number(4) constraint emp07_empno_pk primary key,
             ename varchar2(20) constraint emp07_ename_nn not null,
             sal number(7, 2) constraint emp07_sal_ck check(sal between 500 and 5000),
     gender varchar2(1) constraint emp07_gender_ck check(gender in ('M', 'F'))
    );
> insert into emp07
   values (7499, 'ALLEN', 200, 'M'); #[err] ์ฒดํฌ์กฐ๊ฑด์— ์œ„๋ฐฐ!
> insert into emp07
   values (7499, 'ALLEN', 700, 'M');
> insert into emp07
   values (7499, 'JONES', 900, 'A'); #[err]

--[8] Default ์ œ์•ฝ ์กฐ๊ฑด ์„ค์ •ํ•˜๊ธฐ
      : ์ง€์—ญ(loc) ์ปฌ๋Ÿผ์— ์•„๋ฌด ๊ฐ’๋„ ์ž…๋ ฅํ•˜์ง€ ์•Š์•˜์„ ๋•Œ default ๊ฐ’์ธ 'SEOUL'์ด ์ž…๋ ฅ ๋˜๋„๋ก ์„ค์ •

> drop table dept02;
> create table dept02 (
        deptno number(2) primary key,
     dname varchar2(14),
             loc varchar2(12) default 'SEOUL'
    );
> insert into dept02(deptno, dname)
   values (10, 'ACCOUNTING');        #์ž๋™์œผ๋กœ SEOUL์ด ๋“ค์–ด๊ฐ
> insert into dept02
   values (20, 'RESEARCH', 'NEW YORK');
> insert into dept02
   values (30, 'SALES');      #[err] ๊ฐ’์˜ ์ˆ˜๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

--[9]

--[10] ์ปฌ๋Ÿผ ๋ ˆ๋ฒจ๋กœ ์ œ์•ฝ ์กฐ๊ฑด๋ช… ๋ช…์‹œํ•ด์„œ ์ œ์•ฝ ์กฐ๊ฑด ์„ค์ •ํ•˜๊ธฐ
> create table emp10  (
       empno number(4) constraint emp10_empno_pk primary key, 
       ename varchar2(10) constraint emp10_ename_nn not null,
       job varchar2(10),
       deptno number(2) constraint emp10_deptno_fk references dept01(deptno)
   );

--[11] ํ…Œ์ด๋ธ” ๋ ˆ๋ฒจ ๋ฐฉ์‹์œผ๋กœ ์ œ์•ฝ์กฐ๊ฑด ์„ค์ •ํ•˜๊ธฐ
        ***์ฃผ์˜ : not null ์ œ์•ฝ ์กฐ๊ฑด์€ ํ…Œ์ด๋ธ” ๋ ˆ๋ฒจ ๋ฐฉ์‹์œผ๋กœ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ง€์ •ํ•  ์ˆ˜ ์—†๋‹ค.
> create table emp11  (
       empno number(4) , 
       ename varchar2(10) constraint emp11_ename_nn not null,
       job varchar2(10),
       deptno number(2),   
       constraint emp11_empno_pk primary key(empno),
       unique(job),
       foreign key(deptno) references dept01(deptno) 
   );

--[12] ์ œ์•ฝ ์กฐ๊ฑด ์ถ”๊ฐ€ํ•˜๊ธฐ
> delete from emp01;

> alter table emp01
   add constraint emp01_empno_pk primary key(empno);
> alter table emp01
   add constraint emp01_deptno_fk foreign key(deptno) references dept01(deptno);

> select table_name, constraint_name, constraint_type
   from user_constraints
   where table_name in ('EMP01');
> insert into emp01
  values( null, null, 'SAM', 40);  #[err]์ œ์•ฝ์กฐ๊ฑด์œผ๋กœ ์‚ฝ์ž… X

--[13] not null ์ œ์•ฝ ์กฐ๊ฑด ์ถ”๊ฐ€ ํ•˜๊ธฐ
> alter table emp01
   modify ename constraints emp01_ename_nn not null;

--[14] ์ œ์•ฝ ์กฐ๊ฑด ์ œ๊ฑฐํ•˜๊ธฐ
> alter table emp01
   drop primary key;

> alter table emp01
   drop emp01_ename_nn;

--[15] ์ œ์•ฝ ์กฐ๊ฑด(์™ธ๋ž˜ํ‚ค) ์‚ญ์ œ
> delete from dept01
   where deptno = 30;   #[err] ์ž์‹๋ ˆ์ฝ”๋“œ ๋ฐœ๊ฒฌ!

   1) ์ œ์•ฝ ์กฐ๊ฑด์˜ ๋น„ํ™œ์„ฑํ™”  
      - ์ž์‹ ํ…Œ์ด๋ธ”์ธ ์‚ฌ์›ํ…Œ์ด๋ธ”(emp06)์€ ๋ถ€๋ชจํ…Œ์ด๋ธ”(dept01)์— ๊ธฐ๋ณธํ‚ค์ธ ๋ถ€์„œ๋ฒˆํ˜ธ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋‹ค.
      - ๋ถ€์„œ ํ…Œ์ด๋ธ”์˜ 30๋ฒˆ ๋ถ€์„œ๋Š” ์‚ฌ์› ํ…Œ์ด๋ธ”์— ๊ทผ๋ฌดํ•˜๋Š” 30๋ฒˆ ์‚ฌ์›์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ญ์ œํ•  ์ˆ˜ ์—†๋‹ค.
      - ๋ถ€๋ชจํ…Œ์ด๋ธ”์˜ ๋ถ€์„œ๋ฒˆํ˜ธ 30๋ฒˆ์ด ์‚ญ์ œ๋˜๋ฉด ์ž์‹ํ…Œ์ด๋ธ”์—์„œ ์ž์‹ ์ด ์ฐธ์กฐํ•˜๋Š” ๋ถ€๋ชจ๋ฅผ ์žƒ์–ด๋ฒ„๋ฆฌ๊ฒŒ ๋˜๋ฏ€๋กœ ์‚ญ์ œํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด๋‹ค.
      - ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ์‚ญ์ œ?
          <1> ๋ถ€์„œ ํ…Œ์ด๋ธ”์˜ 30๋ฒˆ ๋ถ€์„œ์—์„œ ๊ทผ๋ฌดํ•˜๋Š” ์‚ฌ์›์„ ์‚ญ์ œํ•œ ํ›„ ๋ถ€์„œ ํ…Œ์ด๋ธ”์—์„œ 30๋ฒˆ ๋ถ€์„œ๋ฅผ ์‚ญ์ œ
          <2> ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ ๋•Œ๋ฌธ์— ์‚ญ์ œ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ emp06 ํ…Œ์ด๋ธ”์˜ ์™ธ๋ž˜ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด์„ ์ œ๊ฑฐํ•œ ํ›„ 30๋ฒˆ ๋ถ€์„œ๋ฅผ ์‚ญ์ œ.
      - ์ œ์•ฝ ์กฐ๊ฑด ๋น„ํ™œ์„ฑํ™”
          <1> ํ…Œ์ด๋ธ”์—์„œ ์ œ์•ฝ ์กฐ๊ฑด์„ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ์ผ์‹œ์ ์œผ๋กœ ์ ์šฉ์‹œํ‚ค์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ œ์•ฝ ์กฐ๊ฑด์„ ๋น„ํ™œ์„ฑํ™” ํ•˜๋Š” ๋ฐฉ๋ฒ•
          <2> .DISABLE_CONSTRAINT : ์ œ์•ฝ์กฐ๊ฑด ์ผ์‹œ ๋น„ํ™œ์„ฑํ™”
                 .ENABLE_CONSTRAINT : ๋น„ํ™œ์„ฑํ™”๋œ ์ œ์•ฝ ์กฐ๊ฑด์„ ํ•ด์ œํ•˜์—ฌ ๋‹ค์‹œ ํ™œ์„ฑํ™”.

    > alter table emp06
          disable constraint emp06_deptno_fk;
     > delete from dept01
        where deptno = 30;
     > alter table emp06
        enable constraint emp06_deptno_fk;  #[err] ๊ฐ’์ด ์ด๋ฏธ ์ง€์›Œ์ ธ์„œ ์—๋Ÿฌ

     > insert into dept01
        values(30, 'SALES', 'CHICAGO');
     > alter table emp06
       enable constraint emp06_deptno_fk;  #๋‹ค์‹œ ๋ฐ์ดํ„ฐ ์ƒ์„ฑํ•˜๊ณ  ํ•˜๋ฉด ์ž˜ ์ˆ˜ํ–‰๋จ

   2) cascade ์˜ต์…˜
     - ๋ถ€๋ชจํ…Œ์ด๋ธ”(dept01)๊ณผ ์ž์‹ํ…Œ์ด๋ธ”(emp06)๊ฐ„์˜ ์ฐธ์กฐ ์„ค์ •(์™ธ๋ž˜ํ‚ค)์ด ๋˜์–ด ์žˆ์„ ๋•Œ ๋ถ€๋ชจํ…Œ์ด๋ธ”์˜ ์ œ์•ฝ ์กฐ๊ฑด์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด
       ์ด๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ์ž์‹ํ…Œ์ด๋ธ”์˜ ์ œ์•ฝ ์กฐ๊ฑด๊นŒ์ง€ ๋น„ํ™œ์„ฑํ™” ์‹œ์ผœ์ฃผ๋Š” ์˜ต์…˜.
     
      > alter table dept01
         disable primary key cascade;
      > alter table dept01
         drop primary key;
      > alter table dept01
         drop primary key cascade;
         





10. ์‹œํ€€์Šค

*์˜ค๋ผํด - ์‹œํ€€์Šค(Sequence)
  : ํ…Œ์ด๋ธ” ์ƒ์„ฑ ํ›„ ์‹œํ€€์Šค(์ผ๋ จ๋ฒˆํ˜ธ)๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

--[1] ์ƒ˜ํ”Œํ…Œ์ด๋ธ” ์ƒ์„ฑ
> create table memos
  (
     num number(4) primary key,
     name varchar2(20) not null,
     postDate Date default (sysdate)
  );

--[2] ํ•ด๋‹น ํ…Œ์ด๋ธ”์˜ ์‹œํ€€์Šค ์„ค์ •
> create sequence memos_seq
   start with 1 increment by 1;   #start with ์‹œ์ž‘๊ฐ’ increment by ์ฆ๊ฐ€๊ฐ’;

--[3] ๋ฐ์ดํ„ฐ ์ž…๋ ฅ : ์ผ๋ จ๋ฒˆํ˜ธ ํฌํ•จ
> insert into memos (num, name)
   values(memos_seq.nextval, 'ํ™๊ธธ๋™');
> insert into memos (num, name)
   values(memos_seq.nextval, 'ํ™๊ธธ์„œ');
> insert into memos (num, name)
   values(memos_seq.nextval, 'ํ™๊ธธ๋‚จ');
> insert into memos (num, name)
   values(memos_seq.nextval, 'ํ™๊ธธ๋ถ');

--[4] ํ˜„์žฌ ์‹œํ€€์Šค๊ฐ€ ์–ด๋””๊นŒ์ง€ ์ฆ๊ฐ€๋˜์–ด์ ธ ์žˆ๋Š”์ง€ ํ™•์ธ
> select memos_seq.currval from dual;

--[5] ์‹œํ€€์Šค ์ˆ˜์ • : ์ตœ๋Œ€ ์ฆ๊ฐ€๊ฐ’์„ 6๊นŒ์ง€๋กœ ์ œํ•œ
> alter sequence memos_seq maxvalue 6;

> insert into memos (num, name)
   values(memos_seq.nextval, 'ํ™๋‚จ์ด');   #์‹œํ€€์Šค 6
> insert into memos (num, name)
   values(memos_seq.nextval, 'ํ™๋งŒ์ด');   #[err] ์‹œํ€€์Šค๊ฐ€ 7์ด ๋˜๋ฏ€๋กœ ์—๋Ÿฌ!

--[6] ์‹œํ€€์Šค ์‚ญ์ œ
> drop sequence memos_seq;      #๋”์ด์ƒ ์ด ์‹œํ€€์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค


cf) ๊ถŒํ•œ ๋ถ€์—ฌ (์‹œํ€€์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๊ถŒํ•œ์ด ํ•„์š”ํ•˜๋‹ค / scott์€ ์ด๋ฏธ ์žˆ์Œ)
   - system์œผ๋กœ ์ ‘์† ํ›„
     > grant create sequence to ์‚ฌ์šฉ์ž๋ช…;






11. ํŠธ๋žœ์žญ์…˜

*์˜ค๋ผํด - ํŠธ๋žœ์žญ์…˜(transaction)
  - commit : ๋ช…๋ น์–ด ์™„์ „ ์‹คํ–‰
  - rollback : ๋ช…๋ น์–ด ๋˜๋Œ๋ฆฌ๊ธฐ

--[1] ํ…Œ์ด๋ธ” ์ƒ์„ฑ
> create table trans(
     num number(2) primary key,
     name varchar2(20) not null,
     email varchar2(50),
     title varchar2(150),
     postDate Date default sysdate,
     postIP varchar2(20)
);

--[2] ์‹œํ€€์Šค(์ผ๋ จ๋ฒˆํ˜ธ) ์ƒ์„ฑ
> create sequence trans_seq
   start with 1 increment by 1;
  
> insert into trans
   values (trans_seq.nextval, 'ํ™๊ธธ๋™', 'a@a.com', '์•ˆ๋…•ํ•˜์„ธ์š”, ํ™๊ธธ๋™์ž…๋‹ˆ๋‹ค' , sysdate, '127.0.0.1');
  
   # ์—ฌ๊ธฐ๊นŒ์ง€ํ•˜๊ณ  ๋‹ค๋ฅธ cmd์ฐฝ์—์„œ select * from trans; ํ•ด๋ณด๋ฉด ์„ ํƒ๋œ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์—†๋‹ค๊ณ  ํ•œ๋‹ค!
      ์ด๋•Œ ์›๋ž˜ ์ฐฝ์—์„œ commit ์„ ํ•œ๋ฒˆ ํ•ด์ฃผ๋ฉด ๋œฌ๋‹ค~
      
> insert into trans
   values (trans_seq.nextval, 'ํ™๊ธธ์„œ', 'b@a.com', '์•ˆ๋…•ํ•˜์„ธ์š”, ํ™๊ธธ์„œ์ž…๋‹ˆ๋‹ค' , sysdate, '127.0.0.1');
      
  # ์—ฌ๊ธฐ๊นŒ์ง€ ํ•˜๊ณ  ์›๋ž˜์ฐฝ์—์„œ rollback ํ•˜๊ณ  ๋‹ค๋ฅธ ์ฐฝ์—์„œ ๋ณด๋ฉด ๋‘๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋Š” ์—†๋‹ค.
  # ์ž๋™์ปค๋ฐ‹์„ ๋‚ด๋ถ€์ ์œผ๋กœ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค.
       ๋งˆ์ง€๋ง‰ commit ๋ถ€ํ„ฐ ๋‹ค์Œ commit์‚ฌ์ด๊นŒ์ง€๊ฐ€ rollback์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์‹œ์  





12. ๋ทฐ(view)

*์˜ค๋ผํด - ๋ทฐ(View)
- ๋ฌผ๋ฆฌ์ ์ธ ํ…Œ์ด๋ธ”์— ๊ทผ๊ฑฐํ•œ ๋…ผ๋ฆฌ์ ์ธ ๊ฐ€์ƒ ํ…Œ์ด๋ธ”

- ๊ฐ€์ƒ์ด๋ž€ ๋‹จ์–ด๋Š” ์‹ค์งˆ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ถ™์ธ ๊ฒƒ์ด๊ณ , ํ…Œ์ด๋ธ”์ด๋ž€ ๋‹จ์–ด๋Š” ์‹ค์งˆ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ์ง„ ์•Š์ง€๋งŒ ์‚ฌ์šฉ์ž๋Š” ๋งˆ์น˜
     ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๊ฒŒ ๋ทฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ถ™์ธ ๊ฒƒ.

- ๋ทฐ๋Š” ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์—์„œ ํŒŒ์ƒ๋œ ๊ฐ์ฒด๋กœ์„œ ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ํ•˜๋‚˜์˜ ์ฟผ๋ฆฌ๋ฌธ์ž„.

- ์‹ค์ œ ํ…Œ์ด๋ธ”์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ทฐ๋ฅผ ํ†ตํ•ด์„œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

- ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฃผ์–ด์ง„ ๋ทฐ๋ฅผ ํ†ตํ•ด์„œ ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์„ ์ œํ•œ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋จ

- ๋ทฐ๋Š” ์ด๋ฏธ ์กด์žฌํ•˜๊ณ  ์žˆ๋Š” ํ…Œ์ด๋ธ”์— ์ œํ•œ์ ์œผ๋กœ ์ ‘๊ทผํ•˜๋„๋ก ํ•œ๋‹ค.

- ๋ทฐ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‹ค์งˆ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ๋ฌผ๋ฆฌ์ ์ธ ํ…Œ์ด๋ธ”์ด ์กด์žฌํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ด ํ…Œ์ด๋ธ”์„ ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์ด๋‹ค.


--[1] ๋ทฐ์˜ ๊ธฐ๋ณธ ํ…Œ์ด๋ธ” ์ƒ์„ฑ
    : dept ํ…Œ์ด๋ธ”์˜ ๋ณต์‚ฌ๋ณธ์„ dept_copy ๋กœ ์ƒ์„ฑ
> create table dept_copy
    as
     select * from dept;     #๋‹จ ์ œ์•ฝ์กฐ๊ฑด์€ ๋ณต์‚ฌ๋˜์ง€ ์•Š์Œ!
    
     : emp ํ…Œ์ด๋ธ”์˜ ๋ณต์‚ฌ๋ณธ์„ emp_copy๋กœ ์ƒ์„ฑ
> create table emp_copy
   as
   select * from emp;

--[2] ๋ทฐ ์ •์˜ํ•˜๊ธฐ
    : ๋ทฐ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” create view๋กœ ์‹œ์ž‘ํ•จ. as ๋‹ค์Œ์€ ๋งˆ์น˜ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฌธ๊ณผ ์œ ์‚ฌํ•จ.
    : ์„œ๋ธŒ์ฟผ๋ฆฌ์—๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ ์‚ฌ์šฉํ–ˆ๋˜ select๋ฌธ์„ ๊ธฐ์ˆ ํ•˜๋ฉด ๋จ

// ๋งŒ์ผ 30๋ฒˆ ๋ถ€์„œ์— ์†Œ์†๋œ ์‚ฌ์›๋“ค์˜ ์‚ฌ๋ฒˆ๊ณผ ์ด๋ฆ„๊ณผ ๋ถ€์„œ๋ฒˆํ˜ธ๋ฅผ ์ž์ฃผ ๊ฒ€์ƒ‰ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด
> select empno, ename, deptno
    from emp_copy
    where deptno = 30;
    
> create view emp_view30
   as
   select empno, ename, deptno
   from emp_copy
   where deptno = 30;
  
   # view๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ๊ถŒํ•œ์ด ํ•„์š”ํ•˜๋‹ค! (system์œผ๋กœ ์ ‘์†ํ•ด์„œ ๊ถŒํ•œ ์–ป์–ด์˜จ๋‹ค.)
     > grant create view to ์‚ฌ์šฉ์ž๋ช…;
    
> select * from emp_view30;  

   # ๋งˆ์น˜ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค!
      ๊ธด ์ฟผ๋ฆฌ๋ฌธ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค!
      
--[3] ๋ทฐ์˜ ๋‚ด๋ถ€๊ตฌ์กฐ์™€ user_views ๋ฐ์ดํ„ฐ ๋”•์…”๋„ˆ๋ฆฌ
> desc user_views;
> select view_name, text
   from user_views;
  
--[4] ๋ทฐ์˜ ๋™์ž‘ ์›๋ฆฌ
  1. ์‚ฌ์šฉ์ž๊ฐ€ ๋ทฐ์— ๋Œ€ํ•ด์„œ ์งˆ์˜๋ฅผ ํ•˜๋ฉด user_views์—์„œ ๋ทฐ์— ๋Œ€ํ•œ ์ •์˜๋ฅผ ์กฐํšŒํ•œ๋‹ค.
  2. ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๋ทฐ์˜ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์‚ดํ•€๋‹ค.
  3. ๋ทฐ์— ๋Œ€ํ•œ ์งˆ์˜๋ฅผ ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์งˆ์˜๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
  4. ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์งˆ์˜๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰ํ•œ๋‹ค.
  5. ๊ฒ€์ƒ‰๋œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
 

--[5] ๋ทฐ์™€ ๊ธฐ๋ณธ ํ…Œ์ด๋ธ” ๊ด€๊ณ„ ํŒŒ์•…
     : 1. ๋ทฐ๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ์ด ๊ฐ€๋Šฅ?
> insert into emp_view30
   values (8000, 'TOM', 30);
> select * from emp_view30;
> select * from emp_copy;
  
   # ์ €์žฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค!  emp_copy ํ…Œ์ด๋ธ”์—๋„ ์ €์žฅ์ด ๋˜์–ด์žˆ๋‹ค!
      ๊ฒฐ๋ก  : ๋ทฐ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉด ๊ธฐ๋ณธํ…Œ์ด๋ธ”์— ์ €์žฅ๋œ๋‹ค.
    
       2. insert๋ฌธ์— ๋ทฐ(emp_view30)๋ฅผ ์‚ฌ์šฉํ•˜์˜€์ง€๋งŒ, ๋ทฐ๋Š” ์ฟผ๋ฆฌ๋ฌธ์— ๋Œ€ํ•œ ์ด๋ฆ„์ผ ๋ฟ ์ƒˆ๋กœ์šด ๋ ˆ์ฝ”๋“œ๋Š” ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”(emp_copy)์— ์‹ค์งˆ์ ์œผ๋กœ ์ถ”๊ฐ€๋˜๋Š” ๊ฒƒ์ด๋‹ค.
     
       3. ๋ทฐ๋Š” ์‹ค์งˆ์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์„ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•œ ํˆฌ๋ช…ํ•œ ์ฐฝ์ด๋‹ค.
          ์ฆ‰, ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์˜ ๋ชจ์–‘์ด ๋ฐ”๋€ ๊ฒƒ์ด๊ณ  ๊ทธ ๋ฐ”๋€ ๋‚ด์šฉ์„ ๋ทฐ๋ผ๋Š” ์ฐฝ์„ ํ†ตํ•ด์„œ ๋ณผ ๋ฟ์ด๋‹ค.
          ๋ทฐ์— insert ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, update, delete ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ๋ช…๋ น๋ฌธ ์—ญ์‹œ ๋ทฐ์˜ ํ…์ŠคํŠธ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ธฐ๋ณธ ใ…”์ด๋ธ”์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
           
--[6] ๋ทฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 
     1. ๋ณต์žกํ•˜๊ณ  ๊ธด ์ฟผ๋ฆฌ๋ฌธ์„ ๋ทฐ๋กœ ์ •์˜ํ•˜๋ฉด ์ ‘๊ทผ์„ ๋‹จ์ˆœํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
     2. ๋ณด์•ˆ์— ์œ ๋ฆฌํ•˜๋‹ค.
        - ์‚ฌ์šฉ์ž๋งˆ๋‹ค ํŠน์ • ๊ฐ์ฒด๋งŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ
> create view emp_view
   as
   select empno, ename, job, hiredate, deptno
   from emp_copy;
  
--[7] ๋ทฐ์˜ ์ข…๋ฅ˜
    : ๋ทฐ๋Š” ๋ทฐ๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์˜ ์ˆ˜์— ๋”ฐ๋ผ
        - ๋‹จ์ˆœ ๋ทฐ (simple view)
        - ๋ณตํ•ฉ ๋ทฐ (complex view)
       
     : ํŠน์ง•
       - ๋‹จ์ˆœ ๋ทฐ
          + ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”๋กœ ์ƒ์„ฑ
          + ๊ทธ๋ฃน ํ•จ์ˆ˜์˜ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅ
          + distinct ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅ
          + insert/update/delete(DML) ๋“ฑ์˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
         
       - ๋ณตํ•ฉ ๋ทฐ
          + ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ด๋ธ”๋กœ ์ƒ์„ฑ
          + ๊ทธ๋ฃน ํ•จ์ˆ˜์˜ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ
          + distinct ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ
          + DML ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅ
         
----[7-1] ๋‹จ์ˆœ ๋ทฐ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ์กฐ์ž‘
> insert into emp_view30
   values (8010, 'HONG', 30);
  
----[7-2] ๋‹จ์ˆœ ๋ทฐ์˜ ์ปฌ๋Ÿผ์— ๋ณ„์นญ ๋ถ€์—ฌํ•˜๊ธฐ
> create view emp_view_copy( ์‚ฌ์›๋ฒˆํ˜ธ, ์‚ฌ์›๋ช…, ๊ธ‰์—ฌ, ๋ถ€์„œ๋ฒˆํ˜ธ)
   as
   select empno, ename, sal, deptno
   from emp_copy;

----[๋ฌธ์ œ] ๋ถ€์„œ 30๋ฒˆ์— ๊ทผ๋ถ€ํ•˜๋Š” ์‚ฌ์› ์ •๋ณด๋งŒ์„ ์ถœ๋ ฅํ•˜์„ธ์š” (์œ„์— ๋งŒ๋“  ๋ทฐ ํ…Œ์ด๋ธ”์„ ์ด์šฉ)
> select * from emp_view_copy
   where ๋ถ€์„œ๋ฒˆํ˜ธ = 30;                    # ๋ณ„์นญ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค!
           
----[7-3] ๊ทธ๋ฃน ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๋‹จ์ˆœ ๋ทฐ
               : ***์ค‘์š”***
               ๋ทฐ๋ฅผ ์ž‘์„ฑํ• ๋•Œ select์ ˆ ๋‹ค์Œ์— sum์ด๋ผ๋Š” ๊ทธ๋ฃนํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๋ทฐ์˜ ํŠน์ • ์ปฌ๋Ÿผ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋จ,
               ๋”ฐ๋ผ์„œ ๋ฌผ๋ฆฌ์ ์ธ ์ปฌ๋Ÿผ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ€์ƒ ์ปฌ๋Ÿผ์ด๊ธฐ์— ์ปฌ๋Ÿผ๋ช…๋„ ์ƒ์† ๋ฐ›์„ ์ˆ˜ ์—†๋‹ค.
               ๋ทฐ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๊ฐ€์ƒ ์ปฌ๋Ÿผ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ด๋ฆ„(๋ณ„๋ช…)์„ ๋”ฐ๋กœ ์„ค์ •ํ•ด์•ผํ•œ๋‹ค.
                 
> create view view_sal
   as
   select deptno, sum(sal), avg(sal)
   from emp_copy
   group by deptno;
      #[err] ์ด ์‹์€ ์—ด์˜ ๋ณ„๋ช…๊ณผ ํ•จ๊ป˜ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  
> create view view_sal
   as
   select deptno, sum(sal) as "SalSum", avg(sal) "SalAvg"
   from emp_copy
   group by deptno;
  
----[์ฃผ์˜ - ๋‹จ์ˆœ ๋ทฐ์˜ ๊ฒฝ์šฐ DML ๋ช…๋ น์–ด์˜ ์กฐ์ž‘์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ]
     1. ๋ทฐ ์ •์˜์— ํฌํ•จ๋˜์ง€ ์•Š์€ ์ปฌ๋Ÿผ ์ค‘์— ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์ด not null ์ œ์•ฝ ์กฐ๊ฑด์ด ์ง€์ •๋˜์–ด
        ์žˆ๋Š” ๊ฒฝ์šฐ insert ๋ฌธ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
        ์™œ? ๋ทฐ์— ๋Œ€ํ•œ insert๋ฌธ์€ ๊ธฐ๋ณธํ…Œ์ด๋ธ”์— null ๊ฐ’์„ ์ž…๋ ฅํ•˜๋Š” ํ˜•ํƒœ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
        ( ๋ทฐ๋Š” ์ผ๋ถ€ ์ปฌ๋Ÿผ๋งŒ ๋ณด์—ฌ์ฃผ๋‹ˆ๊นŒ ๋‚˜๋จธ์ง€ ํ•ญ๋ชฉ์€ null๋กœ ๋„ฃ์Œ)
     2. sal * 12 ์™€ ๊ฐ™์ด ์‚ฐ์ˆ  ํ‘œํ˜„์‹์œผ๋กœ ์ •์˜๋œ ๊ฐ€์ƒ ์ปฌ๋Ÿผ์ด ๋ทฐ์— ์ •์˜๋˜๋ฉด insert/update๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ
     3. distinct๋ฅผ ํฌํ•จํ•œ ๊ฒฝ์šฐ์—๋„ DML(Data Manipulation language) ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜  ์—†๋‹ค.
     4. ๊ทธ๋ฃน ํ•จ์ˆ˜๋‚˜ group by์ ˆ์„ ํฌํ•จํ•œ ๊ฒฝ์šฐ์—๋„ DML๋ช…๋ น์„ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์—†๋‹ค.

     >select * from view_sal;
     > insert into view_sal
         values (40, 30000, 4000);       #[err] ์•ˆ๋จ
     > create view veiw_sal_year
         as
          select ename, sal * 12
          from emp_copy;                      #[err] ์•ˆ๋งŒ๋“ค์–ด์ง~ ๋Œ€์‹  sal * 12 ์— ๋ณ„๋ช…์„ ๋ถ™์ด๋ฉด ๊ฐ€๋Šฅ!
     > insert into view_sal_year
        value ('ANGEL', 12000);            #[err] ๋ณ„๋ช…์ด ๋ถ™์–ด์žˆ๋Š” ๊ฒฝ์šฐ์—๋„ insert๋Š” ์•ˆ๋จ
       
----[7-4] ๋ณตํ•ฉ ๋ทฐ
> select empno, ename, sal, e.deptno, dname, loc
    from emp e, dept d
     where e.deptno = d.deptno
     order by empno desc;
    
> create view emp_view_dept
   as
   select empno, ename, sal, e.deptno, dname, loc
   from emp e, dept d
   where e.deptno = d.deptno
   order by empno desc;
  
--[8] ๋ทฐ ์‚ญ์ œ
> select view_name, text
   from user_views;

> drop view emp_view;

--[9] ๋ทฐ ์ƒ์„ฑ์— ์‚ฌ์šฉ๋˜๋Š” ๋‹ค์–‘ํ•œ ์˜ต์…˜ (or replace)
    : ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ทฐ์ด๋ฉด ์ƒˆ๋กœ์šด ๋ทฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ธฐ์กด์— ์กด์žฌํ•˜๋Š” ๋ทฐ์ด๋ฉด ๊ทธ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•œ๋‹ค.
> create or replace view emp_view30
   as
   select empno, ename, comm,deptno
   from emp_copy
   where deptno = 30;

--[10] ๋ทฐ ์ƒ์„ฑ์— ์‚ฌ์šฉ๋˜๋Š” ๋‹ค์–‘ํ•œ ์˜ต์…˜ (force / noforce)
     : force - ๊ธฐ๋ณธํ…Œ์ด๋ธ”์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ๋„ ๋ทฐ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ๋˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋Š” ์˜ต์…˜
        noforce - ๊ธฐ๋ณธํ…Œ์ด๋ธ”์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ๋งŒ ๋ทฐ๊ฐ€ ์ƒ์„ฑ(default๋กœ ์„ค์ •๋˜์–ด์žˆ์Œ)

> desc employees;                     #์ด๋Ÿฐ ํ…Œ์ด๋ธ” ๋งŒ๋“ค์–ด ์ค€ ์  ์—†์Œ~
> create or replace view employees_view
   as
   select empno, ename, deptno
   from employees
   where deptno = 30;           #[err] ๊ธฐ๋ณธํ…Œ์ด๋ธ”์ด ์—†์Œ!
  
> create or replace force view employees_view
   as
   select empno, ename, deptno
   from employees
   where deptno = 30;           #์˜ค๋ฅ˜๋Š” ๋ฐœ์ƒํ•˜์ง€๋งŒ ๋ทฐ๋Š” ๋งŒ๋“ค์–ด์ง„๋‹ค!
  
> select view_name, text
   from user_views;                    #๋ทฐ๊ฐ€ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธ
  
--[11] ๋ทฐ ์ƒ์„ฑ์— ์‚ฌ์šฉ๋˜๋Š” ๋‹ค์–‘ํ•œ ์˜ต์…˜ (with check option)
     : ๋ทฐ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์กฐ๊ฑด ์ œ์‹œ์— ์‚ฌ์šฉ๋œ ์ปฌ๋Ÿผ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ ์ œ๊ณต
        ๋ทฐ๋ฅผ ์„ค์ •ํ•  ๋•Œ ์กฐ๊ฑด์œผ๋กœ ์„ค์ •ํ•œ ์ปฌ๋Ÿผ ์ด์™ธ์˜ ๋‹ค๋ฅธ ์ปฌ๋Ÿผ์˜ ๋‚ด์šฉ์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
> create or replace view emp_view30
   as
   select empno, ename, sal, deptno
   from emp_copy
   where deptno = 30;   

> update emp_view30
    set
        deptno = 20
     where sal >= 1200;
    
> select * from emp_view30;    #๋ฐ”๋€ ๋ ˆ์ฝ”๋“œ๋Š” ๋œจ์ง€ ์•Š๋Š”๋‹ค.

> create or replace view view_chk30
   as
   select empno, ename, sal, comm, deptno
   from emp_copy
   where deptno = 30 with check option;

> update view_chk30
    set
        deptno = 20
     where sal >= 900;                       #๊ฒฐ๊ณผ : 0ํ–‰์ด ๊ฐฑ์‹ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    
--[12] ๋ทฐ ์ƒ์„ฑ์— ์‚ฌ์šฉ๋˜๋Š” ๋‹ค์–‘ํ•œ ์˜ต์…˜ (with read only)
     : ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์˜ ์–ด๋–ค ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด์„œ๋„ ๋ทฐ๋ฅผ ํ†ตํ•œ ๋‚ด์šฉ ์ˆ˜์ •์„ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์˜ต์…˜
> update view_chk30
   set
     comm = 1000;
    
> create or replace view view_read30
   as
   select empno, ename, sal, comm, deptno
   from emp_copy
   where deptno = 30 with read only;        #์กฐ๊ฑด ๋’ค์— ๋ถ™์ด์ง€๋งŒ ์ „์ฒด ์ˆ˜์ • ๋ถˆ๊ฐ€!
    
> update view_read30
   set
     comm = 1000;                 #[err] ์ฝ๊ธฐ ์ „์šฉ ๋ทฐ์—์„œ๋Š” DML ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.





13. Top์ฟผ๋ฆฌ

*์˜ค๋ผํด - Top์ฟผ๋ฆฌ
  :Top ์ฟผ๋ฆฌ : ์ƒ์œ„ ๋ช‡ ๊ฐœ์˜ data๋งŒ์„ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ
  ex) ์‚ฌ์› ์ค‘์—์„œ ์ž…์‚ฌ์ผ์ด ๊ฐ€์žฅ ๋น ๋ฅธ ์‚ฌ๋žŒ 5๋ช…(Top-5)๋งŒ์„ ์–ป์–ด์˜ค๋Š” ์งˆ์˜๋ฌธ
  : Top-N์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด rownum & ์ธ๋ผ์ธ๋ทฐ ์‚ฌ์šฉ (oracle์—์„œ๋งŒ ์ œ๊ณต)
 
> select rownum, empno, ename, hiredate
      from emp;
      
> select rownum, empno, ename, hiredate
      from emp
       order by hiredate;
       # rownum์€ insert ํ•˜๋Š” ์ˆœ๊ฐ„ ๋งŒ๋“ค์–ด์ง€๊ณ  ๊ณ ์œ ํ•œ ๊ฐ’์ด๋‹ค.
          (rownum์ด ์ˆœ์ฐจ์ ์œผ๋กœ ๋˜์–ด์žˆ์ง€์•Š์Œ)
 
> create or replace view view_hire
     as
     select empno, ename, hiredate
     from emp
     order by hiredate;
    
> select rownum, empno, ename, hiredate
   from view_hire;
     #rownum์ด ์ˆœ์ฐจ์ ์œผ๋กœ ํ• ๋‹น๋˜์–ด์žˆ๋‹ค. ์™œ๋ƒ๋ฉด ๋ทฐ๋ฅผ ์“ธ๋•Œ ์ƒˆ๋กญ๊ฒŒ
       insertํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์—
        (๊ฒŒ์‹œํŒ ์ž‘์„ฑํ•˜๋ฉด์„œ ์ตœ๊ทผ ๋‚ ์งœ ์ˆœ์œผ๋กœ ์ผ๋ จ๋ฒˆํ˜ธ ๋ฉ”๊ธธ ๋•Œ ๋งŽ์ด ์“ฐ์ธ๋‹ค.)
       
--[1] rownum์„ ์ด์šฉ
> select rownum, empno, ename, hiredate
   from view_hire
   where rownum <= 5;
  
--[2] ์ธ๋ผ์ธ ๋ทฐ๋ฅผ ์ด์šฉ
   :sql๋ฌธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ธŒ ์ฟผ๋ฆฌ์˜ ์ผ์ข…์œผ๋กœ ๋ณดํ†ต from ์ ˆ์— ์œ„์น˜ํ•ด์„œ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ.
> select rownum, empno, ename, hiredate
    from (select empno, ename, hiredate 
               from emp
                 order by hiredate)
     where rownum <= 5;
   





14. ์‚ฌ์šฉ์ž ๊ถŒํ•œ

*์˜ค๋ผํด - ์‚ฌ์šฉ์ž(User) ๊ถŒํ•œ(Role)
--[1] ๊ถŒํ•œ์˜ ์—ญํ• ๊ณผ ์ข…๋ฅ˜
    - ๊ถŒํ•œ : ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ํ…Œ์ด๋ธ”์„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ฑฐ๋‚˜ ํ•ด๋‹น ํ…Œ์ด๋ธ”์— sql(select/ insert/ update/ delete)๋ฌธ์„ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œํ•œ์„ ๋‘๋Š” ๊ฒƒ.
    - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณด์•ˆ์„ ์œ„ํ•œ ๊ถŒํ•œ์€ ์‹œ์Šคํ…œ ๊ถŒํ•œ๊ณผ ๊ฐ์ฒด ๊ถŒํ•œ์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.
    - ์‹œ์Šคํ…œ ๊ถŒํ•œ : ์‚ฌ์šฉ์ž์˜ ์ƒ์„ฑ๊ณผ ์ œ๊ฑฐ, DB ์ ‘๊ทผ ๋ฐ ๊ฐ์ข… ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•   ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ ๋“ฑ DBA์— ๋ถ€์—ฌ๋จ
    - ๊ฐ์ฒด ๊ถŒํ•œ : ๊ฐ์ฒด๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ.

--[2] user01 ๊ณ„์ • ์ƒ์„ฑ
> conn system/manager
> create user user01 identified by tiger;

--[3] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘์† ๊ถŒํ•œ
> grant create session to user01;

> create table emp01(
          empno number(4),
          ename varchar2(10),
          job varchar2(10),
          deptno number(2)
   );          
   #[err] ๊ถŒํ•œ์ด ๋ถˆ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค!
 
--[4] ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๊ถŒํ•œ
> conn system/manager
> grant create table to user01;
> create table emp01(
          empno number(4),
          ename varchar2(10),
          job varchar2(10),
          deptno number(2)
  );
    # insert๋ฅผ ๋ฐ”๋กœ ํ•  ์ˆ˜ ์—†๋‹ค!
 
--[5] ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค ํ™•์ธ
    : ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค(table space)๋Š” ๋””์Šคํฌ ๊ณต๊ฐ„์„ ์†Œ๋น„ํ•˜๋Š” ํ…Œ์ด๋ธ”๊ณผ ๋ทฐ ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ฐ–์˜ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด๋“ค์ด ์ €์žฅ๋˜๋Š” ์žฅ์†Œ.
> alter user user01 quota 2m on users(system : ๋‹ค๋ฅธ๋ฒ„์ „);     #๋ฉ”๋ชจ๋ฆฌ๊ณต๊ฐ„ ํ• ๋‹น
> insert into emp01
   values (7369, 'SMITH', 'CLERK', 20);


--[6] with admin option
    : ์‚ฌ์šฉ์ž์—๊ฒŒ ์‹œ์Šคํ…œ ๊ถŒํ•œ์„ with admin option๊ณผ ํ•จ๊ป˜ ๋ถ€์—ฌํ•˜๋ฉด ๊ทธ ์‚ฌ์šฉ์ž๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์ž๊ฐ€ ์•„๋‹Œ๋ฐ๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ถ€์—ฌ๋ฐ›์€
       ์‹œ์Šคํ…œ ๊ถŒํ•œ์„ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ๋„ ํ•จ๊ป˜ ๋ถ€์—ฌ๋ฐ›๋Š”๋‹ค.
      
> create user user02 identified by tiger;
> grant create session to user02 with admin option;
> create user user03 identified by tiger;
> conn user02/tiger;
> grant create session to user03;               #user02๋กœ user03์—๊ฒŒ ๊ถŒํ•œ ๋ถ€์—ฌ ๊ฐ€๋Šฅ!


--[7] ํ…Œ์ด๋ธ” ๊ฐ์ฒด์— ๋Œ€ํ•œ  select ๊ถŒํ•œ ๋ถ€์—ฌ (scott/emp -> user01)
     1) > conn scott/tiger ๊ณ„์ • ์ ‘์†
     2) > grant select on emp to user01;
     3) > conn user01/tiger;
     4) > select * from emp;               #[err] ํ…Œ์ด๋ธ” ๋˜๋Š” ๋ทฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Šij์Šต๋‹ˆ๋‹ค

--[8] ์Šคํ‚ค๋งˆ(SCHEMA) : ๊ฐ์ฒด๋ฅผ ์†Œ์œ ํ•œ ์‚ฌ์šฉ์ž๋ช…์„ ์˜๋ฏธ
     1) > select * from scott.emp;

--[9] ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ€์—ฌ๋œ ๊ถŒํ•œ ์กฐํšŒ
      .user_tab_privs_made : ํ˜„์žฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ€์—ฌํ•œ ๊ถŒํ•œ ์ •๋ณด๋ฅผ ์•Œ๋ ค์คŒ
      .user_tab_privs_recd : ์ž์‹ ์—๊ฒŒ ๋ถ€์—ฌ๋œ ์‚ฌ์šฉ์ž ๊ถŒํ•œ์„ ์•Œ๊ณ  ์‹ถ์„ ๋•Œ
      
> select * from user_tab_privs_made;
> select * from user_tab_privs_recd;

--[10] ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ์‹œ
> alter user user01 identified by user01;

----[์ฐธ๊ณ ] ํ•œ๋ฒˆ์— ๊ถŒํ•œ ์ฃผ๊ธฐ
> grant create session, create table, create view to user01;

--[11] ๊ฐ์ฒด ๊ถŒํ•œ ์ œ๊ฑฐํ•˜๊ธฐ
> conn scott/tiger
> select * from user_tab_privs_made;
> revoke select on emp from user01;

--[12] with grant option (6๋ฒˆ๊ณผ ๋น„๊ต~)
   : ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐ์ฒด ๊ถŒํ•œ์„ with grant option๊ณผ ํ•จ๊ป˜ ๋ถ€์—ฌํ•˜๋ฉด ์‚ฌ์šฉ์ž๋Š”
     ๊ฐ์ฒด๋ฅผ ์ ‘๊ทผํ•  ๊ถŒํ•œ์„ ๋ถ€์—ฌ ๋ฐ›์œผ๋ฉด์„œ ๊ทธ ๊ถŒํ•œ์„ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ€์—ฌํ• 
     ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ๋„ ํ•จ๊ป˜ ๋ถ€์—ฌ๋ฐ›๋Š”๋‹ค.
> conn scott/tiger
> grant select on scott.emp to user02 with grant option;
> conn user02/tiger                                                  # user02๊ฐ€ user03์—๊ฒŒ scott์˜ ๊ถŒํ•œ ๋ถ€์—ฌํ•จ
> grant select on scott.emp to user03;                       #์—ฌ๊ธฐ์—์„œ๋Š” scott.emp๋ผ๊ณ  ๊ผญ ํ•ด์ค˜์•ผํ•จ~

--[13] ์‚ฌ์šฉ์ž ๊ณ„์ • ์ œ๊ฑฐ
> conn system/manager;
> drop user user03;

--[14] ๋กค(Role)
    : ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ถŒํ•œ์„ ๋ฌถ์–ด ๋†“์€ ๊ฒƒ.
    : ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ–ˆ์œผ๋ฉด ๊ทธ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐ์ข… ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์•ผ๋งŒ ์ƒ์„ฑ๋œ ์‚ฌ์šฉ์ž๊ฐ€
      ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    
     1) connect role
          : ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์† ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด
             ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์‹œ์Šคํ…œ ๊ถŒํ•œ 8๊ฐ€์ง€๋ฅผ ๋ฌถ์–ด ๋†“์€ ๊ถŒํ•œ
          : alter session, create cluster, create database link, create sequence,
             create session, create synonym, create table, create view
   
     2) resource role
          : ์‚ฌ์šฉ์ž ๊ฐ์ฒด (ํ…Œ์ด๋ธ”, ๋ทฐ, ์‹œํ€€์Šค)๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹œ์Šคํ…œ ๊ถŒํ•œ์„ ๋ฌถ์–ด๋†“์€ ๊ฒƒ
          : create cluster, create procedure,
             create sequence, create table, create trigger
         
     3) DBA role       
         : ์‚ฌ์šฉ์ž๋“ค์ด ์†Œ์œ ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์‚ฌ์šฉ์ž๋“ค์ด ์ž‘์„ฑํ•˜๊ณ  ๋ณ€๊ฒฝํ•˜๊ณ 
             ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ชจ๋“  ๊ถŒํ•œ์„ ๊ฐ€์ง (๊ฐ€๊ธ‰์  ๋ถ€์—ฌX)

> conn system/manager
> create user user03 identified by tiger;
> grant connect, resource to user03;

> conn user03/tiger;
> select * from dict
   where table_name like '%ROLE%';





15. ์ธ๋ฑ์Šค

*์˜ค๋ผํด - ์ธ๋ฑ์Šค(Index)
  
   - ์กฐํšŒ๋ฅผ ๋น ๋ฅด๊ฒŒ(๋น ๋ฅธ ๊ฒ€์ƒ‰) ํ•˜๋„๋ก ๋„์™€์คŒ.
   - sql ๋ช…๋ น๋ฌธ์˜ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ ์ปฌ๋Ÿผ์— ์ƒ์„ฑํ•˜๋Š” ์˜ค๋ผํด ๊ฐ์ฒด.
  
   - ์žฅ์ 
     . ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ๋นจ๋ผ์ง„๋‹ค.
     . ์‹œ์Šคํ…œ์— ๊ฑธ๋ฆฌ๋Š” ๋ถ€ํ•˜๋ฅผ ์ค„์—ฌ์„œ ์‹œ์Šคํ…œ ์ „์ฒด์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.
    
     - ๋‹จ์ 
     . ์ธ๋ฑ์Šค๋ฅผ ์œ„ํ•œ ์ถ”๊ฐ€์ ์ธ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค. (๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ํ•„์š”)
     . ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.
     . ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ ์ž‘์—…(DML : insert/ update/ delete)์ด ์ž์ฃผ ์ผ์–ด๋‚  ๊ฒฝ์šฐ,
        ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค.
       
--[1] ์ธ๋ฑ์Šค ์ •๋ณด ์กฐํšŒ
> select index_name, table_name, column_name
    from user_ind_columns
    where table_name in ('EMP', 'DEPT');            #ํ…Œ์ด๋ธ”๋ช…์€ ๋Œ€๋ฌธ์ž๋กœ!
    

--[2] ์กฐํšŒ ์†๋„ ๋น„๊ตํ•˜๊ธฐ
> drop table emp01;
> create table emp01 as select * from emp;
> select index_name, table_name, column_name
    from user_ind_columns
    where table_name in ('EMP', 'EMP01');
     # emp ํ…Œ์ด๋ธ”์—๋Š” empno ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ
     # emp๋ฅผ ์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ ๋ณต์‚ฌํ•œ emp01 ํ…Œ์ด๋ธ”์—๋Š” ์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Œ
     # ->์„œ๋ธŒ์ฟผ๋ฆฌ๋ฌธ์œผ๋กœ ๋ณต์‚ฌํ•œ ํ…Œ์ด๋ธ”์€ ๊ตฌ์กฐ์™€ ๋‚ด์šฉ๋งŒ ๋ณต์‚ฌ๋  ๋ฟ ์ œ์•ฝ์กฐ๊ฑด์€
            ๋ณต์‚ฌ๋˜์ง€ ์•Š๋Š”๋‹ค.
            
            
> insert into emp01
   select * from emp01;   
    # ๊ณ„์† ์ถ”๊ฐ€ํ•ด์„œ ๋ฐ์ดํ„ฐ๋Š˜๋ฆฌ๊ธฐ~ 917504ํ–‰ ์ถ”๊ฐ€๊นŒ์ง€ ใ…‹ใ…‹
    
> insert into emp01(empno, ename)
   values (8000, 'ANGEL');
  
> set timing on                    #์‹œ๊ฐ„์žฌ๊ธฐ   00: 00: 00.18
> select empno, ename
    from emp01
     where ename = 'ANGEL';
    
--[3] ์ธ๋ฑ์Šค ์ƒ์„ฑ
    : ๊ธฐ๋ณธํ‚ค(primary key)๋‚˜ ์œ ์ผํ‚ค(unique key)๊ฐ€ ์•„๋‹Œ ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด์„œ ์ธ๋ฑ์Šค๋ฅผ ์ง€์ •ํ•˜๋ ค๋ฉด
       create index ๋ช…๋ น์–ด ์‚ฌ์šฉ.

> create index idx_emp01_ename
   on emp01(ename);                                                 #์ธ๋ฑ์Šค ์ƒ์„ฑํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆผ
> select index_name, table_name, column_name
    from user_ind_columns
    where table_name in ('EMP', 'EMP01');                #์ธ๋ฑ์Šค ๋งŒ๋“ค์–ด์ง„๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ
    
> select empno, ename
    from emp01
     where ename = 'ANGEL';                                        # 00: 00: 00.03
    
--[4] ์ธ๋ฑ์Šค ์ œ๊ฑฐ
> drop index idx_emp01_ename;

--[5] ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ํŒ๋‹จํ•˜๊ธฐ
   : ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
      + ํ…Œ์ด๋ธ”์— ํ–‰(๋ ˆ์ฝ”๋“œ)์˜ ์ˆ˜๊ฐ€ ๋งŽ์„ ๋•Œ
       + where๋ฌธ์— ํ•ด๋‹น ์ปฌ๋Ÿผ์ด ๋งŽ์ด ์‚ฌ์šฉ๋  ๋•Œ
       + ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์ „์ฒด ๋ฐ์ดํ„ฐ์˜ 2~4% ์ •๋„ ์ผ ๋•Œ
       + join์— ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ปฌ๋Ÿผ์ด๋‚˜ null์„ ํฌํ•จํ•˜๋Š” ์ปฌ๋Ÿผ์ด ๋งŽ์€ ๊ฒฝ์šฐ
      
     : ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
      + ํ…Œ์ด๋ธ”์— ํ–‰(๋ ˆ์ฝ”๋“œ)์˜ ์ˆ˜๊ฐ€ ์ ์„ ๋•Œ
       + where๋ฌธ์— ํ•ด๋‹น ์ปฌ๋Ÿผ์ด ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ๋•Œ
      + ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์ „์ฒด ๋ฐ์ดํ„ฐ์˜ 10~15% ์ด์ƒ ์ผ ๋•Œ
      + ํ…Œ์ด๋ธ”์— DML ์ž‘์—…์ด ๋งŽ์€ ๊ฒฝ์šฐ(์ž…๋ ฅ ์ˆ˜์ • ์‚ญ์ œ ๋“ฑ์ด ์ž์ฃผ ์ผ์–ด๋‚  ๋•Œ)
      
      
--[6] ์ธ๋ฑ์Šค์˜ ๋ฌผ๋ฆฌ์ ์ธ ๊ตฌ์กฐ์™€ ์ธ๋ฑ์Šค์˜ ์žฌ์ƒ์„ฑ
> alter index idx_emp01_ename rebuild;

--[7]  ์ธ๋ฑ์Šค์˜ ์ข…๋ฅ˜
  1. ๊ณ ์œ  ์ธ๋ฑ์Šค(Unique Index)
     : ๊ธฐ๋ณธํ‚ค๋‚˜ ์œ ์ผํ‚ค์ฒ˜๋Ÿผ ์œ ์ผํ•œ ๊ฐ’์„ ๊ฐ–๋Š” ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด์„œ ์ƒ์„ฑํ•˜๋Š” ์ธ๋ฑ์Šค
> create unique index idx_dept01_deptno
   on dept01(deptno);
         
  2. ๋น„๊ณ ์œ  ์ธ๋ฑ์Šค(Nonunique Index)
     : ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๋Š” ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด์„œ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ
> drop table dept01 (cascade constraint);
> create table dept01
   as select * from dept;    
> insert into dept01 values (10, '์ธ์‚ฌ๊ณผ', '์„œ์šธ');
> insert into dept01 values (20, '์ด๋ฌด๊ณผ', '์„œ์šธ');
> insert into dept01 values (30, '๊ฐœ๋ฐœ๋ถ€', '๋Œ€์ „');
    
> create unique index idx_dept01_loc
   on dept01(loc);                                           #[err] ์ค‘๋ณต ํ‚ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  
> create unique index idx_dept01_deptno
   on dept01(deptno);                                        #๊ฐ€๋Šฅ
 
  3. ๋‹จ์ผ ์ธ๋ฑ์Šค(Single Index)
     : ํ•œ ๊ฐœ์˜ ์ปฌ๋Ÿผ์œผ๋กœ ๊ตฌ์„ฑํ•œ ์ธ๋ฑ์Šค.
    
  4. ๊ฒฐํ•ฉ ์ธ๋ฑ์Šค(Composite Index)
     : ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ปฌ๋Ÿผ์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ.
> create index idx_dept01_com
    on dept01(deptno, dname);
    
  5. ํ•จ์ˆ˜ ๊ธฐ๋ฐ˜ ์ธ๋ฑ์Šค(Funtion Based Index)
> create index idx_emp01_annsal
    on emp01(sal *12);
    
> select index_name, column_name
    from user_ind_columns
    where table_name = 'EMP01'
      
       





16. ์ €์žฅํ”„๋กœ์‹œ์ ธ

*์˜ค๋ผํด - ์ €์žฅํ”„๋กœ์‹œ์ €(procedure)
   -๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฌธ(insert/ update/ delete)๋“ค์„ ํ•„์š”ํ•  ๋•Œ ๋งˆ๋‹ค ๋‹ค์‹œ ์ž…๋ ฅํ•  ํ•„์š”์—†์ด ๊ฐ„๋‹จํ•˜๊ฒŒ ํ˜ธ์ถœ๋งŒ ํ•ด์„œ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฌธ์˜ ์‹คํ–‰๊ฒฐ๊ณผ๋ฅผ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ์Œ
   - ์„ฑ๋Šฅ๋„ ํ–ฅ์ƒ๋˜๊ณ , ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋„ ํ•ด๊ฒฐ
   - ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณต ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ .
  
> drop table emp01;
> create table emp01
      as
       select * from emp;
      
> ed proc01;              
     #๋ฉ”๋ชจ์žฅ์ด ๋œจ๋ฉด์„œ proc01.sqlํŒŒ์ผ์ด ๋งŒ๋“ค์–ด์ง
     
       create or replace procedure DEL_ALL
          is
          begin
          delete from emp01
          end;
          /
     #sql์ตœ์ดˆ ์ ‘์† ๊ฒฝ๋กœ(C:\Users\user) ์— ํŒŒ์ผ ์žˆ์Œ
    
> @proc01                                   #ํ”„๋กœ์‹œ์ € ์ƒ์„ฑ
> execute del_all                    # ์‹คํ–‰
> show error;

--[1] ์ €์žฅ ํ”„๋กœ์‹œ์ € ์กฐํšŒํ•˜๊ธฐ
> desc user_source;
> select name, text
   from user_source

--[2] ์ €์žฅ ํ”„๋กœ์‹œ์ €์˜ ๋งค๊ฐœ๋ณ€์ˆ˜
> ed proc02

  create or replace procedure del_name(vename emp01.ename%type)
  is
  begin
  delete from emp01 where ename = vename;
  end;
  /

> @proc02
> execute del_ename('SMITH');

--[3] IN, OUT, INOUT ๋งค๊ฐœ๋ณ€์ˆ˜
> ed proc03

create or replace procedure sel_empno
(  vempno in emp.empno%type,
     vename out emp.ename%type,
     vsal out emp.sal%type,
     vjob out emp.job%type
)
is
begin

select ename, sal, job
into vename, vsal, vjob
from emp where empno = vempno;

end;
/

> @proc03
> variable var_ename varchar2(15);                    # ๋ฐ˜ํ™˜๋ฐ›์•„์˜จ ๊ฐ’๋“ค์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜
> variable var_sal varchar2(15);
> variable var_job varchar2(15);
> execute sel_empno(7788, :var_ename, :var_sal, :var_job);
> print var_ename;
> print var_sal;
> print var_job;





๋ฌธ์ œ๋“ค

[๋ฌธ์ œ1] 10๋ฒˆ ๋ถ€์„œ ์†Œ์†์˜ ์‚ฌ์› ์ค‘์—์„œ ์ปค๋ฏธ์…˜์„ ๋ฐ›๋Š” ์‚ฌ์›์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด๋ณด์‹œ์˜ค. ?
SQL > select count(*)
        from emp
        where nvl(comm, 0) > 0
        and deptno = 10;

SQL > select count(*)
        from emp
        where nvl(comm, 0) <> 0
        and deptno = 10;

[๋ฌธ์ œ1-1] 30๋ฒˆ ๋ถ€์„œ ์†Œ์†์˜ ์‚ฌ์› ์ค‘์—์„œ ์ปค๋ฏธ์…˜์„ ๋ฐ›๋Š” ์‚ฌ์›์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด๋ณด์‹œ์˜ค. ?


[๋ฌธ์ œ2] ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ž…์‚ฌํ•œ ์‚ฌ์›์˜ ์ž…์‚ฌ์ผ๊ณผ ์ž…์‚ฌํ•œ ์ง€ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ์‚ฌ์›์˜ ์ž…์‚ฌ์ผ์„ ์ถœ๋ ฅํ•˜๋Š”
         ์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ•ด ๋ณด์„ธ์š”.
SQL > select min(hiredate), max(hiredate)
        from emp;
SQL > select min(hiredate) "Old", max(hiredate) "New"
        from emp;
         //๋ณ„์นญ ๋ถ™์ด๊ธฐ. ํฐ๋”ฐ์˜ดํ‘œ๋ฅผ ๋ถ™์ด๋ฉด ์ž…๋ ฅ๋‚ด์šฉ ๊ทธ๋Œ€๋กœ. ํฐ๋”ฐ์˜ดํ‘œ ์—†์œผ๋ฉด ๊ฒฐ๊ณผ๋Š” ๋Œ€๋ฌธ์ž๋กœ ์ถœ๋ ฅ.

[๋ฌธ์ œ3] SCOTT๊ณผ ๋™์ผํ•œ ๊ทผ๋ฌด์ง€์—์„œ ๊ทผ๋ฌดํ•˜๋Š” ์‚ฌ์›์˜ ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜์„ธ์š”.
SQL > select ename
        from emp
        where deptno = (
                             select deptno
                             from emp
                             where ename='SCOTT'
                              );

[๋ฌธ์ œ4] ์ง๊ธ‰์ด 'SALESMAN'์ธ ์‚ฌ์›์ด ๋ฐ›๋Š” ๊ธ‰์—ฌ๋“ค์˜ ์ตœ์†Œ ๊ธ‰์—ฌ๋ณด๋‹ค ๋งŽ์ด ๋ฐ›๋Š” ์‚ฌ์›๋“ค์˜
         ์ด๋ฆ„๊ณผ ๊ธ‰์—ฌ๋ฅผ ์ถœ๋ ฅํ•˜๋˜ ๋ถ€์„œ ๋ฒˆํ˜ธ๊ฐ€ 20๋ฒˆ์ธ ์‚ฌ์›์€ ์ œ์™ธํ•˜์„ธ์š”. (๋‹ค์ค‘ํ–‰ ์—ฐ์‚ฐ์ž ์ด์šฉ)
SQL > select ename, sal, deptno
        from emp
        where sal > any(
                            select sal
                            from emp
                            where job = 'SALESMAN'
                           )
                      and deptno <> 20 ;

-๋‹จ์ผํ–‰์„œ๋ธŒ์ฟผ๋ฆฌ ์ด์šฉ
select ename, sal, deptno
        from emp
        where sal > (
                         select min(sal)
                         from emp
                         where job = 'SALESMAN'
                          )
                      and deptno <> 20 ;

[๋ฌธ์ œ5] ์ง๊ธ‰์ด 'SALESMAN'์ธ ์‚ฌ์›์ด ๋ฐ›๋Š” ๊ธ‰์—ฌ๋“ค์˜ ์ตœ๋Œ€ ๊ธ‰์—ฌ๋ณด๋‹ค ๋งŽ์ด ๋ฐ›๋Š” ์‚ฌ์›๋“ค์˜
         ์ด๋ฆ„๊ณผ ๊ธ‰์—ฌ๋ฅผ ์ถœ๋ ฅํ•˜๋˜ ๋ถ€์„œ๋ฒˆํ˜ธ๊ฐ€ 10๋ฒˆ์ธ ์‚ฌ์›์€ ์ œ์™ธํ•˜์„ธ์š”. (๋‹ค์ค‘ํ–‰ ์—ฐ์‚ฐ์ž ์ด์šฉ)
SQL >  select ename, sal
         from emp
         where sal > all (
                            select sal
                            from emp
                            where job = 'SALESMAN'
                            )
                           and deptno <> 10 ;

[๋ฌธ์ œ6] ์‚ฌ์›ํ…Œ์ด๋ธ”(emp)๊ณผ ๋ถ€์„œ ํ…Œ์ด๋ธ”(dept)์„ joinํ•˜์—ฌ ์‚ฌ์› ์ด๋ฆ„, ๋ถ€์„œ๋ฒˆํ˜ธ, ๋ถ€์„œ๋ช…์„ ์ถœ๋ ฅํ•˜์„ธ์š”.
         ๋‹จ, 40๋ฒˆ ๋ถ€์„œ์˜ ๋ถ€์„œ ์ด๋ฆ„๋„ ์ถœ๋ ฅ๋˜๋„๋ก ์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ•˜์„ธ์š”. ????????????
SQL > select emp.ename, dept.deptno, dept.dname
        from emp, dept
        where emp.deptno(+) = dept.deptno ;

//Ansiํ‘œ์ค€ ? ??????????????????????????
select ename, emp.deptno, dname
from emp full outer join dept
on emp.deptno = dept.deptno;


[๋ฌธ์ œ7] ๋‰ด์š•์—์„œ ๊ทผ๋ฌดํ•˜๋Š” ์‚ฌ์›์˜ ์ด๋ฆ„๊ณผ ๊ธ‰์—ฌ๋ฅผ ์ถœ๋ ฅํ•˜์„ธ์š”. (join ์ด์šฉ)
//์˜ค๋ผํด ์ดˆ๊ธฐ ์ž…๋ ฅ๋ฐฉ๋ฒ•?
SQL > select ename, sal
        from emp, dept
        where emp.deptno = dept.deptno
        and dept.loc = 'NEW YORK';

//ANSI ํ‘œ์ค€
SQL > select ename, sal
         from emp inner join dept
         on emp.deptno = dept.deptno
         where dept.loc = 'NEW YORK' ;


[๋ฌธ์ œ1] ๊ธฐ๋ณธํ…Œ์ด๋ธ”์€ EMP_COPY๋กœ ํ•ฉ๋‹ˆ๋‹ค. 20๋ฒˆ ๋ถ€์„œ์— ์†Œ์†๋œ ์‚ฌ์›๋“ค์˜ ์‚ฌ๋ฒˆ๊ณผ ์ด๋ฆ„, ๋ถ€์„œ๋ฒˆํ˜ธ์™€ ์ƒ๊ด€์˜ ์‚ฌ๋ฒˆ์„
       ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ select๋ฌธ์„ emp_view20์ด๋ผ๋Š” ์ด๋ฆ„์˜ ๋ทฐ๋กœ ์ •์˜ํ•ด ๋ณด์„ธ์š”.
       
        create or replace view emp_view20
        as
        select empno, ename, deptno, mgr
        from emp_copy;
       
        select * from emp_view20;

[๋ฌธ์ œ2] ๊ฐ ๋ถ€์„œ๋ณ„ ์ตœ๋Œ€ ๊ธ‰์—ฌ์™€ ์ตœ์†Œ ๊ธ‰์—ฌ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ทฐ๋ฅผ sal_view ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ž‘์„ฑํ•˜์„ธ์š”.
 
        create or replace view sal_view
        as
        select max(sal) "์ตœ๋Œ€ ๊ธ‰์—ฌ", min(sal) "์ตœ์†Œ ๊ธ‰์—ฌ", deptno
        from emp_copy
        group by deptno;
 
        select * from sal_view;
       
       
[๋ฌธ์ œ3] ์ธ๋ผ์ธ๋ทฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ธ‰์—ฌ๋ฅผ ๋งŽ์ด ๋ฐ›๋Š” ์ˆœ์„œ๋Œ€๋กœ 3๋ช…๋งŒ ์ถœ๋ ฅํ•˜๋Š” ๋ทฐ(sal_top3_view)๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”.
         
          select rownum, empno, ename, sal
          from (select rownum, empno, ename, sal
                   from emp_copy
                    order by nvl(sal, 0) desc)
          where rownum <= 3;
         
          ---------------------------------------------------
         
          create or replace view sal_top3_view
          as
          select rownum as "์ˆœ์œ„", empno, ename, sal
          from (select empno, ename, sal
                   from emp_copy
                    where sal is not null
                    order by sal desc
                  )
          where rownum <=3;
         
         
[๋ฌธ์ œ4] acorn/tiger ๊ณ„์ •์„ ์ƒ์„ฑํ•ด์„œ ์ˆœ๋ฒˆ/์‚ฌ์›๋ฒˆํ˜ธ/์ด๋ฆ„/์ง์—…/๊ทผ๋ฌด๋ถ€์„œ(์ปฌ๋Ÿผ)์˜ ํ•ญ๋ชฉ์„ ๊ฐ–๋Š” ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ
       ์ €์žฅํ•˜๋˜ ์ˆœ๋ฒˆ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ์€ sequence๋ฅผ ์ด์šฉํ•˜์—ฌ ์ €์žฅํ•˜๊ณ , view_acorn ๋ทฐ๋ฅผ ์ƒ์„ฑํ•ด์„œ ์ˆœ๋ฒˆ/์‚ฌ์›๋ฒˆํ˜ธ/์ด๋ฆ„๋งŒ
       ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด๋ณด์„ธ์š”.
       
        conn system/manager;
        create user acorn identified by tiger;
        grant connect, resource to acorn;
        grant create view to acorn;
       
        conn acorn/tiger;
       
        create table acorn_emp(
               num number(2),
               empno number(4),
               ename varchar2(20),
               job varchar2(20),
               deptno number(2)
        );
       
        create sequence acorn_seq
        start with 1 increment by 1;
                 
          insert into acorn_emp
          values (acorn_seq.nextval, 1111, 'SMITH', 'MANAGER', 10);
         
          insert into acorn_emp
          values (acorn_seq.nextval, 2222, 'JONES', 'SALESMAN', 20);
         
          insert into acorn_emp
          values (acorn_seq.nextval, 3333, 'TOM', 'PRESIDENT', 30);
         
          create or replace view view_acorn
         as
         select num, empno, ename
         from acorn_emp;
         
          select * from view_acorn;
         
         
         
         
          ----------------------------------
         
         
          conn system/manger;
          create user acorn identified by tiger;
          grant create session, create table, create sequence, create view to acron;
          alter user acorn quota 2m on users;
          conn acorn/tiger;
         
          create table emp01 (
               no number(2) primary key,
               empno number(4) not null,
               ename varchar2(10) not null,
               job varchar2(10),
               deptno number(2)
          );
         
          create sequence emp01_seq
          start with 1 increment by 1;
         
          insert into emp01
          values (emp01_seq.nextval, 7000, 'SMITH', 'SALES', 20);
         
          insert into acorn_emp
          values (acorn_seq.nextval, 2222, 'JONES', 'SALESMAN', 20);
         
          create or replace view view_acorn
         as
         select no, empno, ename
         from acorn_emp;





๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋™์ผ์กฐ๊ฑด (์ƒˆ์ฐฝ์—ด๋ฆผ)

'โœ๏ธ ์ด๋ก  > ๋„คํŠธ์›Œํฌ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/์ฟผ๋ฆฌ๋ฌธ ์—ฐ์Šต] SUM, MAX, MIN  (0) 2019.12.01
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/์ฟผ๋ฆฌ๋ฌธ ์—ฐ์Šต] SELECT  (0) 2019.12.01
[๋งํฌ] HTTP ์„œ๋ฒ„ ์‘๋‹ต ์ฝ”๋“œ (Response Code) ์ •๋ฆฌ_1  (0) 2019.11.22
[Mysql/๊ฐ•์ขŒ] SQL Full Tutorial Course using MySQL Database  (0) 2019.11.21
[๋งํฌ/์นดํŽ˜24/์›๊ฒฉ๋ฐ์Šคํฌํ†ฑ์—ฐ๊ฒฐ] ์œˆ๋„์šฐ ์„œ๋ฒ„ ์ ‘์†ํ•˜๊ธฐ ๊ฐ€์ด๋“œ  (0) 2019.11.21
    'โœ๏ธ ์ด๋ก /๋„คํŠธ์›Œํฌ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/์ฟผ๋ฆฌ๋ฌธ ์—ฐ์Šต] SELECT
    • [๋งํฌ] HTTP ์„œ๋ฒ„ ์‘๋‹ต ์ฝ”๋“œ (Response Code) ์ •๋ฆฌ_1
    • [Mysql/๊ฐ•์ขŒ] SQL Full Tutorial Course using MySQL Database
    • [๋งํฌ/์นดํŽ˜24/์›๊ฒฉ๋ฐ์Šคํฌํ†ฑ์—ฐ๊ฒฐ] ์œˆ๋„์šฐ ์„œ๋ฒ„ ์ ‘์†ํ•˜๊ธฐ ๊ฐ€์ด๋“œ
    Dev.Beth
    Dev.Beth
    Beth์˜ ๊ณต๋ถ€ ๋ธ”๋กœ๊ทธ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”