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 ํ๋ : ์ปฌ๋ผ๊ณผ ํ์ด ๊ฒน์น๋ ํ๋์ ๊ณต๊ฐ
2. DDL : CADRT#
๋ฐ์ดํฐ ํ์ (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๋ก ํธ๋ฆฌํ๊ฒ ์ฌ๋ฌ ๊ถํ์ ๋ถ์ฌํ ์ ์์
CONNCECT ROLE์ ๊ถํ์ CREATE SESSION ๋ฟ์ด๋ค. ๋๋จธ์ง๋ ์ ๋ถ RESOURCE๋ค.
6. WHERE ์กฐ๊ฑด์ #
SELECT [DISTINCT/ALL] ์นผ๋ผ๋ช
[ALIAS๋ช
] FROM ํ
์ด๋ธ๋ช
WHERE ์กฐ๊ฑด์
WHERE ์ ์ FROM ์ ๋ค์์ ์์นํ๋ฉฐ, ์กฐ๊ฑด์์ ์๋ ๋ด์ฉ์ผ๋ก ๊ตฌ์ฑ๋๋ค
์นผ๋ผ(Column)๋ช (๋ณดํต ์กฐ๊ฑด์์ ์ข์ธก์ ์์น) - ๋น๊ต ์ฐ์ฐ์ - ๋ฌธ์, ์ซ์, ํํ์ (๋ณดํต ์กฐ๊ฑด์์ ์ฐ์ธก์ ์์น) - ๋น๊ต ์นผ๋ผ๋ช (JOIN ์ฌ์ฉ์)
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 ๋จ์ผํ ํจ์#
7-2 ์กฐ๊ฑด๋ฌธ#
IF-THEN_ELSE
8. ์ง๊ณ ํจ์ : Aggregate Function#
์ง๊ณ ํจ์๋ช ( [DISTINCT | ALL] ์นผ๋ผ์ด๋ ํํ์ )
ALL : Default ์ต์ ์ด๋ฏ๋ก ์๋ต ๊ฐ๋ฅํจ
DISTINCT : ๊ฐ์ ๊ฐ์ ํ๋์ ๋ฐ์ดํฐ๋ก ๊ฐ์ฃผํ ๋ ์ฌ์ฉํ๋ ์ต์ ์
์ฌ๋ฌ ํ๋ค์ ๊ทธ๋ฃน์ด ๋ชจ์ฌ์ ๊ทธ๋ฃน๋น ๋จ ํ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋๋ ค์ฃผ๋ ํจ์๋ฅผ ๋งํ๋ค. ROLLUP, CUBE, GROUPING SETS๊ฐ์ ํจ์๋ 2์ฅ 5์ ์์ WINDOW ํจ์๋ 2์ฅ 6์ ์์ ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ค๋ช ์ด ๋ค์ด๊ฐ ๊ฒ์ด๊ณ ์ฌ๊ธฐ์๋ ๊ธฐ๋ณธ์ ์ธ ์ง๊ณ ํจ์๋ค์ ์ฐ์ ์ ์ผ๋ก ๋ค๋ฃจ๊ฒ ๋๋ค.
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 ์ฐ์ฐ์๋ฅผ ํตํด ์กฐ์ธ