Oracle, SQL Server ๋์ผ
CREATE TABLE PLAYER ( PLAYER_ID CHAR(7) NOT NULL, PLAYER_NAME VHARCHAR2(20) NOT NULL, TEAM_ID CHAR(3) NOT NULL, NICKNAME VHARCHAR2(30), CONSTRAINT PLAYER_PK PRIMARY KEY (PLAYER_ID), CONSTRAINT TEAM_ID FOREIGN KEY (PLAYER) REFERENCES TEAM(TEAM_ID) );
Oracle, SQL Server ๋์ผ ```sql โ PRIMARY KEY ALTER TABLE PLAYER ADD CONSTRAINT PLAYER_PK PRIMARY KEY (PLAYER_ID);
โ FOREIGN KEY ALTER TABLE PLAYER ADD CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID);
# ๐ CREATE TABLE & INDEX
```sql
-- Option 1)
CREATE TABLE EMP (
EMP_NO VARCHAR2(10) PRIMARY KEY,
EMP_NM VARCHAR2(30) NOT NULL,
DEPT_CDODE VARCHAR2(4) DEFAULT '0000' NOT NULL,
JOIN_DATE DATE NOT NULL,
REGIST_DATE DATE NULL
);
CREATE INDEX IDX_EMP_01 ON EMP (JOIN_DATE);
-- Option 2)
CREATE TABLE EMP (
EMP_NO VARCHAR2(10) NOT NULL,
EMP_NM VARCHAR2(30) NOT NULL,
DEPT_CDODE VARCHAR2(4) DEFAULT '0000' NOT NULL,
JOIN_DATE DATE NOT NULL,
REGIST_DATE DATE NULL
);
ALTER TABLE EMP ADD CONSTRAINT EMP_PK PRIMARY KEY (EMP_NO);
CREATE INDEX IDX_EMP_01 ON EMP (JOIN_DATE);
CONSTRAINT (์ ์ฝ์กฐ๊ฑด) ์ด๋ ํ
์ด๋ธ์ ํน์ ์ปฌ๋ผ์ ์ค์ ํ๋ ์ ์ฝ์ผ๋ก, ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๊ธฐ ์ํด์ ์ฌ์ฉ๋๋ค.
PK = UNIQUE + NOT NULLPK ํ
์ด๋ธ ๋น 1๊ฐ๋ง ์์ฑ์ด ๊ฐ๋ฅํ๋ค.RESTRICT Child ํ
์ด๋ธ์ PK ๊ฐ์ด ์๋ ๊ฒฝ์ฐ์๋ง Master ์ญ์ ํ์ฉCASCADE Master ์ญ์ ์ Child ๊ฐ์ด ์ญ์ SET NULL Master ์ญ์ ์ Child ํด๋น ํ๋ NULLSET DEFAULT Master ์ญ์ ์ Child ํด๋น ํ๋ Default ๊ฐ์ผ๋ก ์ค์ NO ACTION ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ ์๋ฐํ๋ ์ญ์ / ์์ action์ ์ทจํ์ง ์์AUTOMATIC Master ํ
์ด๋ธ์ PK๊ฐ ์๋ ๊ฒฝ์ฐ Master PK ์์ฑ ํ Child ์
๋ ฅDEPENDENT Master ํ
์ด๋ธ์ PK๊ฐ ์กด์ฌํ ๋๋ง Child ์
๋ ฅ ํ์ฉSET NULL Maseter ํ
์ด๋ธ์ PK๊ฐ ์๋ ๊ฒฝ์ฐ Child ์ธ๋ถํค๋ฅผ NULL ๊ฐ์ผ๋ก ์ฒ๋ฆฌSET DEFAULT Maseter ํ
์ด๋ธ์ PK๊ฐ ์๋ ๊ฒฝ์ฐ Child ์ธ๋ถํค๋ฅผ Default ๊ฐ์ผ๋ก ์ฒ๋ฆฌNO ACTION ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ ์๋ฐํ๋ ์
๋ ฅ ์ก์
์ ์ทจํ์ง ์์NOT NULL ๋ช
์์ ์ผ๋ก NULL ์
๋ ฅ์ ๋ฐฉ์งํ๋ค.CHECK ์ ์ฝ์ผ๋ก๋ TRUE or FALSE ๋ก ํ๊ฐํ ์ ์๋ ๋
ผ๋ฆฌ์์ ์ง์ ํ๋ค.CHECK ์ ์ฝ์กฐ๊ฑด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ ใ
ฃ์ํ์ฌ ํ
์ด๋ธ์ ํน์ ์ปฌ๋ผ์ ์ค์ ํ๋ ์ ์ฝ์ด๋ค.A-Z a-z 0-9 _ $ # ๋ง ํ์ฉํ๋ค.
EMP_10 (O)100-EMO (X)EMP-100 (X)100_EMP (X)STADIUM ํ ์ด๋ธ์ ์ด๋ฆ์ STADIUM_JSC๋ก ๋ณ๊ฒฝํ๋ SQL์ ์์ฑํ์์ค. (ANSI ํ์ค ๊ธฐ์ค)
Oracle
RENAME STADIUM TO STADIUM_JSC;
SQL Server
sp_rename 'dbo.STADIUM', 'STADIUM_JSC';
Oracle
ALTER TABLE STADIUM RENAME COLUMN STADIUM_ID TO STD_ID;
SQL Server
sp_rename 'dbo.STADIUM.STADIUM_ID', 'STD_ID', 'COLUMN';
| DROP | TRUNCATE | DELETE |
| โโโโ- | โโโโ- | โโโโ- |
| DDL | DDL
(์ผ๋ถ DML ์ฑ๊ฒฉ ๊ฐ์ง) | DML |
| Rollback ๋ถ๊ฐ๋ฅ | Rollback ๋ถ๊ฐ๋ฅ | Commit ์ด์ Rollback ๊ฐ๋ฅ |
| Auto Commit | Auto Commit | ์ฌ์ฉ์ Commit |
| ํ
์ด๋ธ์ด ์ฌ์ฉํ๋ Storage๋ฅผ ๋ชจ๋ release | ํ
์ด๋ธ์ด ์ฌ์ฉํ๋ Storage ์ค ์ต์ด ํ
์ด๋ธ ์์ฑ ์ ํ ๋น๋ Storage๋ง ๋จ๊ธฐ๊ณ release | ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ Deleteํด๋ ์ฌ์ฉํ๋ Storage๋ release๋์ง ์์ |
| ํ
์ด๋ธ์ ์ ์ ์์ฒด๋ฅผ ์์ ํ ์ญ์ ํจ | ํ
์ด๋ธ์ ์ต์ด ์์ฑ๋ ์ด๊ธฐ ์ํ๋ก ๋ง๋ฌ | ๋ฐ์ดํฐ๋ง ์ญ์
์์์ฑ(atomicity) All or Nothing, ํธ๋์ญ์ ์์ ์ ์๋ ์ฐ์ฐ๋ค์ ๋ชจ๋ ์ฑ๊ณต์ ์ผ๋ก ์คํ๋๋์ง, ์๋๋ฉด ์ ํ ์คํ๋์ง ์์ ์ํ๋ก ๋จ์ ์์ด์ผ ํ๋ค.์ผ๊ด์ฑ(consistency) ํธ๋์ญ์
์ด ์คํ๋๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ฉ์ด ์๋ชป ๋์ด ์์ง ์๋ค๋ฉด, ํธ๋์ญ์
์ด ์คํ๋ ์ดํ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ด์ฉ์ ์๋ชป์ด ์์ผ๋ฉด ์ ๋๋ค.๊ณ ๋ฆฝ์ฑ(isolation) ํธ๋์ญ์
์ด ์คํ๋๋ ๋์ค์ ๋ค๋ฅธ ํธ๋์ญ์
์ ์ํฅ์ ๋ฐ์ ์๋ชป๋ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด์๋ ์ ๋๋ค.์ง์์ฑ(durability) ํธ๋์ญ์
์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ๋๋ฉด ๊ทธ ํธ๋์ญ์
์ด ๊ฐฑ์ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ด์ฉ์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ๋๋ค.Dirty Read ๋ค๋ฅธ ํธ๋์ญ์
์ ์ํด ์์ ๋์์ง๋ง ์์ง ์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ฒNon-Repeatable Read ํ ํธ๋์ญ์
๋ด์์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฒ ์ํํ๋๋ฐ, ๊ทธ ์ฌ์ด์ ๋ค๋ฅธ ํธ๋์ญ์
์ด ๊ฐ์ ์์ ๋๋ ์ญ์ ํ๋ ๋ฐ๋์ ๋ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅด๊ฒ ๋ํ๋๋ ํ์์ ๋งํ๋ค.Phantom Read ํ ํธ๋์ญ์
๋ด์์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฒ ์ํํ๋๋ฐ, ์ฒซ ๋ฒ์งธ ์ฟผ๋ฆฌ์ ์๋ ์ ๋ น ๋ ์ฝ๋๊ฐ ๋ ๋ฒ์งธ ์ฟผ๋ฆฌ์์ ๋ํ๋๋ ํ์์ ๋งํ๋ค.ROLLBACK ๊ตฌ๋ฌธ์ COMMIT๋์ง ์์ ์์์ ๋ชจ๋ ํธ๋์ญ์
์ rollackํ๋ค.
SAVEPOINT(์ ์ฅ์ ) ์ ์ ์ํ๋ฉด ๋กค๋ฐฑํ ๋ ํธ๋์ญ์
์ ํฌํจ๋ ์ ์ฒด ์์
์ ๋กค๋ฐฑํ๋ ๊ฒ์ด ์๋๋ผ, ํ ์์ ์์ SAVEPOINT๊น์ง ํธ๋์ญ์
์ ์ผ๋ถ๋ง ๋กค๋ฐฑํ ์ ์๋ค.
Oracle
SAVEPOINT SVPT1;
...
ROLLBACK TO SVPT1
SQL Server
SAVE TRANSACTION SVTR1;
...
ROLLBACK TRANSACTION SVTR1;
๋ฒค๋ ์ ๊ณต ํจ์/
โโโ ๋ด์ฅ ํจ์/
โ โโโ ๋จ์ผํ ํจ์
โ โโโ ๋ค์คํ ํจ์
โโโ ์ฌ์ฉ์ ์ ์ ํจ์
๋จ์ผํ ๊ฐ์ด ์ ๋ ฅ๋๋ ํจ์์ด๋ค.
๋จ์ผํ ํจ์๋
SELECT,WHERE,ORDER BY,UPDATE์ SET์ ์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
๋ฌธ์ํ ํจ์ ex) LOWER, UPPER, SUBSTR, LENGTH, TRIM, โฆ์ซ์ํ ํจ์ ex) ABS, ROUND, CEIL, FLOOR, โฆ๋ ์งํ ํจ์ ex) SYSDATE, TO_NUMBER, TO_CHAR, YAER |
MONTH | DAY, โฆ |
๋ณํํ ํจ์ ex) TO_NUMBER, TO_CHAR, TO_DATE, CAST, CONVERTNULL ๊ด๋ จ ํจ์ ex) NVL / ISNULL, NULLIF, COALESCE์ฌ๋ฌ ํ์ ๊ฐ์ด ์ ๋ ฅ๋๋ ํจ์์ด๋ค.
๋ค์คํ ํจ์๋ ๋จ์ผํ ํจ์์ ๋์ผํ๊ฒ ๋จ์ผ ๊ฐ์ ๋ฐํํ๋ค.
Oracle์์๋ ๊ณต๋ฐฑ ๋ฌธ์('')๋ฅผ INSERT ์์ ๋ฐ์ดํฐ๊ฐ NULL๋ก ์
๋ ฅ๋๋ค.
(SQL Server๋ ๊ณต๋ฐฑ ๋ฌธ์๋ก INSERT ๋๋ค.)
INSERT INTO ์๋น์ค VALUES ('999', '', '2015-11-11');
๋ฐ๋ผ์ SELECT ๋ค์๊ณผ ๊ฐ์ด ๊ฒ์ํ๋ฉด ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค์ง ์๋๋ค.
-- ๐ฅฒ BAD
SELECT * FROM ์๋น์ค WHERE ์๋น์ค๋ช
= '';
-- ๐ GOOD
SELECT * FROM ์๋น์ค WHERE ์๋น์ค๋ช
IS NULL;
Oracle:
NVL/ SQL Server:ISNULL
NVL(exp1, exp2)
ISNULL(exp1, exp2)
exp1 ์ ๊ฐ์ด NULL์ด๋ฉด exp2 ๊ฐ์ ๋ฐํํ๋ค.
(๋จ, exp1, exp2 ๋ฐ์ดํฐ์ ํ์
์ด ๊ฐ์์ผ ํจ)
IFNULL์ด ์๋์ ์ฃผ์
NULLIF(exp1, exp2)
exp1 ์ ๊ฐ์ด exp2 ์ ๊ฐ์ผ๋ฉด NULL ๊ฐ์exp1 ๊ฐ์๋ฐํํ๋ค.
COALESCE(exp1, exp2, ...)
NULL์ด ์๋ ์ต์ด์ ํํ์์ ๋ฐํํ๋ค. ๋ชจ๋ ํํ์์ด NULL์ด๋ผ๋ฉด NULL์ ๋ฐํํ๋ค.
IS NULLNULL์ธ์ง ๊ฒ์ฌํ ๋๋
IS NULL์ ์ฌ์ฉํด์ผ ํ๋ค. ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ์ ๋์ด์ง ๋ง์!
SELECT COUNT(C0L1) FROM TAB1 WHERE COL2 = NULL;
Oracle์์๋ NULL ๊ฐ์ ๊ฐ์ฅ ํฐ ๊ฐ์ผ๋ก ๊ฐ์ฃผํ์ฌ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ ์ ๊ฐ์ฅ ๋ง์ง๋ง์, ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ ์ ๊ฐ์ฅ ์ฒ์์ ์์นํ๋ค.
SQL Server์์๋ NULL ๊ฐ์ ๊ฐ์ฅ ์์ ๊ฐ์ผ๋ก ๊ฐ์ฃผํ์ฌ Oracle์ NULL๊ณผ ์ ๋ ฌ์ด ๋ฐ๋์ด๋ค.
UNIONINTERSECTMINUS / EXCEPTCROSS JOIN
WHERESELECT ๐ CARTESIAN PRODUCT ๋ผ๊ณ ๋ ๋ถ๋ฅธ๋คJOIN