3. SQL ๊ธฐ๋ณธ#
1. ๊ด๊ณํ DB#
DB
๋ฐ์ดํฐ๋ฅผ ์ผ์ ํ ํํ๋ก ์ ์ฅํด ๋์ ๊ฒ
DBMS๋ฅผ ์ด์ฉํ์ฌ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ด๋ฆฌ์ ๋ฐ์ดํฐ ์์ ๋ณต๊ตฌ ๊ฐ๋ฅ\
์ข ๋ฅ
๊ณ์ธตํ DB : ํธ๋ฆฌ ํํ์ ์๋ฃ๊ตฌ์กฐ์ ๋ฐ์ดํฐ ์ ์ฅ, 1:N ๊ด๊ณ ํํ
๋คํธ์ํฌํ DB : ์ค๋์ ๋ฉค๋ฒ ํํ๋ก ๋ฐ์ดํฐ ์ ์ฅ, M:N ๊ด๊ณ ํํ
๊ด๊ณํ DB : ๋ฆด๋ ์ด์ ์ ๋ฐ์ดํฐ ์ ์ฅ, ์งํฉ ์ฐ์ฐ๊ณผ ๊ด๊ณ ์ฐ์ฐ ๊ฐ๋ฅ
๊ด๊ณํ DB(RDB;Relational Database)
์ ๊ทํ๋ฅผ ํตํด ์ด์ํ์ ๋ฐ ์ค๋ณต ๋ฐ์ดํฐ ์ ๊ฑฐ
๋์์ฑ ๊ด๋ฆฌ์ ๋ณํ ์ ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ ๋์ ์กฐ์ ๊ฐ๋ฅ
์งํฉ ์ฐ์ฐ
ํฉ์งํฉ(Union)
์ฐจ์งํฉ(Difference)
๊ต์งํฉ(Intersection)
๊ณฑ์งํฉ(Cartesian Product) : ๊ฐ ๋ฆด๋ ์ด์ ์ ์กด์ฌํ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํฉ
๊ด๊ณ ์ฐ์ฐ
์ ํ ์ฐ์ฐ(Selection) : ์กฐ๊ฑด์ ๋ง๋ ํ(ํํ) ์กฐํ
ํฌ์ ์ฐ์ฐ(Projection) : ์กฐ๊ฑด์ ๋ง๋ ์ปฌ๋ผ(์์ฑ) ์กฐํ
๊ฒฐํฉ ์ฐ์ฐ(Join) : ๊ณตํต ์์ฑ์ ์ฌ์ฉํ์ฌ ์๋ก์ด ๋ฆด๋ ์ด์ ์์ฑ
๋๋๊ธฐ ์ฐ์ฐ(Division) : ๊ณตํต ์์๋ฅผ ์ถ์ถ, ๋ถ๋ชจ ๋ฆด๋ ์ด์ ์ ์์ฑ์ ์ญ์ ํ ํ ์ค๋ณต๋ ํ ์ ๊ฑฐ
SQL
RDB์์ ์ฌ์ฉํ๋ ์ธ์ด
๋ฐ์ดํฐ ์กฐํ,์ ๋ ฅ,์์ ,์ญ์ ๊ธฐ๋ฅ ์ ๊ณต
DML(Data Manipulation Language, ๋ฐ์ดํฐ ์กฐ์์ด) ISUD
SELECT: ์กฐํ
INSERT, UPDATE, DELETE: ๋ณํ
DDL(Data Definition Language, ๋ฐ์ดํฐ ์ ์์ด) CADRT
๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๊ด๋ จ ๋ช ๋ น์ด
CREATE, ALTER, DROP, RENAME
DCL(Data Control Language, ๋ฐ์ดํฐ ์ ์ด์ด)
DB ์ ๊ทผ ๊ถํ ๋ถ์ฌ ๋ฐ ํ์
GRANT, REVOKE
TCL(Transaction Control Language, ํธ๋์ญ์ ์ ์ด์ด)
DML๋ก ์กฐ์ํ ๊ฒฐ๊ณผ๋ฅผ ๋ ผ๋ฆฌ์ ์ธ ์์ ๋จ์ ๋ณ๋ก ์ ์ด
COMMIT, ROLLBACK
Table ํ
์ด๋ธ
RDB์ ๊ธฐ๋ณธ๋จ์, ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฐ์ฒด, column-row 2์ฐจ์ ๊ตฌ์กฐ
Field ํ๋ : ์ปฌ๋ผ๊ณผ ํ์ด ๊ฒน์น๋ ํ๋์ ๊ณต๊ฐ

Fig. 22 ์ ์์ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋์ ํ ์ด๋ธ๋ก ์ ์ฅํ์ง ์๋๋ค. [๊ทธ๋ฆผ โ ก-1-5]๋ฅผ ๋ณด๋ฉด ์ ์์ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ ์ด๋ธ๊ณผ ๊ตฌ๋จ ํ ์ด๋ธ์ด๋ผ๋ ๋ณต์์ ํ ์ด๋ธ๋ก ๋ถํ ํ์ฌ ์ ์ฅํ๊ณ ์๋ค.#
๊ทธ๋ฆฌ๊ณ ๋ถํ ๋ ํ ์ด๋ธ์ ๊ทธ ์นผ๋ผ์ ๊ฐ์ ์ํด ์ฐ๊ฒฐ๋๋ค. ์ด๋ ๊ฒ ํ ์ด๋ธ์ ๋ถํ ํ์ฌ ๋ฐ์ดํฐ์ ๋ถํ์ํ ์ค๋ณต์ ์ค์ด๋ ๊ฒ์ ์ ๊ทํ(Normalization)๋ผ๊ณ ํ๋ค. ๋ฐ์ดํฐ์ ์ ํฉ์ฑ ํ๋ณด์ ๋ฐ์ดํฐ ์ ๋ ฅ/์์ /์ญ์ ์ ๋ฐ์ํ ์ ์๋ ์ด์ํ์(Anomaly)์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ ๊ทํ๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ธ๋ง์์ ๋งค์ฐ ์ค์ํ ํ๋ก์ธ์ค์ด๋ค.
2. DDL : CADRT#

Fig. 23 ๋ฐ์ดํฐ ์ ํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ํน์ ์๋ฃ๋ฅผ ์ ๋ ฅํ ๋, ๊ทธ ์๋ฃ๋ฅผ ๋ฐ์๋ค์ผ ๊ณต๊ฐ์ ์๋ฃ์ ์ ํ๋ณ๋ก ๋๋๋ ๊ธฐ์ค์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค#
๋ฐ์ดํฐ ํ์ (Oracle,SQL Server ํ์, ๊ดํธ์์ ์กฐ๊ฑด)
CHAR(L) : ๊ณ ์ ๊ธธ์ด ๋ฌธ์์ด, ํ ๋น๋ ๋ณ์ ๊ฐ์ ๊ธธ์ด๊ฐ L ์ดํ ์ผ๋ ์ฐจ์ด๋ ๊ณต๋ฐฑ์ผ๋ก ์ฑ์
VARCHAR2(L),VARCHAR(L) : ๊ฐ๋ณ ๊ธธ์ด ๋ฌธ์์ด, ํ ๋น๋๋ ๋ณ์ ๊ฐ์ ๊ธธ์ด์ ์ต๋๊ฐ์ด L์. ๋ฌธ์์ด์ ๊ฐ๋ฅํ ์ต๋ ๊ธธ์ด๋ก ์ค์
NUMBER(L,D) : ์ซ์ํ(L์ ์ ์ฒด์๋ฆฌ์, D๋ ์์์ ์๋ฆฌ์)
SQL Server์ NUMERIC, DECIMAL, FLOAT, REAL ๋ฑ ์กด์ฌ
DATE, DATETIME : ๋ ์งํ, ๋ฐ์ดํฐ ํฌ๊ธฐ ์ง์ ์ด ํ์ํ์ง ์์
2.1 CREATE TABLE#
ํ ์ด๋ธ ๋ฐ ์ปฌ๋ผ ๋ช ๋ช ๊ท์น
์ํ๋ฒณ
์ซ์
_ ์ธ๋๋ฐ
๋ฌ๋ฌ $
์ต #
๋์๋ฌธ์ ๊ตฌ๋ถํ์ง ์์
๋จ์ํ ๊ถ๊ณ
์ ์ฝ์กฐ๊ฑด
PRIMARY KEY
ํ ์ด๋ธ ๋น ํ๋์ ๊ธฐ๋ณธํค๋ง ์ ์ ๊ฐ๋ฅ
๊ธฐ๋ณธํค ์์ฑ์ DBMS๊ฐ ์๋์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์์ฑ
NULL ๋ถ๊ฐ
FOREIGN KEY
์ผ๋ก ๋ค๋ฅธ ํ ์ด๋ธ์ ๊ธฐ๋ณธํค๋ฅผ ์ธ๋ํค๋ก ์ง์
์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ ์ต์ ์ ํ๊ฐ๋ฅ
ALTER TABLE ํ ์ด๋ธ๋ช ADD CONSTRAINT ์ปฌ๋ผ๋ช FOREIGN KEY (์ปฌ๋ผ๋ช ) REFERENCES
UNIQUE KEY
ํ ๋ฐ์ดํฐ๋ฅผ ์๋ณํ๊ธฐ ์ํด ์์ฑ
NULL ๊ฐ๋ฅ
DEFAULT
DEFAULT ๊ฐ์ผ๋ก ๊ธฐ๋ณธ๊ฐ ์ค์
NOT NULL
NULL : ์์ง ์ ์๋์ง ์์ ๊ฐ ๋๋ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ์ง ๋ชปํ๋ ๊ฐ ์์น์ฐ์ฐNULL ๋น๊ต์ฐ์ฐFALSE
CHECK
์ ๋ ฅ๊ฐ์ ์ข ๋ฅ ๋ฐ ๋ฒ์ ์ ํ
DESCRIBE ํ
์ด๋ธ๋ช
sp_help โdbo.ํ
์ด๋ธ๋ช
โ
ํ
์ด๋ธ ๊ตฌ์กฐ ํ์ธ
DESCRIBE ํ
์ด๋ธ๋ช
์ด ANSI/ISO ํ์ค
2.2 ALTER TABLE#
ํ ์ด๋ธ์ ์ปฌ๋ผ ๊ด๋ จ ๋ณ๊ฒฝ ๋ช ๋ น์ด
์ปฌ๋ผ ์ถ๊ฐ
ALTER TABLE ํ ์ด๋ธ๋ช ADD (์นผ๋ผ๋ช ๋ฐ์ดํฐํ์ )
๋ง์ง๋ง ์ปฌ๋ผ์ผ๋ก ์ถ๊ฐ๋จ
์ปฌ๋ผ ์์น ์ง์ ๋ถ๊ฐ
์ปฌ๋ผ ์ญ์
ALTER TABLE ํ ์ด๋ธ๋ช DROP COLUMN ์นผ๋ผ๋ช
์ญ์ ํ ๋ณต๊ตฌ ๋ถ๊ฐ
์ปฌ๋ผ ์ค์ ๋ณ๊ฒฝ
ALTER TABLE ํ ์ด๋ธ๋ช MODIFY (์นผ๋ผ๋ช ๋ฐ์ดํฐํ์ ์ ์ฝ์กฐ๊ฑด)
NULL๋ง ์๊ฑฐ๋ ํ์ด ์๋ ๊ฒฝ์ฐ์๋ง ์ปฌ๋ผ ํฌ๊ธฐ ์ถ์ ๊ฐ๋ฅ
NULL๋ง ์์๋ - ๋ฐ์ดํฐ ์ ํ๋ ๋ณ๊ฒฝ ๊ฐ๋ฅ
NULL์ด ์์ผ๋ฉด NOT NULL ์ ์ฝ์กฐ๊ฑด ์ถ๊ฐ ๊ฐ๋ฅ
๊ธฐ๋ณธ๊ฐ ๋ณ๊ฒฝ ์์ ์ดํ ๋ฐ์ํ๋ ๋ฐ์ดํฐ์ ๋ํด์๋ง ๊ธฐ๋ณธ๊ฐ์ด ๋ณ๊ฒฝ๋จ
์ปฌ๋ผ๋ช ๋ณ๊ฒฝ
ALTER TABLE ํ ์ด๋ธ๋ช RENAME COLUMN ์นผ๋ผ๋ช
ANSI/ISO ํ์ค์ ๋ช ์๋ ๊ธฐ๋ฅ์ด ์๋
์ ์ฝ์กฐ๊ฑด ์ถ๊ฐ
ALTER TABLE ํ ์ด๋ธ๋ช ADD CONSTRAINT ์ ์ฝ์กฐ๊ฑด
์ ์ฝ์กฐ๊ฑด ์ ๊ฑฐ
ALTER TABLE ํ ์ด๋ธ๋ช DROP CONSTRAINT ์ ์ฝ์กฐ๊ฑด
2.3 RENAME TABLE#
ALTER TABLE ํ
์ด๋ธ๋ช
RENAME TO ํ
์ด๋ธ๋ช
๋ ๊ฐ๋ฅ\
2.4 DROP TABLE#
ํ
์ด๋ธ์ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ ์ญ์ , ๋ณต๊ตฌ ๋ถ๊ฐ
CASCADE CONSTRAINT
์ต์
์ผ๋ก ๊ด๋ จ ํ
์ด๋ธ์ ์ฐธ์กฐ ์ ์ฝ์กฐ๊ฑด๋ ์ญ์ ํ์ฌ ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ ์ค์ํ ์ ์์. CREATE TABLE์์ ON DELETE CASCADE ์ต์
์ผ๋ก๋ ๋์ผ ๊ธฐ๋ฅ ์คํ ๊ฐ๋ฅ
2.5 TRUNCATE TABLE#
ํ
์ด๋ธ์ ์ ์ฒด ๋ฐ์ดํฐ ์ญ์ <-> DROP TABLE์ ํ
์ด๋ธ ์์ฒด๋ฅผ ์ ๊ฑฐํจ
๋ก๊ทธ๋ฅผ ๊ธฐ๋กํ์ง ์๊ธฐ ๋๋ฌธ์ ROLLBACK ๋ถ๊ฐ
3. DML : IUDS#
INSERT
๋ฐ์ดํฐ ์ ๋ ฅ
INSERT INTO ํ ์ด๋ธ๋ช (์นผ๋ผ๋ช , โฆ) VALUES (ํ๋๊ฐ, โฆ)
INSERT INTO ํ ์ด๋ธ๋ช VALUES (ํ๋๊ฐ, โฆ)
UPDATE
๋ฐ์ดํฐ ์์
UPDATE ํ ์ด๋ธ๋ช SET ์นผ๋ผ๋ช =ํ๋๊ฐ;
DELETE
๋ฐ์ดํฐ ์ญ์
DELETE FROM ํ ์ด๋ธ๋ช WHERE ์กฐ๊ฑด์
DELETE FROM ํ ์ด๋ธ๋ช
DELETE๋ก ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํด๋ ํ ์ด๋ธ ์ฉ๋์ ์ด๊ธฐํ๋์ง ์์
TRUNCATE๋ก ์ญ์ ํ๋ฉด ์ด๊ธฐํ๋จ
DROP์ ๊ฐ์ฒด ์ญ์ ๋ช ๋ น์ด
SELECT
์ปฌ๋ผ๋ณ ๋ฐ์ดํฐ ์ ํ :
SELECT ์นผ๋ผ๋ช FROM ํ ์ด๋ธ๋ช
๋ฐ์ดํฐ ์ค๋ณต ์์ด ์ ํ :
SELECT DISTINCT ์นผ๋ผ๋ช FROM ํ ์ด๋ธ๋ช
์ ์ฒด ์ปฌ๋ผ์ ๋ฐ์ดํฐ ์ ํ :
SELECT * FROM ํ ์ด๋ธ๋ช
ALIAS
SELECT ์ปฌ๋ผ๋ช AS โ๋ณ๋ช โ
FROM ํ ์ด๋ธ๋ช ๋ณ๋ช : ์ฟผ๋ฆฌ ๋ด์์ ์ฌ์ฉํ ํ ์ด๋ธ๋ช ์ค์ , ์ปฌ๋ผ๋ช ์ด ์ค๋ณต๋ ๊ฒฝ์ฐ SELECT์ ์์ ์จ๋ฆฌ์ด์ค ํ์
ํฉ์ฑ ์ฐ์ฐ์(๋ฌธ์์ด)
+, CONCAT(ORACLE : ||๋ก๋ ๊ฐ๋ฅ)
DUAL : ์ค๋ผํด ๊ธฐ๋ณธ ๋๋ฏธ ํ ์ด๋ธ, ์ฐ์ฐ ์ํ์ ์ํด ์ฌ์ฉ๋จ
4. TCL : UID#
ํธ๋์ญ์ DB์ ๋ ผ๋ฆฌ์ ์ฐ์ฐ ๋จ์, ํ๋ ์ด์์ SQL๋ฌธ์ ํฌํจํจ
๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ์ ๋ชฉ์ ์ผ๋ก ํจ\
์๊ตฌ ๋ณ๊ฒฝ ์ ํ์ธ + 2) ์ฐ๊ด์์ ๋์ ์ฒ๋ฆฌ ๊ฐ๋ฅ
๋ฐ์ ํ ๊ด๋ จ๋์ด ๋ถ๋ฆฌ๋ ์ ์๋ ํ ๊ฐ ์ด์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐ์
ํ๋์ ํธ๋์ญ์ ์๋ ํ๋ ์ด์์ SQL ๋ฌธ์ฅ์ด ํฌํจ
๋ถํ ํ ์ ์๋ ์ต์์ ๋จ์ DB๋ฅผ ์ ์์ ์ผ๋ก ์ข ๋ฃํ๋ฉด ์๋ ์ปค๋ฐ, ์ฑ ๋ฑ์ ์ด์์ผ๋ก DB์ ์์ด ๋จ์ ๋๋ฉด ์๋ ๋กค๋ฐฑ

4-1 COMMIT#
๋ฐ์ดํฐ๋ฅผ DB์ ์๊ตฌ์ ์ผ๋ก ๋ฐ์ํ๋ ๋ช ๋ ฅ์ด
์ปค๋ฐ ์ ํธ๋์ญ์ ์ด ์๋ฃ๋์ด LOCKING์ด ํด์ ๋จ
SQL SERVER๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ ์ปค๋ฐ
COMMIT ์
๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ์๋ง ์ํฅ์ ๋ฐ์๊ธฐ ๋๋ฌธ์ ๋ณต๊ตฌ ๊ฐ๋ฅ
NOLOGGING ์ต์ ์ฌ์ฉ์ ๋ฒํผ ์บ์์ ๊ธฐ๋ก์ ์๋ตํ์ฌ ์ ๋ ฅ ์ฑ๋ฅ์ด ํฅ์๋จ
์ฌ์ฉ์๋ SELECT ์ ๋ก ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์์ผ๋ ๋ค๋ฅธ ์ฌ์ฉ์๋ ํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ ์์
๋ณ๊ฒฝ๋ ํ์ LOCKING์ด ์ค์ ๋์ด ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ๋ณ๊ฒฝํ ์ ์์
LOCKING์ด ์ ๊ฑธ๋ฆฐ ์ํ์ผ ๋ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์๊ด์์
COMMIT ํ
๋ณ๊ฒฝ ์ฌํญ์ด DB์ ๋ฐ์
์ด์ ๋ฐ์ดํฐ ๋ณต๊ตฌ ๋ถ๊ฐ
๋ชจ๋ ์ฌ์ฉ์๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ ์์
LOCKING์ด ํด์ ๋์ด ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ํ์ ์กฐ์ํ ์ ์์
4-2 ROLLBACK#
ํธ๋์ญ์ ์์ ์ด์ ์ ์ํ๋ก ๋๋๋ฆฌ๋ ๋ช ๋ น์ด
COMMIT ์ด์ ์ํ๋ก ๋๋ ค์ค
ROLLBACK ์ LOCKING์ด ํด์ฌ๋จ
SAVEPOING : ํธ๋์ญ์ ์ผ๋ถ๋ง ๋กค๋ฐฑ ํ ์ ์๋๋ก ์ค๊ฐ์ํ๋ฅผ ์ ์ฅํ๋ ๋ช ๋ น์ด
ROLLBACK TO ์ ์ฅ์ ๋ช
: ํด๋น ์ ์ฅ์ ์ํ๋ก ๋๋๋ฆผ๋์ผํ ์ ์ฅ์ ๋ช ์ด ์์ผ๋ฉด ์ตํ ์ ์ฅ์ ์ด ์ ํจ
SQL SERVER์์๋
BEGINE TRAN
์ผ๋ก ๋ช ์ํด์ผ ํ๋ฅ
5. DCL#
์ ์ ๋ฅผ ์์ฑํ๊ฑฐ๋ ๊ถํ์ ์ ์ดํ๋ ๋ช ๋ น์ด, ๋ณด์์ ์ํด ํ์ํจ
GRANT : ๊ถํ ๋ถ์ฌ,
GRANT ๊ถํ ON ์ค๋ธ์ ํธ TO ์ ์ ๋ช
REVOKE : ๊ถํ ์ ๊ฑฐ,
REVOKE ๊ถํ ON ์ค๋ธ์ ํธ TO ์ ์ ๋ช
๊ถํ
SELECT, INSERT, UPDATE, ALTER, ALL - DML ๊ด๋ จ ๊ถํ
REFERENCES : ์ง์ ๋ ํ ์ด๋ธ์ ์ฐธ์กฐํ๋ ์ ์ฝ์กฐ๊ฑด์ ์์ฑํ๋ ๊ถํ
INDEX : ์ง์ ๋ ํ ์ด๋ธ์์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ๊ถํ
ORACLE ์ ์
SCOTT :
SYS :
SYSTEM :
ROLE
๊ถํ์ ์งํฉ
๊ถํ์ ์ผ์ผ์ด ๋ถ์ฌํ์ง ์๊ณ ROLE๋ก ํธ๋ฆฌํ๊ฒ ์ฌ๋ฌ ๊ถํ์ ๋ถ์ฌํ ์ ์์

Fig. 24 ROLE์๋ ์์คํ ๊ถํ๊ณผ ์ค๋ธ์ ํธ ๊ถํ์ ๋ชจ๋ ๋ถ์ฌํ ์ ์์ผ๋ฉฐ, ROLE์ ์ ์ ์๊ฒ ์ง์ ๋ถ์ฌ๋ ์๋ ์๊ณ , ๋ค๋ฅธ ROLE์ ํฌํจํ์ฌ ์ ์ ์๊ฒ ๋ถ์ฌ๋ ์๋ ์๋ค. Oracle์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ช ๊ฐ์ง ROLE์ ์ ๊ณตํ๊ณ ์๋ค. ๊ทธ ์ค ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ROLE์ CONNECT์ RESOURCE#
CONNCECT ROLE์ ๊ถํ์ CREATE SESSION ๋ฟ์ด๋ค. ๋๋จธ์ง๋ ์ ๋ถ RESOURCE๋ค.
6. WHERE ์กฐ๊ฑด์ #
SELECT [DISTINCT/ALL] ์นผ๋ผ๋ช
[ALIAS๋ช
] FROM ํ
์ด๋ธ๋ช
WHERE ์กฐ๊ฑด์
WHERE ์ ์ FROM ์ ๋ค์์ ์์นํ๋ฉฐ, ์กฐ๊ฑด์์ ์๋ ๋ด์ฉ์ผ๋ก ๊ตฌ์ฑ๋๋ค
์นผ๋ผ(Column)๋ช (๋ณดํต ์กฐ๊ฑด์์ ์ข์ธก์ ์์น) - ๋น๊ต ์ฐ์ฐ์ - ๋ฌธ์, ์ซ์, ํํ์ (๋ณดํต ์กฐ๊ฑด์์ ์ฐ์ธก์ ์์น) - ๋น๊ต ์นผ๋ผ๋ช (JOIN ์ฌ์ฉ์)


Fig. 25 LIKE์ ์ฌ์ ์ ์๋ฏธ๋ โ~์ ๊ฐ๋คโ์ด๋ค. ๋ฐ๋ผ์ ์์ ๊ฐ์ ๊ฒฝ์ฐ๋ผ๋ฉด ๋น๊ต ์ฐ์ฐ์์ธ โ=โ์ ์ฌ์ฉํด์ ์์ฑํด๋ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ๋ง์ฝ โ์ฅโ์จ ์ฑ์ ๊ฐ์ง ์ ์๋ค์ ์กฐํํ ๊ฒฝ์ฐ๋ ์ด๋ป๊ฒ ํ ๊น? ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ LIKE ์ฐ์ฐ์์์๋ ์์ผ๋์นด๋(WildCard)๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์์ผ๋์นด๋(WildCard)๋ ํ ๊ฐ ํน์ 0๊ฐ ์ด์์ ๋ฌธ์๋ฅผ ๋์ ํด์ ์ฌ์ฉํ๊ธฐ ์ํ ํน์ ๋ฌธ์
๋ฅผ ์๋ฏธํ๋ฉฐ, ์ด๋ฅผ ์กฐํฉํ์ฌ ์ฌ์ฉํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ฏ๋ก SQL ๋ฌธ์ฅ์์ ์ฌ์ฉํ๋ ์คํธ๋ง(STRING) ๊ฐ์ผ๋ก ์ฉ์ดํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.#

6-1 ๋ถ๋ถ ๋ฒ์ ์ฒ๋ฆฌ#
ROWNUM(oracle) : SQL ์ฒ๋ฆฌ ๊ฒฐ๊ณผ ์งํฉ์ ๊ฐ ํ์ ์์๋ก ๋ถ์ฌ๋๋ ๋ฒํธ, ์กฐ๊ฑด์ ๋ด์์ ํ์ ๊ฐ์๋ฅผ ์ ํํ๋ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํจ
TOP(SQL Server) : ์ถ๋ ฅ ํ์ ์ ์ ํ ํจ์, TOP (N) ๋ก n๊ฐ ํ ์ถ๋ ฅ, ๊ฐ์ ๋์ ๋น์จ๋ก๋ ์ ํ ๊ฐ๋ฅ. order by ์ ์ด ์์ผ๋ฉด rownum๊ณผ top์ ๊ธฐ๋ฅ์ด ๊ฐ์
7. ํจ์#
ํจ์๋ช (์ปฌ๋ผ์ด๋ ํํ์ [,arg1, arg2, โฆ]) ํจ์3 (ํจ์2 (ํจ์1 (์นผ๋ผ์ด๋ ํํ์ [, Arg1]) [, Arg2]) [, Arg3 ])
ํจ์๋ ํฌ๊ฒ ๋ฒค๋(oracle, mysqlโฆ) ์์ ์ ๊ณตํ๋ ๋ด์ฅ ํจ์์ ์ฌ์ฉ์๊ฐ ์ ์ํ ์ ์๋ ํจ์๋ก ๋๋ ์ ์๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด์ฅํจ์๋ sql์ ๋์ฑ ๊ฐ๋ ฅํ๊ฒ ํด์ฃผ๊ณ , ๋ฐ์ดํฐ ๊ฐ์ ๊ฐํธํ๊ฒ ์กฐ์ํ๋๋ฐ ์ฌ์ฉ๋๋ค. ๋ด์ฅ ํจ์๋ ๋ ๋จ์ผํ ๊ฐ์ด ์ ๋ ฅ๋๋ ๋จ์ผํ ํจ์(single-row function)๊ณผ ์ฌ๋ฌ ํ์ ๊ฐ์ด ์ ๋ ฅ๋๋ ๋ค์คํ ํจ์(multi-row function)๋ก ๋๋ ์ ์๋ค. ๋ค์คํ ํจ์๋ ๋ค์ ์ง๊ณํจ์, ๊ทธ๋ฃนํจ์, ์๋์ฐํจ์๋ก ๋๋ ์ ์๋ค.
ํจ์๋ ์๋ฌด๋ฆฌ ์
๋ ฅ๋๋ ๊ฐ์ด ๋ง์๋ ์ถ๋ ฅ์ ํ๋๋ง ๋๋ m:1
๊ด๊ณ๋ผ๋ ๊ฒ์ด ์ค์ํ ํน์ง์ด๋ค.
7-1 ๋จ์ผํ ํจ์#

Fig. 26 ๋จ์ผํ ํจ์์ ์ค์ํ ํน์ง์ ๋ค์๊ณผ ๊ฐ๋ค.#
SELECT, WHERE, ORDER BY
์ ์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.\๊ฐ ํ(Row)๋ค์ ๋ํด ๊ฐ๋ณ์ ์ผ๋ก ์์ฉํ์ฌ ๋ฐ์ดํฐ ๊ฐ๋ค์ ์กฐ์ํ๊ณ , ๊ฐ๊ฐ์ ํ์ ๋ํ ์กฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํดํ๋ค.\
์ฌ๋ฌ ์ธ์(Argument)๋ฅผ ์ ๋ ฅํด๋ ๋จ ํ๋์ ๊ฒฐ๊ณผ๋ง ๋ฆฌํดํ๋ค.\
ํจ์์ ์ธ์(Arguments)๋ก ์์, ๋ณ์, ํํ์์ด ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ , ํ๋์ ์ธ์๋ฅผ ๊ฐ์ง๋ ๊ฒฝ์ฐ๋ ์์ง๋ง ์ฌ๋ฌ ๊ฐ์ ์ธ์๋ฅผ ๊ฐ์ง ์๋ ์๋ค. \
ํน๋ณํ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด ํจ์์ ์ธ์(Arguments)๋ก ํจ์๋ฅผ ์ฌ์ฉํ๋ ํจ์์
์ค์ฒฉ
์ด ๊ฐ๋ฅํ๋ค.



Fig. 27 DATE ๋ณ์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด๋ป๊ฒ ์ ์ฅ๋๋์ง ์ดํด๋ณด๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ ์ง๋ฅผ ์ ์ฅํ ๋ ๋ด๋ถ์ ์ผ๋ก ์ธ๊ธฐ(Century), ๋ (Year), ์(Month), ์ผ(Day), ์(Hours), ๋ถ(Minutes), ์ด(Seconds)์ ๊ฐ์ ์ซ์ ํ์์ผ๋ก ๋ณํํ์ฌ ์ ์ฅํ๋ค. ๋ ์ง๋ ์ฌ๋ฌ ๊ฐ์ง ํ์์ผ๋ก ์ถ๋ ฅ์ด ๋๊ณ ๋ ์ง ๊ณ์ฐ์๋ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ๊ทธ ํธ๋ฆฌ์ฑ์ ์ํด์ ์ซ์ํ์ผ๋ก ์ ์ฅํ๋ ๊ฒ์ด๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ ์ง๋ฅผ ์ซ์๋ก ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋ง์ , ๋บ์ ๊ฐ์ ์ฐ์ ์ฐ์ฐ์๋ก๋ ๊ณ์ฐ์ด ๊ฐ๋ฅํ๋ค. ์ฆ, ๋ ์ง์ ์ซ์ ์์๋ฅผ ๋ํ๊ฑฐ๋ ๋บ ์ ์๋ค.#

Fig. 28 ๋ฒคํฐ์ ๊ณ ์ ํญ๋ชฉ์ด ๋ง๊ธฐ ๋๋ฌธ์ ์๊ธฐ๊ฐ ๋ฐ๋ก ํ์ํ๋ค.#

Fig. 29 NVL (NULL ํ๋จ ๋์,โNULL์ผ ๋ ๋์ฒด๊ฐโ)
ISNULL (NULL ํ๋จ ๋์,โNULL์ผ ๋ ๋์ฒด๊ฐโ)
NULLIF (a, b) : return a==b -> NULL, a!=b -> a
COALESCE (a, b, c โฆ) : return null์ด ์๋ ์ฒซ๋ฒ์งธ ๊ฐ#
7-2 ์กฐ๊ฑด๋ฌธ#
IF-THEN_ELSE

Fig. 30 CASE ํํ์ ํ๊ธฐ ์ํด์๋ ์กฐ๊ฑด์ ์ ํํํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๊ณ , Oracle์ ๊ฒฝ์ฐ DECODE ํจ์๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค.#
ELSE ์๋ต์ NULL ์ถ๋ ฅ\
โป โCASE WHEN NULL THEN ์ถ๋ ฅ๊ฐ ELSE ๊ธฐ๋ณธ๊ฐโ์ ์กฐ๊ฑด์ด ์์ผ๋ฏ๋ก ๋ชจ๋ ํ์์ ๊ธฐ๋ณธ๊ฐ ์ถ๋ ฅ (์ผ๋ฐ์ ์ผ๋ก โWHEN ์นผ๋ผ IS NULLโ๋ก ์์ ํ์)
DECODE : Oracle ํจ์, ๊ธฐ์ค๊ฐn์ด๋ฉด ์ถ๋ ฅ๊ฐn ์ถ๋ ฅ
8. ์ง๊ณ ํจ์ : Aggregate Function#
์ง๊ณ ํจ์๋ช ( [DISTINCT | ALL] ์นผ๋ผ์ด๋ ํํ์ )
ALL : Default ์ต์ ์ด๋ฏ๋ก ์๋ต ๊ฐ๋ฅํจ
DISTINCT : ๊ฐ์ ๊ฐ์ ํ๋์ ๋ฐ์ดํฐ๋ก ๊ฐ์ฃผํ ๋ ์ฌ์ฉํ๋ ์ต์ ์
์ฌ๋ฌ ํ๋ค์ ๊ทธ๋ฃน์ด ๋ชจ์ฌ์ ๊ทธ๋ฃน๋น ๋จ ํ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋๋ ค์ฃผ๋ ํจ์๋ฅผ ๋งํ๋ค. ROLLUP, CUBE, GROUPING SETS๊ฐ์ ํจ์๋ 2์ฅ 5์ ์์ WINDOW ํจ์๋ 2์ฅ 6์ ์์ ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ค๋ช ์ด ๋ค์ด๊ฐ ๊ฒ์ด๊ณ ์ฌ๊ธฐ์๋ ๊ธฐ๋ณธ์ ์ธ ์ง๊ณ ํจ์๋ค์ ์ฐ์ ์ ์ผ๋ก ๋ค๋ฃจ๊ฒ ๋๋ค.

Fig. 31 ALL,DISTINCT๋ ์ ์ฒด๋ฅผ ์ถ๋ ฅํด์ฃผ๊ณ ์ค๋ณต์ ์ ์ธํ๊ณ ์ถ๋ ฅํ๋ค.
COUNT ํจ์๋ฅผ ์ ์ธํ๊ณ ๋ ์ ๋ถ NULL๊ฐ์ ์ ์ธํ๊ณ ๊ณ์ฐํ๋ค.
COUNT๋ ํํ์์ด ๋ค์ด์ค๋ฉด NULL ์ ์ ์ธํ๊ณ ์ฐ์ฐ์ ํด์ค๋ค.
GROUP BY ๊ธฐ์ค์ผ๋ก ๋๋ ์ง ๊ฐ ๊ทธ๋ฃน์ ์ฐ์ฐํ๋ ์ญํ
ํ๋ ์ด์์ ํ์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด ์ฐ์ฐํ๊ธฐ ์ํ ํจ์์ด๋ค.#
8-1 GROUP BY#
SELECT [DISTINCT] ์นผ๋ผ๋ช [ALIAS๋ช ] FROM ํ ์ด๋ธ๋ช [WHERE ์กฐ๊ฑด์] [GROUP BY ์นผ๋ผ(Column)์ด๋ ํํ์] [HAVING ๊ทธ๋ฃน์กฐ๊ฑด์] ;
pandas์์ ๋ง์ด ์ฌ์ฉํ๋ ๊ทธ๋ฃน๋ฐ์ด๋ค. ๋ฐ์ดํฐ๋ฅผ ํน์ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํ์ํค๋ ๋ช ๋ น์ด์ด๋ค. ๊ทธ๋ฃน์ ๋๋๊ณ ๋ค์ ๊ทธ ๊ทธ๋ฃน ์์์ ์ธ๋ถ๊ทธ๋ฃน์ผ๋ก ๋๋ ์ ์๋ค. ALIAS๋ ์ฌ์ฉ๋ถ๊ฐ๋ฅ ํ๋ค.
์์์ผ ํ ๊ฒ์ GROUP BY ๊ตฌ์ ์๋ ์ปฌ๋ผ์ ๋ฐ๋์ SELECT ์ ์๋ ์กด์ฌํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
GROUP BY ๊ตฌ์๋ ๋ค์ํ ํจ์๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. SUBSTR, INSTR ๋ฑ์ด ๊ฐ๋ฅใ
๋คใ
.
8-2 HAVING#
์ผ๋ฐ์ ์ผ๋ก GROUPBY ์ ์ ์ํ ์ง๊ณ ๋ฐ์ดํฐ์ ์ถ๋ ฅ ์กฐ๊ฑด์ ๊ฑด๋ค.
๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก GROUP BY ๋ค์ ์์นํ๋ค.
GROUP BY ์ ์ ์ํ ์ง๊ณ ๋ฐ์ดํฐ์ ์ถ๋ ฅ ์กฐ๊ฑด์ ๊ฑด๋ค.
WHERE ์ ๊ณผ ํท๊ฐ๋ฆฌ์ง ์๊ฒ ์กฐ์ฌํด์ผํ๋ค.
์ฒ์๋ถํฐ ํ
์ด๋ธ ์์ฒด์ ์กฐ๊ฑด์ ๊ฑธ๊ณ ์ถ์ผ๋ฉด WHERE๋ฅผ ์ฌ์ฉํ๊ณ
๊ทธ๋ฃน๋ณ๋ก ๋ฌถ์ธ ์ปฌ๋ถ์ ์กฐ๊ฑด์ ๊ฑธ๊ณ ์ถ๋ค๋ฉด HAVING์ ์ฌ์ฉํด์ผํ๋ค.
9. ORDER BY#
SELECT ์นผ๋ผ๋ช [ALIAS๋ช ]
FROM ํ ์ด๋ธ๋ช
[WHERE ์กฐ๊ฑด์]
[GROUP BY ์นผ๋ผ(Column)์ด๋ ํํ์]
[HAVING ๊ทธ๋ฃน์กฐ๊ฑด์]
[ORDER BY ์นผ๋ผ(Column)์ด๋ ํํ์ [ASC ๋๋ DESC]] ;
์์ SELECT๋ฌธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ
์ด๋ธ์์ ์ถ๋ ฅ ๋์์ด ์๋ ๊ฒ์ ์ ๊ฑฐํ๊ณ ๊ทธ๋ฃนํํด์ ๊ทธ๋ฃนํ๋ ๊ฐ์ด ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ฐ ๋ฐ ์ถ๋ ฅํ๊ณ ์ ๋ ฌํ๋ค...
๋ผ๋ ๊ฒ์ด๊ณ ์ ํ์ ์ผ๋ก []์ ์๋ ๊ฒ๋ค์ ์ฌ์ฉํ์ง ์์๋ ๊ฐ๋ฅํ๋ค.
ํน์ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๋ ๋ช
๋ น๋ฌธ์ด๋ค. ๊ธฐ๋ณธ ์ ๋ ฌ์ ์ค๋ฆ์ฐจ์์ด๋ค.
์ปฌ๋ผ๋ช
๋์ SELECT ์ ์์ ์ฌ์ฉํ ALIAS๋ช
์ด๋ ์์๋ฅผ ๋ํ๋ด๋ ์ ์๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
๋ฌธ์ฅ์ ์ ์ผ ๋ง์ง๋ง์ ์์นํ๋ค.
oracle์ null์ ๊ฐ์ฅ ํฐ ๊ฐ์ผ๋ก ์ทจ๊ธํ๋ฉฐ, ๋ฐ๋๋ก SQL Server์์๋ ๋ฐ๋๋ก ๊ฐ์ฅ ์์ ๊ฐ์ผ๋ก ์ทจ๊ธํ๋ค.
10. JOIN#
์์์ ๋ฐฐ์ด ์ ๊ทํ๋ฅผ ํตํด์ ์ฐ๋ฆฌ๋ ๋ถํ์ํ ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ํ๋ณดํ๊ณ , ์ด์ํ์์ ๋ฐ์์ ํผํ๊ธฐ ์ํด ํ ์ด๋ธ์ ๋ถํ ํ์ฌ ์์ฑํ๋ค. ์ฌ์ค ๋ฐ์ดํฐ์จ์ดํ์ฐ์ค ๋ชจ๋ธ์ฒ๋ผ ํ๋์ ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ค์์ผ๋๊ณ ๊ทธ ํ ์ด๋ธ๋ก๋ถํฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ๋์ ๊ฒจ์ฐ, ๊ฐ์ฅ ์ฃผ์ํ ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ๋ ํฐ ๋น์ฉ์ ์ง๋ถํด์ผํ๋ฉฐ, ๋ฐ์ดํฐ ์ถ๊ฐ-์ญ์ -์์ ์์ ์๋ ๋ ๋ง์ ํ์ด ๋ ๋ค. ์กฐํ๋ ์๋๋ฉด์์ ์ฅ์ ์ด ์๊ธฐ๋ ํ๋ค๋ค. ์ด๋ฌํ ์ํฉ์์ ํน์ ์๊ตฌ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ถํ ๋ ํ ์ด๋ธ๋ค์ ๋ชจ์ผ๋ ๊ฒ์ด join์ ์ญํ ์ด๋ค.
์ฌ๋ฌ ํ
์ด๋ธ์ ์ฐ๊ฒฐ ๋๋ ๊ฒฐํฉํ์ฌ ๋ฐ์ดํฐ ์ถ๋ ฅ
์ผ๋ฐ์ ์ผ๋ก PK, FK์ ์ฐ๊ด์ฑ์ ์ํด ์ฑ๋ฆฝ๋๋ค
๋ฑ๊ฐ์กฐ์ธ(EQUI JOIN) : ๋ ํ ์ด๋ธ์ ์ปฌ๋ผ ๊ฐ์ด ์ ํํ๊ฒ ์ผ์นํ๋ ๊ฒฝ์ฐ, ๋๋ถ๋ถ PK,FK ๊ด๊ณ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํจ
SELECT ์นผ๋ผs FROM ํ ์ด๋ธ1 A, ํ ์ด๋ธ2 B WHERE A.์นผ๋ผ๋ช =B.์นผ๋ผ๋ช ;
SELECT ๋์ ์ปฌ๋ผ์ด ๋ ํ ์ด๋ธ ๋ชจ๋์ ์๋ ๊ฒฝ์ฐ ALIAS๋ฅผ ์ง์ ํด์ผํจ(์์ชฝ ๋คํด๋๋จ)
๋น๋ฑ๊ฐ์กฐ์ธ(Non EQUI JOIN) : ๋ ํ ์ด๋ธ์ ์ปฌ๋ผ ๊ฐ์ด ์ ํํ๊ฒ ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ, ๋ถ๋ฑํธ๋ BETWEEN ์ฐ์ฐ์๋ฅผ ํตํด ์กฐ์ธ