3. SQL ๊ธฐ๋ณธ#

https://th.bing.com/th/id/OIP.-KvoMKZ3ekyioo7aFrQgMgHaHH?pid=ImgDet&rs=1

1. ๊ด€๊ณ„ํ˜• DB#

DB
๋ฐ์ดํ„ฐ๋ฅผ ์ผ์ •ํ•œ ํ˜•ํƒœ๋กœ ์ €์žฅํ•ด ๋†“์€ ๊ฒƒ
DBMS๋ฅผ ์ด์šฉํ•˜์—ฌ ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์™€ ๋ฐ์ดํ„ฐ ์†์ƒ ๋ณต๊ตฌ ๊ฐ€๋Šฅ\

์ข…๋ฅ˜

  • ๊ณ„์ธตํ˜• DB : ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋ฐ์ดํ„ฐ ์ €์žฅ, 1:N ๊ด€๊ณ„ ํ‘œํ˜„

  • ๋„คํŠธ์›Œํฌํ˜• DB : ์˜ค๋„ˆ์™€ ๋ฉค๋ฒ„ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ ์ €์žฅ, M:N ๊ด€๊ณ„ ํ‘œํ˜„

  • ๊ด€๊ณ„ํ˜• DB : ๋ฆด๋ ˆ์ด์…˜์— ๋ฐ์ดํ„ฐ ์ €์žฅ, ์ง‘ํ•ฉ ์—ฐ์‚ฐ๊ณผ ๊ด€๊ณ„ ์—ฐ์‚ฐ ๊ฐ€๋Šฅ

๊ด€๊ณ„ํ˜• DB(RDB;Relational Database)

  1. ์ •๊ทœํ™”๋ฅผ ํ†ตํ•ด ์ด์ƒํ˜„์ƒ ๋ฐ ์ค‘๋ณต ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ

  2. ๋™์‹œ์„ฑ ๊ด€๋ฆฌ์™€ ๋ณ‘ํ–‰ ์ œ์–ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๋™์‹œ ์กฐ์ž‘ ๊ฐ€๋Šฅ

์ง‘ํ•ฉ ์—ฐ์‚ฐ

  • ํ•ฉ์ง‘ํ•ฉ(Union)

  • ์ฐจ์ง‘ํ•ฉ(Difference)

  • ๊ต์ง‘ํ•ฉ(Intersection)

  • ๊ณฑ์ง‘ํ•ฉ(Cartesian Product) : ๊ฐ ๋ฆด๋ ˆ์ด์…˜์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํ•ฉ

๊ด€๊ณ„ ์—ฐ์‚ฐ

  • ์„ ํƒ ์—ฐ์‚ฐ(Selection) : ์กฐ๊ฑด์— ๋งž๋Š” ํ–‰(ํŠœํ”Œ) ์กฐํšŒ

  • ํˆฌ์˜ ์—ฐ์‚ฐ(Projection) : ์กฐ๊ฑด์— ๋งž๋Š” ์ปฌ๋Ÿผ(์†์„ฑ) ์กฐํšŒ

  • ๊ฒฐํ•ฉ ์—ฐ์‚ฐ(Join) : ๊ณตํ†ต ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฆด๋ ˆ์ด์…˜ ์ƒ์„ฑ

  • ๋‚˜๋ˆ„๊ธฐ ์—ฐ์‚ฐ(Division) : ๊ณตํ†ต ์š”์†Œ๋ฅผ ์ถ”์ถœ, ๋ถ„๋ชจ ๋ฆด๋ ˆ์ด์…˜์˜ ์†์„ฑ์„ ์‚ญ์ œํ•œ ํ›„ ์ค‘๋ณต๋œ ํ–‰ ์ œ๊ฑฐ

SQL

  • RDB์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด

  • ๋ฐ์ดํ„ฐ ์กฐํšŒ,์ž…๋ ฅ,์ˆ˜์ •,์‚ญ์ œ ๊ธฐ๋Šฅ ์ œ๊ณต

  1. DML(Data Manipulation Language, ๋ฐ์ดํ„ฐ ์กฐ์ž‘์–ด) ISUD

    1. SELECT: ์กฐํšŒ

    2. INSERT, UPDATE, DELETE: ๋ณ€ํ˜•

  2. DDL(Data Definition Language, ๋ฐ์ดํ„ฐ ์ •์˜์–ด) CADRT

    1. ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์— ๊ด€๋ จ ๋ช…๋ น์–ด

    2. CREATE, ALTER, DROP, RENAME

  3. DCL(Data Control Language, ๋ฐ์ดํ„ฐ ์ œ์–ด์–ด)

    1. DB ์ ‘๊ทผ ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฐ ํšŒ์ˆ˜

    2. GRANT, REVOKE

  4. TCL(Transaction Control Language, ํŠธ๋žœ์žญ์…˜ ์ œ์–ด์–ด)

    1. DML๋กœ ์กฐ์ž‘ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋…ผ๋ฆฌ์ ์ธ ์ž‘์—… ๋‹จ์œ„ ๋ณ„๋กœ ์ œ์–ด

    2. COMMIT, ROLLBACK

Table ํ…Œ์ด๋ธ” RDB์˜ ๊ธฐ๋ณธ๋‹จ์œ„, ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฐ์ฒด, column-row 2์ฐจ์› ๊ตฌ์กฐ
Field ํ•„๋“œ : ์ปฌ๋Ÿผ๊ณผ ํ–‰์ด ๊ฒน์น˜๋Š” ํ•˜๋‚˜์˜ ๊ณต๊ฐ„

https://dataonair.or.kr/publishing/img/knowledge/SQL_156.jpg

Fig. 22 ์„ ์ˆ˜์™€ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”๋กœ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. [๊ทธ๋ฆผ โ…ก-1-5]๋ฅผ ๋ณด๋ฉด ์„ ์ˆ˜์™€ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ์ˆ˜ ํ…Œ์ด๋ธ”๊ณผ ๊ตฌ๋‹จ ํ…Œ์ด๋ธ”์ด๋ผ๋Š” ๋ณต์ˆ˜์˜ ํ…Œ์ด๋ธ”๋กœ ๋ถ„ํ• ํ•˜์—ฌ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค.#

๊ทธ๋ฆฌ๊ณ  ๋ถ„ํ• ๋œ ํ…Œ์ด๋ธ”์€ ๊ทธ ์นผ๋Ÿผ์˜ ๊ฐ’์— ์˜ํ•ด ์—ฐ๊ฒฐ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ…Œ์ด๋ธ”์„ ๋ถ„ํ• ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ๋ถˆํ•„์š”ํ•œ ์ค‘๋ณต์„ ์ค„์ด๋Š” ๊ฒƒ์„ ์ •๊ทœํ™”(Normalization)๋ผ๊ณ  ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ ํ™•๋ณด์™€ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ/์ˆ˜์ •/์‚ญ์ œ์‹œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ด์ƒํ˜„์ƒ(Anomaly)์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ •๊ทœํ™”๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชจ๋ธ๋ง์—์„œ ๋งค์šฐ ์ค‘์š”ํ•œ ํ”„๋กœ์„ธ์Šค์ด๋‹ค.

2. DDL : CADRT#

https://dataonair.or.kr/publishing/img/knowledge/SQL_162.jpg

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#

ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ๊ด€๋ จ ๋ณ€๊ฒฝ ๋ช…๋ น์–ด

  1. ์ปฌ๋Ÿผ ์ถ”๊ฐ€

    1. ALTER TABLE ํ…Œ์ด๋ธ”๋ช… ADD (์นผ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž…)

    2. ๋งˆ์ง€๋ง‰ ์ปฌ๋Ÿผ์œผ๋กœ ์ถ”๊ฐ€๋จ

    3. ์ปฌ๋Ÿผ ์œ„์น˜ ์ง€์ • ๋ถˆ๊ฐ€

  2. ์ปฌ๋Ÿผ ์‚ญ์ œ

    1. ALTER TABLE ํ…Œ์ด๋ธ”๋ช… DROP COLUMN ์นผ๋Ÿผ๋ช…

    2. ์‚ญ์ œ ํ›„ ๋ณต๊ตฌ ๋ถˆ๊ฐ€

  3. ์ปฌ๋Ÿผ ์„ค์ • ๋ณ€๊ฒฝ

    1. ALTER TABLE ํ…Œ์ด๋ธ”๋ช… MODIFY (์นผ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž… ์ œ์•ฝ์กฐ๊ฑด)

    2. NULL๋งŒ ์žˆ๊ฑฐ๋‚˜ ํ–‰์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ปฌ๋Ÿผ ํฌ๊ธฐ ์ถ•์†Œ ๊ฐ€๋Šฅ

    3. NULL๋งŒ ์žˆ์„๋–„ - ๋ฐ์ดํ„ฐ ์œ ํ˜•๋„ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

    4. NULL์ด ์—†์œผ๋ฉด NOT NULL ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€ ๊ฐ€๋Šฅ

    5. ๊ธฐ๋ณธ๊ฐ’ ๋ณ€๊ฒฝ ์ž‘์—… ์ดํ›„ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ๋งŒ ๊ธฐ๋ณธ๊ฐ’์ด ๋ณ€๊ฒฝ๋จ

  4. ์ปฌ๋Ÿผ๋ช… ๋ณ€๊ฒฝ

    1. ALTER TABLE ํ…Œ์ด๋ธ”๋ช… RENAME COLUMN ์นผ๋Ÿผ๋ช…

    2. ANSI/ISO ํ‘œ์ค€์— ๋ช…์‹œ๋œ ๊ธฐ๋Šฅ์ด ์•„๋‹˜

  5. ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€

    1. ALTER TABLE ํ…Œ์ด๋ธ”๋ช… ADD CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด

  6. ์ œ์•ฝ์กฐ๊ฑด ์ œ๊ฑฐ

    1. 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๋ฌธ์„ ํฌํ•จํ•จ
๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ์„ ๋ชฉ์ ์œผ๋กœ ํ•จ\

  1. ์˜๊ตฌ ๋ณ€๊ฒฝ ์ „ ํ™•์ธ + 2) ์—ฐ๊ด€์ž‘์—… ๋™์‹œ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
    ๋ฐ€์ ‘ํžˆ ๊ด€๋ จ๋˜์–ด ๋ถ„๋ฆฌ๋  ์ˆ˜ ์—†๋Š” ํ•œ ๊ฐœ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐ์ž‘
    ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์—๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ SQL ๋ฌธ์žฅ์ด ํฌํ•จ
    ๋ถ„ํ• ํ•  ์ˆ˜ ์—†๋Š” ์ตœ์†Œ์˜ ๋‹จ์œ„ DB๋ฅผ ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒํ•˜๋ฉด ์ž๋™ ์ปค๋ฐ‹, ์•ฑ ๋“ฑ์˜ ์ด์ƒ์œผ๋กœ DB์ ‘์†์ด ๋‹จ์ ˆ๋˜๋ฉด ์ž๋™ ๋กค๋ฐฑ

https://dataonair.or.kr/publishing/img/knowledge/SQL_170.jpg

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๋กœ ํŽธ๋ฆฌํ•˜๊ฒŒ ์—ฌ๋Ÿฌ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Œ

https://dataonair.or.kr/publishing/img/knowledge/SQL_226.jpg

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 ์‚ฌ์šฉ์‹œ)

https://dataonair.or.kr/publishing/img/knowledge/SQL_172.jpg
https://dataonair.or.kr/publishing/img/knowledge/SQL_177.jpg

Fig. 25 LIKE์˜ ์‚ฌ์ „์  ์˜๋ฏธ๋Š” โ€˜~์™€ ๊ฐ™๋‹คโ€™์ด๋‹ค. ๋”ฐ๋ผ์„œ ์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋ผ๋ฉด ๋น„๊ต ์—ฐ์‚ฐ์ž์ธ โ€˜=โ€™์„ ์‚ฌ์šฉํ•ด์„œ ์ž‘์„ฑํ•ด๋„ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋งŒ์•ฝ โ€œ์žฅโ€์”จ ์„ฑ์„ ๊ฐ€์ง„ ์„ ์ˆ˜๋“ค์„ ์กฐํšŒํ•  ๊ฒฝ์šฐ๋Š” ์–ด๋–ป๊ฒŒ ํ• ๊นŒ? ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ LIKE ์—ฐ์‚ฐ์ž์—์„œ๋Š” ์™€์ผ๋“œ์นด๋“œ(WildCard)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์™€์ผ๋“œ์นด๋“œ(WildCard)๋ž€ ํ•œ ๊ฐœ ํ˜น์€ 0๊ฐœ ์ด์ƒ์˜ ๋ฌธ์ž๋ฅผ ๋Œ€์‹ ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ์ด๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ SQL ๋ฌธ์žฅ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ŠคํŠธ๋ง(STRING) ๊ฐ’์œผ๋กœ ์šฉ์ดํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.#

https://dataonair.or.kr/publishing/img/knowledge/SQL_175.jpg

6-1 ๋ถ€๋ถ„ ๋ฒ”์œ„ ์ฒ˜๋ฆฌ#

  1. ROWNUM(oracle) : SQL ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์˜ ๊ฐ ํ–‰์— ์ž„์‹œ๋กœ ๋ถ€์—ฌ๋˜๋Š” ๋ฒˆํ˜ธ, ์กฐ๊ฑด์ ˆ ๋‚ด์—์„œ ํ–‰์˜ ๊ฐœ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•จ

  2. 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 ๋‹จ์ผํ–‰ ํ•จ์ˆ˜#

https://dataonair.or.kr/publishing/img/knowledge/SQL_181.jpg

Fig. 26 ๋‹จ์ผํ–‰ ํ•จ์ˆ˜์˜ ์ค‘์š”ํ•œ ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.#

  • SELECT, WHERE, ORDER BY ์ ˆ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.\

  • ๊ฐ ํ–‰(Row)๋“ค์— ๋Œ€ํ•ด ๊ฐœ๋ณ„์ ์œผ๋กœ ์ž‘์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๊ฐ’๋“ค์„ ์กฐ์ž‘ํ•˜๊ณ , ๊ฐ๊ฐ์˜ ํ–‰์— ๋Œ€ํ•œ ์กฐ์ž‘ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.\

  • ์—ฌ๋Ÿฌ ์ธ์ž(Argument)๋ฅผ ์ž…๋ ฅํ•ด๋„ ๋‹จ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋งŒ ๋ฆฌํ„ดํ•œ๋‹ค.\

  • ํ•จ์ˆ˜์˜ ์ธ์ž(Arguments)๋กœ ์ƒ์ˆ˜, ๋ณ€์ˆ˜, ํ‘œํ˜„์‹์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ , ํ•˜๋‚˜์˜ ์ธ์ˆ˜๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์ง€๋งŒ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์ˆ˜๋ฅผ ๊ฐ€์งˆ ์ˆ˜๋„ ์žˆ๋‹ค. \

  • ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ํ•จ์ˆ˜์˜ ์ธ์ž(Arguments)๋กœ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜์˜ ์ค‘์ฒฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

https://dataonair.or.kr/publishing/img/knowledge/SQL_182.jpg
https://dataonair.or.kr/publishing/img/knowledge/SQL_184.jpg
https://dataonair.or.kr/publishing/img/knowledge/SQL_186.jpg

Fig. 27 DATE ๋ณ€์ˆ˜๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์–ด๋–ป๊ฒŒ ์ €์žฅ๋˜๋Š”์ง€ ์‚ดํŽด๋ณด๋ฉด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋‚ ์งœ๋ฅผ ์ €์žฅํ•  ๋•Œ ๋‚ด๋ถ€์ ์œผ๋กœ ์„ธ๊ธฐ(Century), ๋…„(Year), ์›”(Month), ์ผ(Day), ์‹œ(Hours), ๋ถ„(Minutes), ์ดˆ(Seconds)์™€ ๊ฐ™์€ ์ˆซ์ž ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค. ๋‚ ์งœ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅ์ด ๋˜๊ณ  ๋‚ ์งœ ๊ณ„์‚ฐ์—๋„ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ํŽธ๋ฆฌ์„ฑ์„ ์œ„ํ•ด์„œ ์ˆซ์žํ˜•์œผ๋กœ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋‚ ์งœ๋ฅผ ์ˆซ์ž๋กœ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ง์…ˆ, ๋บ„์…ˆ ๊ฐ™์€ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž๋กœ๋„ ๊ณ„์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฆ‰, ๋‚ ์งœ์— ์ˆซ์ž ์ƒ์ˆ˜๋ฅผ ๋”ํ•˜๊ฑฐ๋‚˜ ๋บ„ ์ˆ˜ ์žˆ๋‹ค.#

https://dataonair.or.kr/publishing/img/knowledge/SQL_189.jpg

Fig. 28 ๋ฒคํ„ฐ์˜ ๊ณ ์œ ํ•ญ๋ชฉ์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์•”๊ธฐ๊ฐ€ ๋”ฐ๋กœ ํ•„์š”ํ•˜๋‹ค.#

https://dataonair.or.kr/publishing/img/knowledge/SQL_192.jpg

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

https://dataonair.or.kr/publishing/img/knowledge/SQL_190.jpg

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์ ˆ์—์„œ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ์„ค๋ช…์ด ๋“ค์–ด๊ฐˆ ๊ฒƒ์ด๊ณ  ์—ฌ๊ธฐ์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ์ง‘๊ณ„ ํ•จ์ˆ˜๋“ค์„ ์šฐ์„ ์ ์œผ๋กœ ๋‹ค๋ฃจ๊ฒŒ ๋œ๋‹ค.

https://dataonair.or.kr/publishing/img/knowledge/SQL_193.jpg

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 ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ์กฐ์ธ