[Day11] Oracle11 [10/12]
--1. truncate / delete / drop ๋ํด์ ์ค๋ช
ํ์ธ์
-- DDL : CREATE, ALTER , [ DROP ]
-- DML : INSERT, UPDATE, [DELETE], [TRUNCATE], RENAME + ์ปค๋ฐ, ๋กค๋ฐฑ
์ญ์ ์ญ์ + ์๋ ์ปค๋ฐ.
--2. insert ๋ฌธ ์ํ ์ค ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ฉด ์ด์ ์ ๋ํด ์ค๋ช
ํ์ธ์
-- ใฑ. 00947. 00000 - "not enough values"
INSERT INTO emp ( empno, ename, hiredate ) VALUES ( 2222, 'aaa');
-- ใด. ORA-00001: unique constraint (SCOTT.SYS_C007770) violated
SYS_????? ์ ์ฝ์กฐ๊ฑด ์ด๋ฆ ์๋ ๋ถ์ฌ
PK_ํ
์ด๋ธ๋ช
_์ปฌ๋ผ๋ช
PK_EMP_EMPNO
UK ์ ์ผ์ฑ ์ ์ฝ์กฐ๊ฑด, ์ค๋ณต X
empno 7369 SMITH
INSERT empno VALUES ( 7369 ) PK ์ ์ฝ์กฐ๊ฑด ์๋ฐฐ = UK + NN
๊ฐ์ฒด ๋ฌด๊ฒฐ์ฑ..
-- ใท. ORA-02291: integrity constraint (SCOTT.FK_DEPTNO) violated - parent key not found
-- ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด ์๋ฐฐ : FK_DEPTNO ํฌ๋ฆฐํค==์ฐธ์กฐํค== ์ธ๋ํค
dept ํ
์ด๋ธ์ : deptno 10,20,30,40 ๋ถ๋ชจํ
์ด๋ธ( parent )
๊ด๊ณ: RDBMS ์์๊ด๊ณ dept.deptno(PK) -> emp.deptno(FK)
INSERT emp ํ
์ด๋ธ์์ : deptno(FK) 50 ์์ํ
์ด๋ธ( child )
๊ฐ์ฒด, [์ฐธ์กฐ], ๋๋ฉ์ธ ๋ฌด๊ฒฐ์ฑ
kor NUMBER(3) -999~999 0~100 CHECK ์ ์ฝ์กฐ๊ฑด ์ค์
--3. ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ํ
์ด๋ธ ์์ฑ
-- ใฑ. deptno, dname, empno, ename, sal+nvl(comm,0) pay, grade ์ปฌ๋ผ์ ๊ฐ์ง ์๋ก์ด ํ
์ด๋ธ ์์ฑ
-- ใด. ํ
์ด๋ธ๋ช
: tbl_empdeptgrade
dept : deptno, dname
emp : empno, ename, sal, comm
salgrade : grade
3๊ฐ ํ
์ด๋ธ ์กฐ์ธ
-- ORA-00918: column ambiguously defined
CREATE TABLE tbl_empdeptgrade
AS (
SELECT d.deptno, dname, empno, ename, sal+nvl(comm,0) pay, grade
FROM emp e JOIN dept d ON d.deptno = e.deptno
JOIN salgrade s ON e.sal BETWEEN losal AND hisal
);
--4-1. insa ํ
์ด๋ธ์์ num, name ๊ฐ์ ธ์์ tbl_score ํ
์ด๋ธ ์์ฑ
-- (tbl_score ํ
์ด๋ธ์ด ์์ผ๋ฉด ์ญ์ ํ ์์ํ์ธ์ )
CREATE TABLE tbl_score
AS (
SELECT num, name
FROM insa
);
--4-2. kor, eng, mat, tot, avg , grade, rank ์ปฌ๋ผ ์ถ๊ฐ
ALTER TABLE tbl_score
ADD (
kor NUMBER(3)
,
, grade NVARCHAR2(3) -- CHAR(1 CHAR) 'A'~'F'
, rank NUMBER(3)
);
--4-3. ๊ฐ ํ์๋ค์ kor,eng,mat ์ ์ 0~100 ๋๋คํ๊ฒ ์ฑ์๋ฃ๊ธฐ.
UPDATE tbl_score
SET kor = TRUNC( dbms_random.value(0, 101) )
, eng = TRUNC( dbms_random.value(0, 101) )
, mat = TRUNC( dbms_random.value(0, 101) );
dbms_random.value -> ์ค์ ๊ฐ์ ธ์ด
TRUNC ํตํด์ ์ ์๋ก ๋ง๋ค์ด์ค์ผํจ
--4-4. ์ด์ , ํ๊ท , ๋ฑ๊ธ, ๋ฑ์ ์์ *****
-- ์กฐ๊ฑด)
-- ๋ฑ๊ธ์ ๋ชจ๋ ๊ณผ๋ชฉ์ด 40์ ์ด์์ด๊ณ , ํ๊ท 60 ์ด์์ด๋ฉด "ํฉ๊ฒฉ"
-- ํ๊ท 60 ์ด์์ด๋ผ๋ ํ ๊ณผ๋ชฉ์ด๋ผ 40์ ๋ฏธ๋ง์ด๋ผ๋ฉด "๊ณผ๋ฝ"
-- ๊ทธ์ธ๋ "๋ถํฉ๊ฒฉ" ์ด๋ผ๊ณ ์ ์ฅ.
์ ๋ณด์ฒ๋ฆฌ๊ธฐ๋ฅ์ฌ/๊ธฐ์ฌ ์ค๊ธฐ ๊ณผ๋ฝ 40 ๋ฏธ๋ง, ํ๊ท 60
UPDATE tbl_score a
SET tot = kor+eng+mat
, avg = (kor+eng+mat)/3 -- NUMBER(5,2)
, grade = CASE
WHEN kor>=40 AND eng>=40 AND mat>=40 AND ํ >=60 THEN 'ํฉ๊ฒฉ'
WHEN (kor<40 OR eng<40 OR mat<40) AND ํ >=60 THEN '๊ณผ๋ฝ'
ELSE '๋ถํฉ๊ฒฉ'
END
, rank = ( SELECT COUNT(*)+1 FROM tbl_score b WHERE b.์ด > a.์ด)
--5. emp ํ
์ด๋ธ์ ๊ตฌ์กฐ๋ฅผ ํ์ธํ๊ณ , ์ ์ฝ์กฐ๊ฑด์ ํ์ธํ๊ณ , ์์์ ์ฌ์ ์ ๋ณด๋ฅผ ์ถ๊ฐํ๋ INSERT ๋ฌธ์ ์์ฑํ์ธ์.
-- ใฑ. ๊ตฌ์กฐํ์ธ ์ฟผ๋ฆฌ
DESC emp;
-- ใด. ์ ์ฝ์กฐ๊ฑด ํ์ธ ์ฟผ๋ฆฌ
SELECT *
FROM user_constraints
WHERE table_name = 'EMP'; -- ๋ทฐ(VIEW)
FROM user_users;
FROM user_tables;
-- ใท. INSERT ์ฟผ๋ฆฌ
--
--6-1. emp ํ
์ด๋ธ์ ๊ตฌ์กฐ๋ง ๋ณต์ฌํด์ ์๋ก์ด tbl_emp10, tbl_emp20, tbl_emp30, tbl_emp40 ํ
์ด๋ธ์ ์์ฑํ์ธ์.
CREATE TABLE tbl_emp10 AS ( SELECT * FROM emp WHERE 1 = 0 );
CREATE TABLE tbl_emp20 AS ( SELECT * FROM emp WHERE 1 = 0 );
CREATE TABLE tbl_emp30 AS ( SELECT * FROM emp WHERE 1 = 0 );
CREATE TABLE tbl_emp40 AS ( SELECT * FROM emp WHERE 1 = 0 );
--6-2. emp ํ
์ด๋ธ์ ๊ฐ ๋ถ์์ ํด๋นํ๋ ์ฌ์์ ๋ณด๋ฅผ ์์์ ์์ฑํ ํ
์ด๋ธ์ INSERT ํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ์ธ์.
๋ค์ค INSERT๋ฌธ 4๊ฐ์ง
1. UC I A X
2. C I A
3. P I X
4. C I F
INSERT ALL
WHEN deptno = 10 THEN
INTO tbl_emp10 VALUES ( ์นผ๋ผ๋ช
~ )
WHEN deptno = 20 THEN
INTO tbl_emp20 VALUES ( ์นผ๋ผ๋ช
~ )
WHEN deptno = 30 THEN
INTO tbl_emp30 VALUES ( ์นผ๋ผ๋ช
~ )
ELSE
INTO tbl_emp40 VALUES ( ์นผ๋ผ๋ช
~ )
SELECT * FROM emp;
--7. ์กฐ๊ฑด์ด ์๋ ๋ค์ค INSERT ๋ฌธ์์ INSERT ALL ๊ณผ INSERT FIRST ๋ฌธ์ ๋ํ ์ฐจ์ด์ ์ ์ค๋ช
ํ์ธ์.
INSERT ALL : ๋ชจ๋ WHEN ์กฐ๊ฑด ์คํ
INSERT FIRST : ์ฒซ๋ฒ์งธ ๋ง์กฑํ๋ WHEN๋ง ์คํ
--8. ์ ์ฝ์กฐ๊ฑด( Contratrint )
-- ใฑ. ์ ์ฝ์กฐ๊ฑด์ด๋ ? ํ
์ด๋ธ์ DML ์์
์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์ํ ๊ท์น
-- ๋ฐ์ดํ ๋ฌด๊ฒฐ์ฑ ? ๋ฐ์ดํฐ๊ฐ ํ๊ฐ ๋์ง ์๋ ๊ฐ์ผ๋ก ์ถ๊ฐ,์์ ,์ญ์ ์ ํํ๋ ํน์ฑ.
-- ใด. ์ ์ฝ์กฐ๊ฑด์ ์ค์ ํ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช
ํ์ธ์.
-- ์ปฌ๋ผ๋ ๋ฒจ - IN-LINE
ํ
์ด๋ธ๋ ๋ฒจ - OUT-LINE
-- ใท. ์ ์ฝ์กฐ๊ฑด์ 5๊ฐ์ง ์ข
๋ฅ
-- PK, FK, NN, CK, UK
-- ใ
. ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์ข
๋ฅ ๋ฐ ์ค๋ช
๊ฐ์ฒด,
์ฐธ์กฐ,
๋๋ฉ์ธ ๋ฌด๊ฒฐ์ฑ
* ํ ์ด๋ธ ์ญ์ ์
drop table ํ ์ด๋ธ๋ช ;
* ํด์งํต์ ๋ฃ๊ณ ๋น์ฐ๊ธฐ
DROP TABLE ํ
์ด๋ธ๋ช
purge;
purge recyclebin;
* ํด์งํต์ ์๋ ํ
์ด๋ธ ๋ณต์
FLASHBACK TABLE ํ
์ด๋ธ๋ช
TO BEFORE DROP
-- ์ ์ฝ์กฐ๊ฑด[constraint] --
1. ํ
์ด๋ธ์ ์ ์ฝ ์กฐ๊ฑด ํ์ธ : user_constraints ๋ทฐ(view);
SELECT *
FROM user_constraints
WHERE table_name = 'EMP';
2. ์ ์ฝ ์กฐ๊ฑด ?
ใฑ. ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ(integrity constraint )์ ์ํด์ ํ
์ด๋ธ์ ๋ ์ฝ๋(ํ)์ ์ถ๊ฐ, ์์ , ์ญ์ ํ ๋ ์ ์ฉ๋๋ ๊ท์น
ใด. ํ
์ด๋ธ์ ์ญ์ ๋ฐฉ์ง๋ฅผ ์ํด์๋ ์ ์ฝ์กฐ๊ฑด์ ์ฌ์ฉํ๋ค.
ex) DEPT( deptno PK ) -- EMP ( deptno FK )
DELETE FROM dept
WHERE deptno = 30;
-- ORA-02292: integrity constraint (SCOTT.FK_DEPTNO) violated - child record found
ใท. ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ? ๋ฐ์ดํฐ๊ฐ ํ๊ฐ๋์ง ์๋ ๊ฐ์ผ๋ก ์ถ๊ฐ,์์ ,์ญ์ ์ ํํ๋ ํน์ฑ
• 1) ๊ฐ์ฒด ๋ฌด๊ฒฐ์ฑ(Entity Integrity)
INSERT INTO dept VALUES ( 10, 'QC', 'SEOUL');
-- ORA-00001: unique constraint (SCOTT.PK_DEPT) violated
- ๋ฆด๋ ์ด์
(table)์ ์ ์ฅ๋๋ ํํ(tuple == ํ == row == record )์ ์ ์ผ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ์ ์ฝ์กฐ๊ฑด์ด๋ค == PK ๊ณ ์ ํค
• 2) ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ(Relational Integrity)
UPDATE emp
SET deptno = 90 -- deptํ
์ด๋ธ์์๋ 90 ๋ฒ ๋ถ์๊ฐ ์กด์ฌํ์ง ์๊ธฐ๋๋ฌธ์ ์ฐธ์กฐํ ์ ์๋ค.
WHERE empno = 7369;
ORA-02291: integrity constraint (SCOTT.FK_DEPTNO) violated - parent key not found
- ๋ฆด๋ ์ด์
(ํ
์ด๋ธ) ๊ฐ์ ๋ฐ์ดํฐ์ [์ผ๊ด์ฑ]์ ๋ณด์ฅํ๊ธฐ ์ํ ์ ์ฝ์กฐ๊ฑด์ด๋ค
• 3) ๋๋ฉ์ธ ๋ฌด๊ฒฐ์ฑ(domain integrity)
์ปฌ๋ผ(์์ฑ)์ ๊ฐ์ ๋ฐ์ดํฐ ํ์
, ๊ธธ์ด, ๊ธฐ๋ณธ ํค, [์ ์ผ์ฑ], null ํ์ฉ, ํ์ฉ ์ ์ฝ ์กฐ๊ฑด
์) ๊ตญ์ด ์ ์
kor NUMBER(3) NOT NULL DEFAULT 0 ์
๋ ฅ์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ 0 ์ผ๋ก ์
๋ ฅ
ํ์ ์
๋ ฅ ์ฌํญ NOT NULL
-999~999 ์ ์๋ฅผ ์ ์ฅํ ์ ์๋ค. 0<= ์ ์ <=100 ( ๋ฒ์ ์ ํ )
3. ์ ์ฝ์กฐ๊ฑด์ ์ฌ์ฉํ๋ ์ด์ ? DML ํ ๋ ์๋ชป ์กฐ์๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด์...
DML = insert, update, delete
4. ์ ์ฝ ์กฐ๊ฑด์ ์ ์ธ(์ค์ )ํ๋ ๋ฐฉ๋ฒ
ใฑ. CREATE TABLE ํ
์ด๋ธ ์์ฑ
ใด. ALTER TABLE ํ
์ด๋ธ ์์ ..
5. ์ ์ฝ ์กฐ๊ฑด์ ์ข
๋ฅ 5๊ฐ์ง.
ใฑ. PRIMARY KEY ์ ์ฝ์กฐ๊ฑด( ๊ณ ์ ํค PK)
ใด. FOREIGN KEY ์ ์ฝ์กฐ๊ฑด( ์ธ๋ํค, ์ฐธ์กฐํค FK )
ใท. NOT NULL ์ ์ฝ์กฐ๊ฑด (NN)
ใน. UNIQUE ์ ์ฝ์กฐ๊ฑด ( ์ ์ผ์ฑ UK )
ใ
. CHECK ์ ์ฝ์กฐ๊ฑด ( CK )
6. ์ ์ฝ์กฐ๊ฑด์ ์์ฑํ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ
ใฑ. ์ปฌ๋ผ ๋ ๋ฒจ( column level ) == IN-LINE constaint ๋ฐฉ๋ฒ
ใด. ํ
์ด๋ธ ๋ ๋ฒจ( table level ) == OUT-OF-LINE constaint ๋ฐฉ๋ฒ
------------------------------------------------------------------------
-- ๊ฐ ์ฌ์์ ๊ตฌ๋ณํ ์ ์๋ ๊ณ ์ ํ ํค : empno PK ์ค์ == NN+UK
-- ํ ๋ณดํค : empno, [email X] , rrn, [ hp X ], ๋ฑ๋ฑ
-- 0000 14
-- ์ ์ฝ์กฐ๊ฑด : 1๊ฐ( PK ) DML X -> ๋ถ์ฌ(์ค์ )
1) ์ปฌ๋ผ ๋ ๋ฒจ( in-line ๋ฐฉ์)
-- PK, NN, FK, UK, CK
CREATE TABLE tbl_column_level
(
empno number(4) NOT NULL CONSTRAINT PK_TBLCOLUMNLEVEL_EMPNO PRIMARY KEY -- UK + NN
, ename varchar2(20) NOT NULL
-- dept ํ
์ด๋ธ์ deptno(PK) ์ฐธ์กฐํ๋ ์ธ๋ํค( FK )
, deptno number(2) NOT NULL CONSTRAINT FK_TBLCOLUMNLEVEL_DEPTNO REFERENCES dept(deptno)
-- -999~999 X [0~100 ์ ์]
, kor number(3) CONSTRAINT CK_TBLCOLUMNLEVEL_KOR CHECK( kor BETWEEN 0 AND 100 )
-- ์ ์ผํด์ผ๋๋ค.( ์ ์ผ์ฑ )
, email varchar2(250) CONSTRAINT UK_TBLCOLUMNLEVEL_EMAIL UNIQUE
-- ์์ธ, ๋ถ์ฐ, ๋๊ตฌ, ๋์ ๋ชฉ๋ก์์ ํ๋๋ฅผ ์ ํํ ์ ์๋๋ก ์ฒดํฌ ์ ์ฝ ์ค์
, city varchar2(20) CONSTRAINT CK_TBLCOLUMNLEVEL_CITY CHECK( city IN ('์์ธ', '๋ถ์ฐ', '๋๊ตฌ', '๋์ ') )
);
-- Table TBL_COLUMN_LEVEL์ด(๊ฐ) ์์ฑ๋์์ต๋๋ค.
COMMIT;
-- ORA-02291: integrity constraint (SCOTT.FK_TBLCOLUMNLEVEL_DEPTNO) violated - parent key not found
INSERT INTO TBL_COLUMN_LEVEL ( empno, ename, deptno, kor, email, city )
VALUES ( 1111, 'ํ๊ธธ๋', 50, 100, 'hong@sist.com', null );
-- ORA-02290: check constraint (SCOTT.CK_TBLCOLUMNLEVEL_KOR) violated
-- NUMBER(3) -999~999 CHECK( kor between 0 AND 100 )
INSERT INTO TBL_COLUMN_LEVEL ( empno, ename, deptno, kor, email, city )
VALUES ( 1111, 'ํ๊ธธ๋', 40, 101, 'hong@sist.com', null );
INSERT INTO TBL_COLUMN_LEVEL ( empno, ename, deptno, kor, email, city )
VALUES ( 1111, 'ํ๊ธธ๋', 40, 100, 'hong@sist.com', null );
-- 1 ํ ์ด(๊ฐ) ์ฝ์
๋์์ต๋๋ค.
-- ORA-00001: unique constraint (SCOTT.UK_TBLCOLUMNLEVEL_EMAIL) violated
INSERT INTO TBL_COLUMN_LEVEL ( empno, ename, deptno, kor, email, city )
VALUES ( 1112, '๊น๋๋', 40, 44, 'hong@sist.com', null );
-- ORA-02290: check constraint (SCOTT.CK_TBLCOLUMNLEVEL_CITY) violated
-- ์์ธ ๋๊ตฌ ๋์ ๋ถ์ฐ
INSERT INTO TBL_COLUMN_LEVEL ( empno, ename, deptno, kor, email, city )
VALUES ( 1112, '๊น๋๋', 40, 44, 'hong2@sist.com', 'ํฌํญ' );
-- NOT NULL ์ ์ฝ == ํ์์
๋ ฅ.
-- ORA-01400: cannot insert NULL into ("SCOTT"."TBL_COLUMN_LEVEL"."ENAME")
INSERT INTO TBL_COLUMN_LEVEL ( empno, ename, deptno, kor, email, city )
VALUES ( 1112, null, 40, 44, 'hong2@sist.com', '๋์ ' );
SELECT *
FROM tbl_column_level
-- ORA-02290: check constraint (SCOTT.CK_TBLCOLUMNLEVEL_CITY) violated
UPDATE tbl_column_level
SET city = 'ํฌํญ'
WHERE empno = 1111;
2) ํ
์ด๋ธ ๋ ๋ฒจ( out-line ๋ฐฉ์)
-- NOT NULL ์ ์ฝ์กฐ๊ฑด์ ํ
์ด๋ธ ๋ ๋ฒจ ๋ฐฉ์์ผ๋ก ์ค์ ํ ์ ์๋ค.
CREATE TABLE tbl_table_level
(
empno number(4) NOT NULL
, ename varchar2(20) NOT NULL
, deptno number(2)
, kor number(3)
, email varchar2(250)
, city varchar2(20)
-- ์ ์ฝ์กฐ๊ฑด
-- ๋ณตํฉํค์ค์ = ์ปฌ๋ผ๋ ๋ฒจ X, ํ
์ด๋ธ ๋ ๋ฒจ O
, CONSTRAINT PK_TBLCOLUMNLEVEL_EMPNO PRIMARY KEY( empno )
, CONSTRAINT FK_TBLCOLUMNLEVEL_DEPTNO FOREIGN KEY(deptno) REFERENCES dept(deptno)
, CONSTRAINT CK_TBLCOLUMNLEVEL_KOR CHECK( kor BETWEEN 0 AND 100 )
, CONSTRAINT UK_TBLCOLUMNLEVEL_EMAIL UNIQUE( email )
, CONSTRAINT CK_TBLCOLUMNLEVEL_CITY CHECK( city IN ('์์ธ', '๋ถ์ฐ', '๋๊ตฌ', '๋์ ') )
);
-- Table TBL_TABLE_LEVEL์ด(๊ฐ) ์์ฑ๋์์ต๋๋ค.
๋ณตํฉํค
๊ธ์ฌ์ง๊ธ ํ ์ด๋ธ ์์
์ด ํ ์ด๋ธ์์๋ PK๊ฐ ์์
-- ๋ณตํฉํค( ์ง๊ธ์ผ + ์ฌ์๋ฒํธ )
์ฑ๋ฅ ๋จ์ด์ง
UPDATE ๊ธ์ฌ์ง๊ธํ
์ด๋ธ
SET ์ง๊ธ์ก = 3,800,00
WHERE ๋ณตํฉํค
22.08.25 AND 1111
--> ์ญ์ ๊ทํ seq ์ปฌ๋ผ ์ถ๊ฐ
์ง๊ธ์ผ ์ฌ์๋ฒํธ ์ง๊ธ์ก ... ์ํ์คseq(PK)
22.08.25 1111 3,500,000 1
22.08.25 1112 3,500,000 2
22.08.25 1113 3,500,000 3
:
22.09.25 1111 3,500,000
22.09.25 1112 3,500,000
22.09.25 1113 3,500,000
:
22.10.25 1111 3,500,000
22.10.25 1112 3,500,000
22.10.25 1113 3,500,000
-- ์ ์ฝ ์กฐ๊ฑด ํ์ธ
SELECT *
FROM user_constraints
WHERE table_name = 'TBL_TABLE_LEVEL' ;
C : NN, CK
P : PK
U : UK
R : FK
OWNER CONSTRAINT_NAME CONSTRAINT_TYPE
SCOTT SYS_C009056 C // ์๋์ผ๋ก ์ ์ฝ์กฐ๊ฑด๋ช
์ด ๋ถ์ฌ(์ค์ ) SYS_ NN
SCOTT SYS_C009057 C
SCOTT CK_TBLCOLUMNLEVEL_KOR C
SCOTT CK_TBLCOLUMNLEVEL_CITY C
SCOTT PK_TBLCOLUMNLEVEL_EMPNO P
SCOTT UK_TBLCOLUMNLEVEL_EMAIL U
SCOTT FK_TBLCOLUMNLEVEL_DEPTNO R
-- ๋๋ฉ์ธ ๋ฌด๊ฒฐ์ฑ ์๋ฐฐ ( UK, CK )
kor 0~100 111 X
-- ๊ฐ์ฒด ๋ฌด๊ฒฐ์ฑ( PK ์๋ฐฐ )
empno 1111 INSERT O
empno 1111 INSERT X PK
-- ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ ( FK ์๋ฐฐ )
deptno 50 INSERT X dept.deptno ์ฐธ์กฐ( 10,20,30,40)
--์ ์ฝ์กฐ๊ฑด ์ ๊ฑฐ --
-- 1) TBL_TABLE_LEVEL ํ
์ด๋ธ์ PK ์ ์ฝ ์กฐ๊ฑด ์ ๊ฑฐ.
ALTER TABLE TBL_TABLE_LEVEL
DROP PRIMARY KEY;
ALTER TABLE TBL_TABLE_LEVEL
DROP CONSTRAINT PK_TBLCOLUMNLEVEL_EMPNO; -- FK X [CASCADE]X
-- Table TBL_TABLE_LEVEL์ด(๊ฐ) ๋ณ๊ฒฝ๋์์ต๋๋ค.
• ์ ์ฝ์กฐ๊ฑด์ ์์ ํ ์ ์์ผ๋ฉฐ, ๊ธฐ์กด์ constraint๋ฅผ ์ญ์ ํ ์ฌ ์์ฑํ์ฌ์ผ ํ๋ค.
• constraint๋ฅผ ์ญ์ ํ ๋ ค๋ฉด, ์ง์ constraint๋ช
์ ์ฌ์ฉํด์ ์ญ์ ํ๊ฑฐ๋
๋๋
constraint๊ฐ ํฌํจ๋ [ํ
์ด๋ธ์ ์ญ์ ]ํ๋ฉด ๊ทธ ํ
์ด๋ธ์ ์ํ constraint๋ ํจ๊ป ์ญ์ ๋๋ค.
• ๋ฌด๊ฒฐ์ฑ constraint๋ฅผ ์ญ์ ํ ๋, ๊ทธ constraint๋ ๋ ์ด์ ์๋ฒ์ ์ํด์ ์ ์ฉ๋์ง ์๊ธฐ ๋๋ฌธ์
***[data dictionary]***์์ ํ์ธํ ์ ์๋ค.
• primary key๋ ํ
์ด๋ธ๋น ํ๋๋ง ์กด์ฌํ๋ฏ๋ก ,์ญ์ ์ constraint๋ช
์ ์ง์ ํ์ง ์์๋ primary key ์ ์ฝ์กฐ๊ฑด์ด ์ญ์ ๋๋ค.
์)
ALTER TABLE ํ
์ด๋ธ๋ช
DROP PRIMARY KEY;
๋ฐฉ๋ฒ1)
ALTER TABLE ํ
์ด๋ธ๋ช
DROP [CONSTRAINT constraint๋ช
| PRIMARY KEY | UNIQUE(์ปฌ๋ผ๋ช
)]
[CASCADE];
* CASCADE์ต์
์ ์ฐธ์กฐํ๋ FOREIGN KEY๊ฐ ์์ ๋ ์ฌ์ฉํ๋ค.
๋ฐฉ๋ฒ2)
DROP TABLE ํ
์ด๋ธ๋ช
CASCADE CONSTRAINTS;
ํ
์ด๋ธ๊ณผ ๊ทธ ํ
์ด๋ธ์ ์ฐธ์กฐํ๋ foreign key๋ฅผ ๋์์ ์ญ์ ํ ์ ์๋ค.
๋ฐฉ๋ฒ3)
DROP TABLESPACE ํ
์ด๋ธ์คํ์ด์ค๋ช
INCLUDING CONTENTS
CASCADE CONSTRAINTS;
-- 2) ํ
์ด๋ธ ์์ฑ ์๋ฃ ํ ์ ์ฝ์กฐ๊ฑด ์ถ๊ฐ --
๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด์ ๊ธฐ์กด ํ
์ด๋ธ์ ๋ํด์๋ ์ถ๊ฐ๋ก ์์ฑํ ์ ์๋ค
. ALTER TABLE ... ADD CONSTRAINT ๋ฌธ์ ๊ธฐ์กด ํ
์ด๋ธ์ ์ ์ฝ์กฐ๊ฑด์ ์ถ๊ฐํ๊ธฐ ์ํ ๋ช
๋ น๋ฌธ์ด๋ค.
ํ์ง๋ง, NOT NULL ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด์ ์ถ๊ฐ๋ 'NULL ํ์ฉ' ์ํ๋ฅผ 'NULL ์
๋ ฅ๋ถ๊ฐ' ์ํ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ ์๋ฏธํ๋ฏ๋ก
ALTER TABLE ... MODIFY ๋ฌธ์ ์ฌ์ฉํด์ผ ํ๋ค.
ใํ์ใ
ALTER TABLE ํ
์ด๋ธ๋ช
ADD [CONSTRAINT ์ ์ฝ์กฐ๊ฑด๋ช
] ์ ์ฝ์กฐ๊ฑดํ์
(์ปฌ๋ผ๋ช
);
-- ๋ฌธ์ ) ๋ชจ๋ ์ ์ฝ์กฐ๊ฑด ์ญ์ ์ฟผ๋ฆฌ ์์ฑ
SCOTT SYS_C009056 NN
SCOTT SYS_C009057 NN
SCOTT CK_TBLCOLUMNLEVEL_KOR
SCOTT CK_TBLCOLUMNLEVEL_CITY
SCOTT UK_TBLCOLUMNLEVEL_EMAIL
SCOTT FK_TBLCOLUMNLEVEL_DEPTNO
ALTER TABLE tbl_table_level
DROP CONSTRAINT CK_TBLCOLUMNLEVEL_KOR;
ALTER TABLE tbl_table_level
DROP CONSTRAINT CK_TBLCOLUMNLEVEL_CITY;
ALTER TABLE tbl_table_level
DROP CONSTRAINT UK_TBLCOLUMNLEVEL_EMAIL;
ALTER TABLE tbl_table_level
DROP CONSTRAINT FK_TBLCOLUMNLEVEL_DEPTNO;
ALTER TABLE tbl_table_level
DROP CONSTRAINT SYS_C009056; -- NN
ALTER TABLE tbl_table_level
DROP CONSTRAINT SYS_C009057; -- NN
-- ๊ณ ๋ ค~
ALTER TABLE TBL_TABLE_LEVEL
MODIFY empno NULL;
ALTER TABLE TBL_TABLE_LEVEL
MODIFY ename NULL;
-- ๋ฌธ์ ) ๋ชจ๋ ์ ์ฝ ์กฐ๊ฑด ๋ค์ ์ถ๊ฐํด ์ฃผ์ธ์.
--SCOTT SYS_C009056 C ์๋์ผ๋ก ์ ์ฝ์กฐ๊ฑด๋ช
์ด ๋ถ์ฌ(์ค์ ) SYS_ NN
ALTER TABLE TBL_TABLE_LEVEL
ADD CHECK( empno IS NOT NULL );
--SCOTT SYS_C009057 C
ALTER TABLE TBL_TABLE_LEVEL
MODIFY ename NOT NULL;
--SCOTT CK_TBLCOLUMNLEVEL_KOR C
ALTER TABLE TBL_TABLE_LEVEL
ADD CONSTRAINT CK_TBLTABLELEVEL_KOR CHECK( kor BETWEEN 0 AND 100 );
--SCOTT CK_TBLCOLUMNLEVEL_CITY C
ALTER TABLE TBL_TABLE_LEVEL
ADD CONSTRAINT CK_TBLTABLELEVEL_CITY CHECK( city IN ('์์ธ', '๋ถ์ฐ', '๋๊ตฌ', '๋์ ') );
--SCOTT PK_TBLCOLUMNLEVEL_EMPNO P
ALTER TABLE TBL_TABLE_LEVEL
ADD CONSTRAINT PK_TBLTABLELEVEL_EMPNO PRIMARY KEY( empno );
--SCOTT UK_TBLCOLUMNLEVEL_EMAIL U
ALTER TABLE TBL_TABLE_LEVEL
ADD CONSTRAINT UK_TBLTABLELEVEL_EMAIL UNIQUE( email );
--SCOTT FK_TBLCOLUMNLEVEL_DEPTNO R
ALTER TABLE TBL_TABLE_LEVEL
ADD CONSTRAINT FK_TBLTABLELEVEL_DEPTNO FOREIGN KEY(deptno) REFERENCES dept(deptno);
-- ์ ์ฝ์กฐ๊ฑด ๋นํ์ฑํ/ํ์ฑํ
ALTER TABLE ํ
์ด๋ธ๋ช
ENABLE | DISABLE CONSTRAINT ์ ์ฝ์กฐ๊ฑด๋ช
-- *** FK ์ค์ ํ์. --
1) ใ์ปฌ๋ผ๋ ๋ฒจ์ ํ์ใ
์ปฌ๋ผ๋ช
๋ฐ์ดํฐํ์
CONSTRAINT constraint๋ช
REFERENCES ์ฐธ์กฐํ
์ด๋ธ๋ช
(์ฐธ์กฐ์ปฌ๋ผ๋ช
)
[ON DELETE CASCADE | ON DELETE SET NULL]
deptno NUMBER(2) CONSTRAINT FK_TBLCOLUMNLEVEL_DEPTNO
REFERENCES dept(deptno) [ON DELETE CASCADE | ON DELETE SET NULL];
2) ใํ
์ด๋ธ๋ ๋ฒจ์ ํ์ใ
์ปฌ๋ผ๋ช
๋ฐ์ดํฐํ์
,
์ปฌ๋ผ๋ช
๋ฐ์ดํฐํ์
,
...
CONSTRAINT constraint๋ช
FOREIGN KEY(์ปฌ๋ผ)
REFERENCES ์ฐธ์กฐํ
์ด๋ธ๋ช
(์ฐธ์กฐ์ปฌ๋ผ๋ช
)
[ON DELETE CASCADE | ON DELETE SET NULL]
, deptno NUMBER(2)
, CONSTRAINT FK_TBLCOLUMNLEVEL_DEPTNO FOREIGN KEY(depnto)
REFERENCES dept (deptno ) [ON DELETE CASCADE | ON DELETE SET NULL];
์ต์
1) ON DELETE CASCADE : ๋ถ๋ชจํ์ด ์ญ์ ๋ ๋ ์ฐธ์กฐํ๋ ์์ํ๋ ๊ฐ์ ๋ก ์ญ์ .
์ต์
2) ON DELETE SET NULL : " " ํ์ FK ๊ฐ์ NULL๋ก ์ค์ .
์)
ใฑ. emp -> tbl_emp ์์ฑ
dept -> tbl_dept์์ฑ
DROP TABLE tbl_emp PURGE;
DROP TABLE tbl_dept PURGE;
CREATE TABLE tbl_emp AS ( SELECT * FROM emp );
CREATE TABLE tbl_dept AS ( SELECT * FROM dept );
NN ์ ์ฝ์กฐ๊ฑด ๋ณต์ฌ ๋๊ณ ๊ทธ ์ธ ๋ชจ๋ ์ ์ฝ์กฐ๊ฑด์ ๋ณต์ฌ ๋์ง ์๋๋ค.
ใด. tbl_dept ํ
์ด๋ธ์ PK( deptno ) ์ค์
๊ธฐ์กด ํ
์ด๋ธ์ ์ ์ฝ์กฐ๊ฑด ์ถ๊ฐํ ๋ .
ALTER TABLE tbl_dept
ADD CONSTRAINT PK_TBLDEPT PRIMARY KEY( deptno );
ใท. tbl_emp ํ
์ด๋ธ์ FK( deptno) ์ค์
ALTER TABLE tbl_emp
ADD CONSTRAINT PK_TBLEDP_EMPNO PRIMARY KEY( empno );
ALTER TABLE tbl_emp
ADD CONSTRAINT FK_TBLEDP_DEPTNO FOREIGN KEY( deptno ) REFERENCES tbl_dept( deptno );
ใน. ์ ์ฝ ์กฐ๊ฑด ํ์ธ..
ํ
์คํธ)
-- ORA-02292: integrity constraint (SCOTT.FK_TBLEDP_DEPTNO) violated - child record found
DELETE tbl_dept
WHERE deptno = 10;
ใ
. FK ์ ์ฝ์กฐ๊ฑด ์ญ์ .
ALTER TABLE tbl_emp
DROP CONSTRAINT FK_TBLEDP_DEPTNO;
ใ
. FK ์ ์ฝ์กฐ๊ฑด ์ถ๊ฐ + ON DELETE CASCADE ์ต์
์ถ๊ฐ.
ALTER TABLE tbl_emp
ADD CONSTRAINT FK_TBLEDP_DEPTNO FOREIGN KEY( deptno )
REFERENCES tbl_dept( deptno )
ON DELETE CASCADE;\
ใ
. FK ์ ์ฝ์กฐ๊ฑด ์ถ๊ฐ + ON DELETE SET NULL ์ต์
์ถ๊ฐ.
ALTER TABLE tbl_emp
ADD CONSTRAINT FK_TBLEDP_DEPTNO FOREIGN KEY( deptno )
REFERENCES tbl_dept( deptno )
ON DELETE SET NULL;
-- JOIN( ์กฐ์ธ )
1) ๊ฐ๊ฑฐ๋ ์๋ก ๋ค๋ฅธ [๋ ๊ฐ ์ด์]์ ํ
์ด๋ธ์์ ์ปฌ๋ผ์ ๊ฒ์ํ ๋ ์ฌ์ฉํ๋ค. ์ด๋, where์ ์ [join ์กฐ๊ฑด์ ์์ฑ]ํ์ฌ ํ
์ด๋ธ์ ์ฐ๊ฒฐํ๋ค
2) ์ํ ํ
์ด๋ธ
-- <1> ์ฑ
ํ
์ด๋ธ
CREATE TABLE book(
b_id VARCHAR2(10) NOT NULL PRIMARY KEY -- ์ฑ
ID
,title VARCHAR2(100) NOT NULL -- ์ฑ
์ ๋ชฉ
,c_name VARCHAR2(100) NOT NULL -- c ์ด๋ฆ
-- , price NUMBER(7) NOT NULL
);
-- Table BOOK์ด(๊ฐ) ์์ฑ๋์์ต๋๋ค.
INSERT INTO book (b_id, title, c_name) VALUES ('a-1', '๋ฐ์ดํฐ๋ฒ ์ด์ค', '์์ธ');
INSERT INTO book (b_id, title, c_name) VALUES ('a-2', '๋ฐ์ดํฐ๋ฒ ์ด์ค', '๊ฒฝ๊ธฐ');
INSERT INTO book (b_id, title, c_name) VALUES ('b-1', '์ด์์ฒด์ ', '๋ถ์ฐ');
INSERT INTO book (b_id, title, c_name) VALUES ('b-2', '์ด์์ฒด์ ', '์ธ์ฒ');
INSERT INTO book (b_id, title, c_name) VALUES ('c-1', '์๋', '๊ฒฝ๊ธฐ');
INSERT INTO book (b_id, title, c_name) VALUES ('d-1', '์์
', '๋๊ตฌ');
INSERT INTO book (b_id, title, c_name) VALUES ('e-1', 'ํ์ํฌ์ธํธ', '๋ถ์ฐ');
INSERT INTO book (b_id, title, c_name) VALUES ('f-1', '์์ธ์ค', '์ธ์ฒ');
INSERT INTO book (b_id, title, c_name) VALUES ('f-2', '์์ธ์ค', '์์ธ');
COMMIT;
-- <2> ๋จ๊ฐ ํ
์ด๋ธ
CREATE TABLE danga(
b_id VARCHAR2(10) NOT NULL -- PK , FK
,price NUMBER(7) NOT NULL -- ์ฑ
๊ฐ๊ฒฉ
,CONSTRAINT PK_dangga_id PRIMARY KEY(b_id)
,CONSTRAINT FK_dangga_id FOREIGN KEY (b_id)
REFERENCES book(b_id)
ON DELETE CASCADE
);
-- Table DANGA์ด(๊ฐ) ์์ฑ๋์์ต๋๋ค.
INSERT INTO danga (b_id, price) VALUES ('a-1', 300);
INSERT INTO danga (b_id, price) VALUES ('a-2', 500);
INSERT INTO danga (b_id, price) VALUES ('b-1', 450);
INSERT INTO danga (b_id, price) VALUES ('b-2', 440);
INSERT INTO danga (b_id, price) VALUES ('c-1', 320);
INSERT INTO danga (b_id, price) VALUES ('d-1', 321);
INSERT INTO danga (b_id, price) VALUES ('e-1', 250);
INSERT INTO danga (b_id, price) VALUES ('f-1', 510);
INSERT INTO danga (b_id, price) VALUES ('f-2', 400);
COMMIT;
-- ์ ? ์ฑ
์ ๋จ๊ฐ ํ
์ด๋ธ์ด ๋ฐ๋ก ๋ง๋ค์ด์ ธ ์์ ๊น์?
์๋ฐ์ ์ 2000.1.1 ์ดํ 25000
์๋ฐ์ ์ 2002.12.1 2ํ 30000
:
์๋ฐ์ ์ 2022.12.1 10ํ 50000
์ถํ์ฌ -> [ ์์ (๊ณ ๊ฐ) ]-> ๊ณ ๊ฐ(์ผ๋ฐ ์ฌ์ฉ์)
ํ๋งค ํ๋งค
-- <3> ๊ณ ๊ฐ ํ
์ด๋ธ
CREATE TABLE gogaek(
g_id NUMBER(5) NOT NULL PRIMARY KEY
,g_name VARCHAR2(20) NOT NULL
,g_tel VARCHAR2(20)
);
INSERT INTO gogaek (g_id, g_name, g_tel) VALUES (1, '์ฐ๋ฆฌ์์ ', '111-1111');
INSERT INTO gogaek (g_id, g_name, g_tel) VALUES (2, '๋์์์ ', '111-1111');
INSERT INTO gogaek (g_id, g_name, g_tel) VALUES (3, '์ง๊ตฌ์์ ', '333-3333');
INSERT INTO gogaek (g_id, g_name, g_tel) VALUES (4, '์์ธ์์ ', '444-4444');
INSERT INTO gogaek (g_id, g_name, g_tel) VALUES (5, '์๋์์ ', '555-5555');
INSERT INTO gogaek (g_id, g_name, g_tel) VALUES (6, '๊ฐ๋จ์์ ', '666-6666');
INSERT INTO gogaek (g_id, g_name, g_tel) VALUES (7, '๊ฐ๋ถ์์ ', '777-7777');
COMMIT;
-- <4> ํ๋งค ํ
์ด๋ธ
CREATE TABLE panmai(
id NUMBER(5) NOT NULL PRIMARY KEY
,g_id NUMBER(5) NOT NULL CONSTRAINT FK_PANMAI_GID
REFERENCES gogaek(g_id) ON DELETE CASCADE
,b_id VARCHAR2(10) NOT NULL CONSTRAINT FK_PANMAI_BID
REFERENCES book(b_id) ON DELETE CASCADE
,p_date DATE DEFAULT SYSDATE
,p_su NUMBER(5) NOT NULL
);
INSERT INTO panmai (id, g_id, b_id, p_date, p_su) VALUES (1, 1, 'a-1', '2000-10-10', 10);
INSERT INTO panmai (id, g_id, b_id, p_date, p_su) VALUES (2, 2, 'a-1', '2000-03-04', 20);
INSERT INTO panmai (id, g_id, b_id, p_date, p_su) VALUES (3, 1, 'b-1', DEFAULT, 13);
INSERT INTO panmai (id, g_id, b_id, p_date, p_su) VALUES (4, 4, 'c-1', '2000-07-07', 5);
INSERT INTO panmai (id, g_id, b_id, p_date, p_su) VALUES (5, 4, 'd-1', DEFAULT, 31);
INSERT INTO panmai (id, g_id, b_id, p_date, p_su) VALUES (6, 6, 'f-1', DEFAULT, 21);
INSERT INTO panmai (id, g_id, b_id, p_date, p_su) VALUES (7, 7, 'a-1', DEFAULT, 26);
INSERT INTO panmai (id, g_id, b_id, p_date, p_su) VALUES (8, 6, 'a-1', DEFAULT, 17);
INSERT INTO panmai (id, g_id, b_id, p_date, p_su) VALUES (9, 6, 'b-1', DEFAULT, 5);
INSERT INTO panmai (id, g_id, b_id, p_date, p_su) VALUES (10, 7, 'a-2', '2000-10-10', 15);
COMMIT;
-- <5> ์ ์ ํ
์ด๋ธ
CREATE TABLE au_book(
id number(5) NOT NULL PRIMARY KEY
,b_id VARCHAR2(10) NOT NULL CONSTRAINT FK_AUBOOK_BID
REFERENCES book(b_id) ON DELETE CASCADE
,name VARCHAR2(20) NOT NULL
);
INSERT INTO au_book (id, b_id, name) VALUES (1, 'a-1', '์ ํ๊ฐ');
INSERT INTO au_book (id, b_id, name) VALUES (2, 'b-1', '์์ค๊ณต');
INSERT INTO au_book (id, b_id, name) VALUES (3, 'a-1', '์ฌ์ค์ ');
INSERT INTO au_book (id, b_id, name) VALUES (4, 'b-1', '๊น์ ์ ');
INSERT INTO au_book (id, b_id, name) VALUES (5, 'c-1', '์ ๊ด์');
INSERT INTO au_book (id, b_id, name) VALUES (6, 'd-1', '๊นํ๋');
INSERT INTO au_book (id, b_id, name) VALUES (7, 'a-1', '์ฌ์ฌํด');
INSERT INTO au_book (id, b_id, name) VALUES (8, 'd-1', 'ํ์ฒจ');
INSERT INTO au_book (id, b_id, name) VALUES (9, 'e-1', '์ดํ๋');
INSERT INTO au_book (id, b_id, name) VALUES (10, 'f-1', '์ ๋ง์');
INSERT INTO au_book (id, b_id, name) VALUES (11, 'f-2', '์ด์์ ');
COMMIT;
--------------------------------------------------------------------
๋ค์ด์ด๊ทธ๋จ -- ExERD
--------------------------------------------------------------------
3) JOIN ์ข
๋ฅ
1) EQUI JOIN = Natural Join: ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฐ์ดํฐ ์ถ์ถ
ใด ๋ ๊ฐ ์ด์์ ํ
์ด๋ธ์ ๊ด๊ณ๋๋ ์ปฌ๋ผ๋ค์ ๊ฐ๋ค์ด ์ผ์นํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์กฐ์ธ ํํ.
ใด WHERE ์กฐ์ธ ์กฐ๊ฑด์ = ( ์ด์ฝ ) ๋ฑํธ๋ฅผ ์ฌ์ฉํ๋ค.
ใด PK - FK ๊ด๊ณ ์ด์ฉ
ใด USING ์ ์ ์ฌ์ฉํ์ฌ ์ด์ฝ์กฐ์ธ๊ณผ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ถ์ถํ๋ค.
๋ฌธ์ ) ์ฑ
ID(b_id), ์ฑ
์ ๋ชฉ(title), ์ถํ์ฌ(c_name), ๋จ๊ฐ(price) ์ถ๋ ฅ
BOOK : b_id, title, c_name
DANGA : b_id, price
๋ฐฉ๋ฒ1 ) ๊ฐ์ฒด๋ช
ํ๊ธฐํ๋ ๊ฒฝ์ฐ
SELECT book.b_id, title, c_name, price
FROM book, danga
WHERE book.b_id = danga.b_id;
-- ์กฐ์ธ ์กฐ๊ฑด์ = ๋ฑํธ๋ฅผ ์ฌ์ฉํ๋ค. EQUI JOIN ์ด๋ผ๊ณ ํ๋ค.
*** ๋ฐฉ๋ฒ2 ) ๋ณ์นญ( alias) ํ๊ธฐํ๋ ๊ฒฝ์ฐ
SELECT b.b_id, title, c_name, price
FROM book b, danga d
WHERE b.b_id = d.b_id;
*** ๋ฐฉ๋ฒ3 ) JOIN~ ON ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
SELECT b.b_id, title, c_name, price
FROM book b JOIN danga d ON b.b_id = d.b_id;
๋ฐฉ๋ฒ4) USING ์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
SELECT b_id, title, c_name, price
FROM book JOIN danga USING ( b_id ); -- USING ์ ์ ์ฌ์ฉํ ๋๋ ๊ฐ์ฒด๋ช
, ๋ณ์นญ ๋ถ์ด์ง ์๋๋ค.
๋ฐฉ๋ฒ 5) NATURAL JOIN ๊ตฌ๋ฌธ ์ฌ์ฉ
SELECT b_id, title, c_name, price
FROM book NATURAL JOIN danga ; -- ๊ฐ์ฒด๋ช
์ ๋ถ์ด์ง ์๋๋ค.
(๋ฌธ์ ) ์ฑ
์ฝ๋(b_id), ์ฑ
๋ช
(title), ์๋(p_su), ๋จ๊ฐ(price), ์์ ๋ช
(g_name), ํ๋งค๊ธ์ก(p_su*price) ์ถ๋ ฅ
b_id, title : book
b_id, price : danga
b_id, p_su, g_name : panmai
g_name : gogaek
SELECT b.b_id, title, p_su, price , g_name , p_su * price
FROM book b JOIN danga d ON b.b_id = d.b_id
JOIN panmai p ON b.b_id = p.b_id
JOIN gogaek g ON p.g_id = g.g_id;
(๋ฌธ์ ) ์์ ์ฟผ๋ฆฌ๋ฅผ USING ์ ์ฌ์ฉํด์ ์์
SELECT b_id, title, p_su, price , g_name , p_su * price
FROM book JOIN danga USING(b_id)
JOIN panmai USING(b_id)
JOIN gogaek USING(g_id) ;
2) NON-EQUI JOIN
ใด ๊ด๊ณ๋๋ ์ปฌ๋ผ์ด ์ ํํ ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ JOIN์ ํํ์ด๋ค
ใด WHERE ์กฐ์ธ์กฐ๊ฑด์ ์ = X
BETWEEN A AND B ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ค.
(๋ฌธ์ ) empno, ename, sal , grade
emp : empno, ename, sal
salgrade : grade losal <= <= hisal
SELECT empno, ename, sal , grade
FROM emp e JOIN salgrade s ON sal BETWEEN losal AND hisal;
3 + 5 + ์ฐ์ฐ์ : ํญ์ ๊ฐฏ์ -> ์ดํญ์ฐ์ฐ์
๊ธฐ๋ฅ -> ์ฐ์ ์ฐ์ฐ์( ๋ง์
์ฐ์ฐ์ )
3) INNER JOIN
ใด์กฐ์ธ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ"๋ง" ๋ฐํํ๋ ์กฐ์ธ
ํ
์คํธ)
SELECT *
FROM emp;
ใฑ) KING ์ฌ์์ ๋ถ์๋ฒํธ NULL ๋ก ์์
UPDATE emp
SET deptno = null
WHERE empno = 7839; -- KING
ใด) dept, emp ์กฐ์ธํด์ ์ถ๋ ฅ.
SELECT d.deptno, dname, ename, job
FROM dept d INNER JOIN emp e ON d.deptno = e.deptno; -- EQUI JOIN, INNER JOIN
emp : KING ์ฌ์ ์ ๋ณด ๋ณด์ด์ง ์๊ณ . O
dept : 40 ๋ถ์ ์ ๋ณด ๋ณด์ด์ง ์๋๋ค. O
4) OUTER JOIN *****
ใดJOIN ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋ ํ์ ๋ณด๊ธฐ ์ํ ์ถ๊ฐ์ ์ธ join์ ํํ์ด๋ค.
ใด '(+)' ์ฐ์ฐ์๋ฅผ ์ฌ์ฉ
SELECT d.deptno, dname, ename, job
FROM dept d FULL JOIN emp e ON d.deptno = e.deptno;
(๋ฌธ์ ) ์ฑ
ID, ์ฑ
์ ๋ชฉ, ํ๋งค์๋, ๋จ๊ฐ, ์์ ๋ช
(๊ณ ๊ฐ), ํ๋งค๊ธ์ก(ํ๋งค์๋*๋จ๊ฐ) ์ถ๋ ฅ
book : b_id, title
danga : price
gogaek : g_name
panami : p_su
SELECT b.b_id, title, p_su, price, g_name
, p_su * price ํ๋งค๊ธ์ก
FROM book b, danga d, gogaek g, panmai p
WHERE b.b_id=d.b_id AND b.b_id = p.b_id AND p.g_id = g.g_id;
--
SELECT b.b_id, title, p_su, price, g_name
, p_su * price ํ๋งค๊ธ์ก
FROM book b JOIN danga d ON b.b_id=d.b_id
JOIN panmai p ON b.b_id = p.b_id
JOIN gogaek g ON p.g_id = g.g_id
;
(๋ฌธ์ ) ์ถํ๋ ์ฑ
๋ค์ด ๊ฐ๊ฐ ์ด ๋ช๊ถ์ด ํ๋งค๋์๋์ง ์กฐํ
( ์ฑ
ID, ์ฑ
์ ๋ชฉ, ์ดํ๋งค๊ถ์, ๋จ๊ฐ ์ปฌ๋ผ ์ถ๋ ฅ )
book : b_id, title
danga : price
panmai :p_su
SELECT b_id, title , price, SUM( p_su ) ์ดํ๋งค๊ถ์
FROM (
SELECT b.b_id, title, p_su , price
FROM book b JOIN panmai p ON b.b_id = p.b_id
JOIN danga d ON b.b_id = d.b_id
) t
GROUP BY b_id, title, price
(๋ฌธ์ ) ๊ฐ์ฅ ํ๋งค๊ถ์๊ฐ ๋ง์ ๊ฒ ์กฐํ - a-1
TOP-N ๋ฐฉ์
RANK ํจ์ 1/1/1
SELECT t.*, ROWNUM
FROM(
SELECT b_id, title , price, SUM( p_su ) ์ดํ๋งค๊ถ์
FROM (
SELECT b.b_id, title, p_su , price
FROM book b JOIN panmai p ON b.b_id = p.b_id
JOIN danga d ON b.b_id = d.b_id
) t
GROUP BY b_id, title, price
ORDER BY ์ดํ๋งค๊ถ์ DESC
) t
WHErE ROWNUM = 1 ;
-- ORA-00933: SQL command not properly ended
SELECT *
FROM (
SELECT b_id, title , price, SUM( p_su ) ์ดํ๋งค๊ถ์
, RANK() OVER( ORDER BY SUM( p_su ) DESC ) ์์
FROM (
SELECT b.b_id, title, p_su , price
FROM book b JOIN panmai p ON b.b_id = p.b_id
JOIN danga d ON b.b_id = d.b_id
) t
GROUP BY b_id, title, price
) x
WHERE ์์= 1;
-- HAVING ์์ = 1;
WITH
SELECT
FROM
WHERE
GROUP BY
HAVING
1 1 a-1 00/10/10 10
2 2 a-1 00/03/04 20
3 1 b-1 22/10/12 13
4 4 c-1 00/07/07 5
5 4 d-1 22/10/12 31
6 6 f-1 22/10/12 21
7 7 a-1 22/10/12 26
8 6 a-1 22/10/12 17
9 6 b-1 22/10/12 5
10 7 a-2 00/10/10 15
๋ฌธ์ ) book ํ
์ด๋ธ์์ ํ๋งค๊ฐ ๋ ์ ์ด ์๋ ์ฑ
์ ์ ๋ณด ์กฐํ
๋ฌธ์ ) book ํ
์ด๋ธ์์ ํ๋งค๊ฐ ๋ ์ ์ด ์๋ ์ฑ
์ ์ ๋ณด ์กฐํ
( b_id, title, price ์ปฌ๋ผ ์ถ๋ ฅ )
-- ์ด ์ฑ
: 9๊ถ
SELECT COUNT(*)
FROM book;
-- ํ๋งค ํ
์ด๋ธ : 6๊ถ
SELECT DISTINCT b_id
FROM panmai;
a-1
c-1
b-1
d-1
f-1
a-2
--
SELECT b.b_id, title, price
FROM book b JOIN danga d ON b.b_id = d.b_id
WHERE b.b_id IN ( SELECT DISTINCT b_id FROM panmai );
--
SELECT b.b_id, title, price
FROM book b JOIN danga d ON b.b_id = d.b_id
WHERE b.b_id NOT IN ( SELECT DISTINCT b_id FROM panmai );
WITH
a AS (
SELECT b.b_id, title, price
FROM book b JOIN danga d ON b.b_id = d.b_id
)
, b AS (
SELECT DISTINCT b_id FROM panmai
)
SELECT a.b_id, title, price
FROM a JOIN b ON a.b_id = b.b_id; -- EQUI JOIN ( INNER JOIN )
5) SELF JOIN
SELECT a.empno, a.ename, a.mgr , b.ename -- , ์ง์์์ฌename
FROM emp a LEFT JOIN emp b ON a.mgr = b.empno;
[๋ฌธ์ 9] ๊ฐ์ฅ ๋ง์ด ํ๋งค๊ฐ ๋ ์ฑ
์ ์ ๋ณด๋ฅผ ์กฐํ( TOP-1 )
( ์ฑ
ID, ์ ๋ชฉ, ๊ฐ๊ฒฉ, ์ดํ๋งค๋ )
[๋ฌธ์ 10] ๋ง์ด ํ๋งค๊ฐ ๋ ์ฑ
์ ์ ๋ณด๋ฅผ ์กฐํ( TOP-3 )
( ์ฑ
ID, ์ ๋ชฉ, ๊ฐ๊ฒฉ, ์ดํ๋งค๋ )
6) CROSS JOIN
7) ANTI JOIN
8) SEMI JOIN
์ต๊ทผ๋๊ธ