๊ฐœ์ธ๊ณต๋ถ€/SQL

46. SQLD 2๊ณผ๋ชฉ (1)SQL๊ธฐ๋ณธ

LEE_BOMB 2021. 11. 7. 22:39

์šฉ์–ด
DB : ํŠน์ • ๊ธฐ์—…์ด๋‚˜ ์กฐ์ง ๋˜๋Š” ๊ฐœ์ธ์ด ํ•„์š”์— ์˜ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์ •ํ•œ ํ˜•ํƒœ๋กœ ์ €์žฅํ•ด ๋†“์€ ๊ฒƒ
DBMS : ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ์‚ฌ๊ฑด์œผ๋กœ ์ธํ•œ ๋ฐ์ดํ„ฐ์˜ ์†์ƒ์„ ํ”ผํ•˜๊ณ , ํ•„์š”์‹œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์˜ SW
SQL : ๊ด€๊ณ„ํ˜• DB์—์„œ ๋ฐ์ดํ„ฐ ์ •์˜, ์กฐ์ž‘, ์ œ์–ด๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด

ํ…Œ์ด๋ธ” : DB ๊ธฐ๋ณธ ๋‹จ์œ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฐ์ฒด
๊ฐ€๋กœ : ํ–‰ = ๋กœ์šฐ = ํŠœํ”Œ = ์ธ์Šคํ„ด์Šค
์„ธ๋กœ : ์—ด = ์ปฌ๋Ÿผ


๋ช…๋ น์–ด

DML (Manipulation : ์กฐ์ž‘์–ด) SELECT, INSERT, DELETE, UPDATE
DDL (Definition : ์ •์˜์–ด) CREATE, ALTER, MODIFY, DROP, RENAME, TRUNCATE
DCL (Control : ์ œ์–ด์–ด) GRANT, REVOKE
TCL (ํŠธ๋žœ์žญ์…˜ ์ œ์–ด์–ด) ROLLBACK, COMMIT



PKํ‚ค ์„ค์ •
ํ…Œ์ด๋ธ”์ƒ์„ฑ ๋•Œ ์ง€์ • : CONSTRAINT ์ด๋ฆ„ PRIMARY KEY (์นผ๋Ÿผ1, ์นผ๋Ÿผ2..)
ํ…Œ์ด๋ธ”์ƒ์„ฑ ์ดํ›„ ์ง€์ • : ALTER TABLE ํ…Œ์ด๋ธ”๋ช… ADD CONSTRAINT ์ด๋ฆ„ PRIMARY KEY (์นผ๋Ÿผ1, ์นผ๋Ÿผ2..)


DDL
CHAR(s) : ๊ณ ์ • ๊ธธ์ด. ๋ฌธ์ž์—ด ์ •๋ณด ์ตœ๋Œ€ ๊ธธ์ด ๋งŒํผ ๊ณต๊ฐ„ ์ฑ„์›€
VARCHAR2(s) : ๊ฐ€๋ณ€ ๊ธธ์ด. ๋ฌธ์ž์—ด ์ •๋ณด ํ• ๋‹น๋œ ๋ณ€์ˆ˜ ๊ฐ’์˜ ๋ฐ”์ดํŠธ๋งŒ ์ ์šฉ
NUMBER : ์ •์ˆ˜, ์‹ค์ˆ˜ ๋“ฑ ์ˆซ์ž ์ •๋ณด
DATE : ๋‚ ์งœ์™€ ์‹œ๊ฐ ์ •๋ณด

ํ…Œ์ด๋ธ” ๋ช…์€ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„๊ณผ ์ค‘๋ณต๋˜๋ฉด ์•ˆ ๋œ๋‹ค.
ํ…Œ์ด๋ธ” ๋‚ด์˜ ์นผ๋Ÿผ๋ช…์€ ์ค‘๋ณต๋  ์ˆ˜ ์—†๋‹ค.
๊ฐ ์นผ๋Ÿผ๋“ค์€ ,๋กœ ๊ตฌ๋ถ„๋˜๊ณ  ;๋กœ ๋๋‚œ๋‹ค
์นผ๋Ÿผ ๋’ค์— ๋ฐ์ดํ„ฐ ์œ ํ˜•์€ ๊ผญ ์ง€์ •๋˜์–ด์•ผ ํ•œ๋‹ค.
ํ…Œ์ด๋ธ”๋ช…๊ณผ ์นผ๋Ÿผ๋ช…์€ ๋ฐ˜๋“œ์‹œ ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผํ•œ๋‹ค.
A-Z,a-z,0-9,_,$,#๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ


โ˜… ์ œ์•ฝ์กฐ๊ฑด Constraint : ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ ์œ ์ง€

NOT NULL ์นผ๋Ÿผ์— NULL๊ฐ’์ด ํฌํ•จ๋˜์ง€ ๋ชปํ•œ๋‹ค
UNIQUE KEY (๊ณ ์œ ํ‚ค) ์นผ๋Ÿผ ๊ฐ’์ด ํ•ด๋‹น ํ…Œ์ด๋ธ” ์ „์ฒด์—์„œ ์œ ์ผ
PRIMARY KEY (๊ธฐ๋ณธํ‚ค) UNIQUE + NOT NULL. ํ•˜๋‚˜๋งŒ ์žˆ๋‹ค (๋Œ€ํ‘œ)
FOREIGN KEY (์™ธ๋ž˜ํ‚ค) NULL๊ณผ ์—ฌ๋Ÿฌ์†์„ฑ ๊ฐ€๋Šฅ
CHECK ํ•ด๋‹น ์กฐ๊ฑด ๋งŒ์กฑํ•˜๋Š” ๊ฐ’์œผ๋กœ๋งŒ ์ž…๋ ฅ ์ œํ•œ



์ฐธ์กฐ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด
โ‘  ์‚ญ์ œ๊ทœ์น™

CASCADE : Master์‚ญ์ œ ์‹œ Child ๊ฐ™์ด ์‚ญ์ œ
SET NULL : Master์‚ญ์ œ ์‹œ Child ํ•ด๋‹น ํ•„๋“œ NULL
SET DEFAULT : Master ์‚ญ์ œ ์‹œ Child ํ•ด๋‹น ํ•„๋“œ Default๊ฐ’์œผ๋กœ ์„ค์ •RESTRICT : Child ํ…Œ์ด๋ธ”์— PK๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ๋งŒ Master ์‚ญ์ œ ํ—ˆ์šฉ
NO ACTION : ์ฐธ์กฐ๋ฌด๊ฒฐ์„ฑ์„ ์œ„๋ฐ˜ํ•˜๋Š” ์‚ญ์ œ/์ˆ˜์ • ์•ก์…˜ ์ทจํ•˜์ง€ ์•Š์Œ

โ‘ก ์ƒ์„ฑ๊ทœ์น™
AUTOMATIC : Master ํ…Œ์ด๋ธ”์— PK์—†๋Š” ๊ฒฝ์šฐ, Master PK์ƒ์„ฑ ํ›„ Child ์ž…๋ ฅ
SET NULL : Master ํ…Œ์ด๋ธ”์— PK์—†๋Š” ๊ฒฝ์šฐ, Child ์™ธ๋ถ€ํ‚ค๋ฅผ NULL๊ฐ’์œผ๋กœ ์ฒ˜๋ฆฌ
SET DEFAULT : Master ํ…Œ์ด๋ธ”์— PK์—†๋Š” ๊ฒฝ์šฐ, Child ์™ธ๋ถ€ํ‚ค๋ฅผ ์ง€์ •๋œ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ž…๋ ฅ
DEPENDENT : Master ํ…Œ์ด๋ธ”์— PK๊ฐ€ ์กด์žฌํ• ๋•Œ๋งŒ Child์ž…๋ ฅ ํ—ˆ์šฉ
NO ACTION : ์ฐธ์กฐ๋ฌด๊ฒฐ์„ฑ์„ ์œ„๋ฐ˜ํ•˜๋Š” ์‚ญ์ œ/์ˆ˜์ • ์•ก์…˜ ์ทจํ•˜์ง€ ์•Š์Œ


ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๊ณต์‹
CREATE TABLE player (player_id CHAER(7) NOT NULL, player_name VARCHAR2(20) NOT NULL);

ํ…Œ์ด๋ธ” ๊ตฌ์กฐ ๋ณ€๊ฒฝ ๊ณต์‹
์ถ”๊ฐ€ : ALTER TABLE player ADD(adress VARCHAR2(80));
์‚ญ์ œ : ALTER TABLE player DROP COLUMN adress;
์ˆ˜์ • : ALTER TABLE temp_temp MODIFY (ORIG_YYYY VARCHAR2(8) DEFAULT '20020129' NOT NULL);
* SQL Server์—์„œ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์นผ๋Ÿผ ๋™์‹œ ์ˆ˜์ • ๋ถˆ๊ฐ€ (์˜ค๋ฅ˜๋ฐœ์ƒ)


์ œ์•ฝ์กฐ๊ฑด ์ˆ˜์ •
์ถ”๊ฐ€ : ADD CONSTRAINT ์กฐ๊ฑด๋ช…;
์‚ญ์ œ : DROP CONSTRAINT ์กฐ๊ฑด๋ช… ์กฐ๊ฑด (์นผ๋Ÿผ๋ช…);
ํ…Œ์ด๋ธ”๋ช… ๋ณ€๊ฒฝ : RENAME player TO player_backup;
ํ…Œ์ด๋ธ” ์‚ญ์ œ : DROP TABLE player;
ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์‚ญ์ œ : TRUNCATE TABLE player;
์นผ๋Ÿผ๋ช… ๋ณ€๊ฒฝ : RENAME COLUMN team_id TO t_id;

TRUNCATE DROP DELETE
DDL DDL DML
๋ฐ์ดํ„ฐ, ์ธ๋ฑ์Šค ์‚ญ์ œ
(ํ…Œ์ด๋ธ” ์ตœ์ดˆ ์ƒ์„ฑ ์ดˆ๊ธฐ์ƒํƒœ๋กœ ๋งŒ๋“ฌ)
ํ…Œ์ด๋ธ”, ์ธ๋ฑ์Šค ์‚ญ์ œ
(ํ…Œ์ด๋ธ” ๊ตฌ์กฐ ์ž์ฒด ์‚ญ์ œ)
๋ฐ์ดํ„ฐ๋งŒ ์‚ญ์ œ
๊ตฌ์กฐ ๋‚จ๋Š”๋‹ค ๊ตฌ์กฐ ์‚ญ์ œ ๊ตฌ์กฐ, ๋กœ๊ทธ ๋‚จ๋Š”๋‹ค
์‚ฌ์šฉ๊ณต๊ฐ„ ๋ฐ˜๋‚ฉ ์‚ฌ์šฉ๊ณต๊ฐ„ ๋ฐ˜๋‚ฉ ์‚ฌ์šฉ๊ณต๊ฐ„ ๋‚จ์•„์žˆ์Œ
Auto COMMIT Auto COMMIT COMMIT์ด์ „ ROLLBACK ๊ฐ€๋Šฅ






DML
* DDL ๋ช…๋ น์–ด์˜ ๊ฒฝ์šฐ ์‹คํ–‰์‹œ AUTO COMMIT, ํ•˜์ง€๋งŒ DML์˜ ๊ฒฝ์šฐ COMMIT์„ ์ž…๋ ฅํ•ด์•ผ ํ•œ๋‹ค.
INSERT, UPDATE, DELETE : ROLLBACK, COMMIT(TCL) ๊ฐ€๋Šฅ
MERGE : insert, update, delete๋ฅผ ํ•œ๋ฒˆ์— ์ˆ˜ํ–‰ํ•˜๋Š” ๋ช…๋ น์–ด
MERGE INTO ํ…Œ์ด๋ธ”๋ช… USING ํ…Œ์ด๋ธ”๋ช…2 ON ์กฐ๊ฑด WHEN MATCHED THEN UPDATE SET ๋ณ€๊ฒฝ๋‚ด์šฉ

DISTINCT
์ค‘๋ณต ์‹œ 1ํšŒ๋งŒ ์ถœ๋ ฅ
DISTINCT (dept, mgr) : ๊ด„ํ˜ธ ์•ˆ์— ๋Œ€ํ•ด ์ง‘์•ฝ. GROUPBY(dept, mgr)์™€ ๋™์ผ

์™€์ผ๋“œ์นด๋“œ
* : ๋ชจ๋“ 
% : ๋ชจ๋“ 
- : ํ•œ ๊ธ€์ž





TCL
COMMIT : ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ฐ˜์˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ DB์— ๋ฐ˜์˜
ROLLBACK : ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘ ์ด์ „์˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆผ COMMIT ๋˜์ง€ ์•Š์€ ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜์„ ๋กค๋ฐฑ
SAVEPOINT : ์ €์žฅ ์ง€์ 

auto commit : INSERT, UPDATE, DELETE ๋˜๋Š” PL/SQL ๋ธ”๋ก์ด ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋  ๋•Œ ์ž๋™์œผ๋กœ ์ปค๋ฐ‹์ด ์ด๋ฃจ์–ด์ง€๊ฒŒ ํ•  ๊ฒƒ์ธ๊ฐ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ
begin transaction : ๊ฒ€์ฆ ์ฟผ๋ฆฌ์ด๋ฉด COMMIT์œผ๋กœ ๋‚ด์šฉ ๋ฐ˜์˜, ์‹ค์ˆ˜ ์ฟผ๋ฆฌ์ด๋ฉด ROLLBACK์œผ๋กœ ์œ ์ง€


ํŠธ๋žœ์žญ์…˜์ด๋ž€?
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋…ผ๋ฆฌ์  ์—ฐ์‚ฐ๋‹จ์œ„
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณ€ํ™”์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์˜ ๋‹จ์œ„
์งˆ์˜์–ด(SQL)๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ

ํŠธ๋žœ์žญ์…˜์˜ ํŠน์„ฑ
1. ์›์ž์„ฑ : ํŠธ๋žœ์žญ์…˜์—์„œ ์ •์˜๋œ ์—ฐ์‚ฐ๋“ค์€ ๋ชจ๋‘ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋˜๋˜์ง€ ์•„๋‹ˆ๋ฉด ์ „ํ˜€ ์‹คํ–‰๋˜์ง€ ์•Š์•„์•ผ ํ•จ
2. ์ผ๊ด€์„ฑ : DB ํŠธ๋žœ์žญ์…˜ ์‹คํ–‰ ์ „ ๋‚ด์šฉ์ด ์ž˜๋ชป ๋˜์ง€ ์•Š์œผ๋ฉด ์‹คํ–‰ ํ›„๋„ ์ž˜๋ชป๋˜์ง€ ์•Š์•„์•ผ ํ•จ
3. ๊ณ ๋ฆฝ์„ฑ : ํŠธ๋žœ์žญ์…˜ ์‹คํ–‰ ๋„์ค‘ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์˜ ์˜ํ–ฅ์„ ๋ฐ›์•„ ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค
4. ์ง€์†์„ฑ : ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋ฉด DB์˜ ๋‚ด์šฉ์€ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ

ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฉ๋ฆฌ์„ฑ ๋ฌธ์ œ
1. Dirty Read : ๋ฐ์ดํ„ฐ ์บ์‹œ์—๋Š” ๋ณ€๊ฒฝ์ด ๋˜์—ˆ์ง€๋งŒ, ๋””์Šคํฌ์—๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ์ž‘์—…
2. Non-Repeatable Read : ํŠธ๋žœ์žญ์…˜ ๋‚ด ๋‹ค๋ฅธ ์‹œ์ ์— ์ฝ์€ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ’์ด ๋‹ค๋ฅธ ๊ฒƒ
3. Phantom Read : ํŠธ๋žœ์žญ์…˜ ์ˆ˜ํ–‰ ์ค‘ ์—†๋˜ ํ–‰์ด ์ถ”๊ฐ€๋˜์–ด ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฒŒ ๋˜๊ฑฐ๋‚˜ ์กด์žฌํ•˜๋˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ๊ฒƒ, ํŠธ๋žœ์žญ์…˜ ๋‚ด ๋™์ผํ•œ ์กฐ๊ฑด์œผ๋กœ ์ฝ์€ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ๊ฒƒ






๋…ผ๋ฆฌ์—ฐ์‚ฐ์ž
AND : ๋‘˜ ๋‹ค ๋งŒ์กฑ
OR : ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑ (=IN)
NOT : ๋‘˜ ๋‹ค ์•„๋‹ˆ๋‹ค

โ˜… NOT - AND - OR (๋‚˜์˜ค) ์ˆœ์œผ๋กœ ์—ฐ์‚ฐ ์‹คํ–‰
ex) NOT (์กฐ๊ฑด) AND (์กฐ๊ฑด) AND NOT (์กฐ๊ฑด) OR (์กฐ๊ฑด)์ผ ๋•Œ
NOT (์กฐ๊ฑด)๊ณผ NOT (์กฐ๊ฑด) ๊ฐ๊ฐ ์‹คํ–‰ > AND AND ํ•œ๋ฒˆ์— ์‹คํ–‰ > ๋งˆ์ง€๋ง‰์— OR (์กฐ๊ฑด) ์‹คํ–‰

BETWEEN 1 AND 2 : 1 โ‰ค A โ‰ค 2
A IN (1, 2, 3) : A = 1 or A = 2 or A = 3

โ˜…LIKE
_ : ๋ฏธ์ง€์˜ ํ•œ ๊ธ€์ž
% : 0 ์ด์ƒ์˜ ๊ธ€์ž
ex) _L% : ์ด๋ฆ„์˜ ๋‘ ๋ฒˆ์งธ ๊ธ€์ž๊ฐ€ L์ธ ์‚ฌ์›

ESCAPE
LIKE ์—ฐ์‚ฐ์œผ๋กœ '%'๋‚˜ '_'๊ฐ€ ๋“ค์–ด๊ฐ„ ๋ฌธ์ž๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. '_'๋‚˜ '%'์•ž์— ESCAPE๋กœ ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ์ง€์ •.
ex) ename LIKE 'A_A' -> A@_A
@๋ง๊ณ ๋„ ์•„๋ฌด ๋ฌธ์ž๋‚˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

โ˜…NULL
โ‘  ๋ชจ๋ฅด๋Š” ๊ฐ’
โ‘ก NULL์˜ ์‚ฐ์ˆ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋Š” ์•Œ ์ˆ˜ ์—†์Œ(UNKOWN)
โ‘ข NULL์˜ ๋น„๊ต์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋Š” FALSE
โ‘ฃ ์ •๋ ฌ ์ƒ ์˜๋ฏธ๊ฐ€ Oracle์—์„œ๋Š” โˆž SQL Sever์—์„œ๋Š” -โˆž

nVL (๊ฐ’1, ๊ฐ’2) : ๊ฐ’1์ด NULL๋ฉด ๊ฐ’2
nVL2 (๊ฐ’1, ๊ฐ’2, ๊ฐ’3) : ๊ฐ’1์ด NULL์ด๋ฉด ๊ฐ’3, NOT NULL์ด๋ฉด ๊ฐ’2
IS NULL (๊ฐ’1, ๊ฐ’2) : nVL๊ณผ ๋™์ผ
NULL IF (๊ฐ’1, ๊ฐ’2) : ๊ฐ’1 = ๊ฐ’2 ์ด๋ฉด NULL, ๊ฐ’1 โ‰  ๊ฐ’2 ์ด๋ฉด ์ฒซ๋ฒˆ์งธ ๊ฐ’
COALESCE (๊ฐ’1, ๊ฐ’2... ) : NULL ์•„๋‹Œ ์ฒซ๋ฒˆ์งธ ๊ฐ’

* ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„ : ()->NOT-> ->AND->OR

ROWNUM
Oracle
์ง‘ํ•ฉ์˜ ๊ฐ ํ–‰์— ๋Œ€ํ•ด ์ž„์‹œ๋กœ ๋ถ€์—ฌ๋˜๋Š” ์ผ๋ จ๋ฒˆํ˜ธ. ์ƒ์œ„ n๊ฐœ ํ–‰์„ ๊ฐ€์ ธ์˜จ๋‹ค.
WHERE์ ˆ์—์„œ ํ–‰์˜ ๊ฐœ์ˆ˜ ์ œํ•œ
ex) SELECT empno, sal FROM emp WHERE ROWNUM โ‰ค 3 ORDER BY sal, desc์ผ ๋•Œ, ORDER BY์…€์ด ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋‚˜์˜จ๋‹ค.
์ •๋ ฌ ์ „์— ROWNUM ์กฐ๊ฑด์ ˆ ์‹คํ–‰ > ROWNUM์— ์˜ํ•ด ์ถœ๋ ฅ๋œ ๊ฒฐ๊ณผ๋งŒ ORDER BY๋กœ ์ •๋ ฌ

TOP(n) ์นผ๋Ÿผ๋ช…
SQL Server
SELECT์ ˆ์—์„œ ์ƒ์œ„ n๊ฐœ ํ–‰์„ ๊ฐ€์ ธ์˜จ๋‹ค
TOP(n) WITH TIES : ORDER BY์ ˆ ๋’ค์˜ ์˜ค๋Š” ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ํ•จ๊ป˜ ์ถœ๋ ฅ
ex) SELECT TOP 3 WITH TIES * FROM emp ORDER BY sal DESC;




๋‹จ์ผํ–‰ ํ•จ์ˆ˜
1. SELECT, WHERE, ORDER BY ์ ˆ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
2. ํ–‰์— ๊ฐœ๋ณ„์  ์กฐ์ž‘
3. ์—ฌ๋Ÿฌ ์ธ์ž๊ฐ€ ์žˆ์–ด๋„ ๊ฒฐ๊ณผ๋Š” 1๊ฐœ๋งŒ ์ถœ๋ ฅ
4. ํ•จ์ˆ˜ ์ธ์ž์— ์ƒ์ˆ˜ ๋ณ€์ˆ˜ ํ‘œํ˜„์‹ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
5. ํ•จ์ˆ˜ ์ค‘์ฒฉ ๊ฐ€๋Šฅ


๋ฌธ์žํ˜• ํ•จ์ˆ˜
UPPER : ๋Œ€๋ฌธ์ž ๋ณ€๊ฒฝ
LOWER : ์†Œ๋ฌธ์ž ๋ณ€๊ฒฝ

ASCII : ASCII ๋ฌธ์ž์˜ ๊ฐ’ ๋ฐ˜ํ™˜
CHR : ASCII ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์ž ๋ฐ˜ํ™˜

CONCAT (์ธ์ˆ˜๊ฐ€ ๋ฌด์กฐ๊ฑด 2๊ฐœ) : ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ
+ : SQL Server
|| : Oracle

LPAD(๊ฐ’, ์ด ๋ฌธ์ž๊ธธ์ด, ์ฑ„์›€๋ฌธ์ž) : ์™ผ์ชฝ๋ถ€ํ„ฐ ์ง€์ •ํ•œ ๋ฌธ์ž๋กœ ์ฑ„์šฐ๊ธฐ
RPAD(๊ฐ’, ์ด ๋ฌธ์ž๊ธธ์ด, ์ฑ„์›€๋ฌธ์ž) : ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ ์ง€์ •ํ•œ ๋ฌธ์ž๋กœ ์ฑ„์šฐ๊ธฐ
* ์ฑ„์›€๋ฌธ์ž ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ณต๋ฐฑ์œผ๋กœ ๋‚จ๊ฒŒ๋จ

LTRIM(๋Œ€์ƒ๋ฌธ์ž์—ด, ์ œ๊ฑฐ๋ฌธ์ž์—ด) : ๋ฌธ์ž์—ด์˜ ์™ผ์ชฝ ๊ณต๋ฐฑ ์ œ๊ฑฐ, ๋ฌธ์ž ์™ผ์ชฝ ๋ฐ˜๋ณต์ ์ธ ๋ฌธ์ž ์ œ๊ฑฐ
RTRIM(๋Œ€์ƒ๋ฌธ์ž์—ด, ์ œ๊ฑฐ๋ฌธ์ž์—ด) : ๋ฌธ์ž์—ด์˜ ์˜ค๋ฅธ์ชฝ ๊ณต๋ฐฑ ์ œ๊ฑฐ, ๋ฌธ์ž ์˜ค๋ฅธ์ชฝ ๋ฐ˜๋ณต์ ์ธ ๋ฌธ์ž ์ œ๊ฑฐ
* ์ œ๊ฑฐ ๋ฌธ์ž์—ด ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ณต๋ฐฑ ์ œ๊ฑฐ

SUBSTR(๋ฌธ์ž์—ด, ์‹œ์ž‘์œ„์น˜, ๊ธธ์ด) : ๋ฌธ์ž๋‹จ์œ„๋กœ ์‹œ์ž‘์œ„์น˜์™€ ์ž๋ฅผ ๊ธธ์ด๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ์ž๋ฅธ๋‹ค
INSTR(์ฐพ์„ ๋Œ€์ƒ, ๊ฒ€์ƒ‰ ๋ฌธ์ž์—ด) : ์ง€์ • ๋ฌธ์ž์—ด์„ ๊ฒ€์ƒ‰ํ•ด์„œ ์œ„์น˜๋ฅผ ์ฐพ์•„ ๋ฆฌํ„ด. ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์ด ์ผ์น˜ํ•˜๋ฉด ๊ทธ ์ฒซ๋ฒˆ์งธ ์ธ๋ฑ์Šค๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ์—†์œผ๋ฉด 0์„ ๋ฐ˜ํ™˜


์ˆซ์žํ˜• ํ•จ์ˆ˜
SIGN(์ˆซ์ž) : ์ˆซ์ž๊ฐ€ ์–‘์ˆ˜๋ฉด 1, ์Œ์ˆ˜๋ฉด -1, 0์ด๋ฉด 0 ๋ฐ˜ํ™˜
MOD( 1, 2) : ์ˆซ์ž 1์„ ์ˆซ์ž 2๋กœ ๋‚˜๋ˆ„์–ด ๋‚˜๋จธ์ง€ ๋ฐ˜ํ™˜
ROUND (์ธ์ˆ˜) : (์ธ์ˆ˜) ๋งŒํผ ์ž๋ฆฟ์ˆ˜ ๋ฐ˜์˜ฌ๋ฆผ
CEIL : Oracle์—์„œ ๊ฐ€์žฅ ๊ฐ€๊น๊ณ  ๋†’์€ ์ •์ˆ˜๋กœ ์˜ฌ๋ฆผ ex) 6.2 -> 7
CEILING : SQL Sever์—์„œ ๊ฐ€์žฅ ๊ฐ€๊น๊ณ  ๋†’์€ ์ •์ˆ˜๋กœ ์˜ฌ๋ฆผ
FLOOR (์ˆซ์ž) : ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ตœ๋Œ€ ์ •์ˆ˜ ๋ฆฌํ„ด


๋‚ ์งœํ˜• ํ•จ์ˆ˜
TO_CHAR : ๋ฌธ์žํ˜•
TO_DATE : ์ˆซ์žํ˜•

SYSDATE : Oracle. ํ˜„์žฌ ๋‚ ์งœ์™€ ์‹œ๊ฐ ์ถœ๋ ฅ
GETDATE : SQL Sever. ํ˜„์žฌ ๋‚ ์งœ์™€ ์‹œ๊ฐ ์ถœ๋ ฅ

* ๋‚ ์งœdata + 100 = 100์ผ ์ดํ›„ (day๋กœ ์ธ์‹)
ex) 1 = , 1/24 = 1 , 1/24/60 = 1 ํ•˜๋ฃจ ์‹œ๊ฐ„ ๋ถ„
[์˜ˆ์ œ] ๋‹ค์Œ ์ค‘ ๋ฌธ์ž์—ด์˜ ํ˜•๋ณ€ํ™˜์„ ์ผ์œผํ‚ค๋Š” ํ•จ์ˆ˜๋Š”?


NULL ํ•จ์ˆ˜ (NULL์€ 0์ด๋‚˜ ๊ณต๋ฐฑ์ด ์•„๋‹˜)
NVL(์‹1,์‹ 2) : ์‹1์˜ ๊ฐ’์ด NULL์ด๋ฉด ์‹2 ์ถœ๋ ฅ. ๊ณต์ง‘ํ•ฉ์„ ๋ฐ”๊ฟ”์ฃผ์ง„ ์•Š์Œ
NULLIF(์‹1,์‹ 2) : ์‹1์ด ์‹2์™€ ๊ฐ™์œผ๋ฉด NULL์„, ์•„๋‹ˆ๋ฉด ์‹1 ์ถœ๋ ฅ
COALESCE(์‹1,์‹ 2) : NULL์ด ์•„๋‹Œ ์ตœ์ดˆ์˜ ํ‘œํ˜„์‹. ๋ชจ๋‘ NULL์ด๋ฉด NULL๋ฐ˜ํ™˜


๋‹ค์ค‘ํ–‰ ์ง‘๊ณ„ ํ•จ์ˆ˜
1. ์—ฌ๋Ÿฌ ํ–‰๋“ค์˜ ๊ทธ๋ฃน์ด ๋ชจ์—ฌ์„œ ๊ทธ๋ฃน๋‹น ๋‹จ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋ฅผ ๋Œ๋ ค์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค.
2. GROUP BY ์ ˆ์€ ํ–‰๋“ค์„ ์†Œ๊ทธ๋ฃนํ™” ํ•œ๋‹ค.
3. SELECT, HAVING, ORDER BY ์ ˆ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅ
- ALL : Default์˜ต์…˜ ์ƒ๋žต ๊ฐ€๋Šฅ
- DISTINCT : ๊ฐ™์€ ๊ฐ’์„ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋กœ ๊ฐ„์ฃผํ•˜๋Š” ์˜ต์…˜

NULL๊ณผ์˜ ๊ด€๊ณ„
COUNT(*) : NULL ๊ฐ’์„ ํฌํ•จํ•œ ํ–‰์˜ ์ˆ˜ * ์กฐ๊ฑด์ ˆ์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์„ ๋•Œ COUNT(*)์˜ ๊ฒฐ๊ณผ ๊ฐ’์€ 0
COUNT(ํ‘œํ˜„์‹) : ํ‘œํ˜„์‹์˜ ๊ฐ’์ด NULL ๊ฐ’์ธ ๊ฒƒ์„ ์ œ์™ธํ•œ ํ–‰์˜ ์ˆ˜
SUM() : NULL ๊ฐ’์„ ์ œ์™ธํ•œ ํ•ฉ๊ณ„
AVG() : NULL ๊ฐ’์„ ์ œ์™ธํ•œ ํ‰๊ท 
STDDEV : ํ‘œ์ค€ ํŽธ์ฐจ
VARIAN : ๋ถ„์‚ฐ
MAX, MIN : ์ตœ๋Œ€๊ฐ’ ์ตœ์†Œ๊ฐ’

ex)

A B C A+B+C
NULL NULL 1 NULL
3 2 2 7
NULL 2 3 NULL

์ผ ๋•Œ, SUM(A) = 3, SUM(B) = 4, COUNT(A) = 1, COUNT(*) = 3
[๋ฌธ์ œ] SUM(A+B+C) = ? [์ •๋‹ต] 7
SUM(A) + SUM(B) = ? [์ •๋‹ต] NULL


GROUP BY, HAVING ์ ˆ์˜ ํŠน์ง•
1. GROUP BY์ ˆ์„ ํ†ตํ•ด ์†Œ๊ทธ๋ฃน๋ณ„ ๊ธฐ์ค€์„ ์ •ํ•œ ํ›„, SELECT์ ˆ์— ์ง‘๊ณ„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
2. ์ง‘๊ณ„ ํ•จ์ˆ˜์˜ ํ†ต๊ณ„ ์ •๋ณด๋Š” NULL๊ฐ’์„ ๊ฐ€์ง„ ํ–‰์„ ์ œ์™ธํ•˜๊ณ  ์ˆ˜ํ–‰ํ•œ๋‹ค.
3. GROUP BY ALIAS ์ ˆ์—์„œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€
4. ์ง‘๊ณ„ ํ•จ์ˆ˜๋Š” WHERE์ ˆ์— ์˜ฌ ์ˆ˜ ์—†๋‹ค.
5. HAVING์ ˆ์—๋Š” ์ง‘๊ณ„ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์กฐ๊ฑด ํ‘œ์‹œ ๊ฐ€๋Šฅ
6. HAVING GROUP BY์ ˆ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋’ค์— ์œ„์น˜


DECODE / CASE
DECODE(A, B, '1', null) : A ๊ฐ€ B ์ผ ๊ฒฝ์šฐ '1'์„, ์•„๋‹ ๊ฒฝ์šฐ null(์ƒ๋žต ๊ฐ€๋Šฅ)
DECODE(A, B, '1', C, '2', '3') : A ๊ฐ€ B ์ผ ๊ฒฝ์šฐ '1'์„, A ๊ฐ€ C ์ผ ๊ฒฝ์šฐ '2', ๋‘˜ ๋‹ค ์•„๋‹ ๊ฒฝ์šฐ '3'
* DECODE ํ•จ์ˆ˜๋Š” ๋Œ€์†Œ๋น„๊ต(<, >, =) ๋ถˆ๊ฐ€

CASE ์นผ๋Ÿผ WHEN 1 THEN 'a' ELSE 'b' END : ์นผ๋Ÿผ๊ฐ’=1์ด๋ฉด a, ์•„๋‹ˆ๋ฉด b
CASE WHEN ์นผ๋Ÿผ = 1 THEN 'a' ELSE 'b' END : ์นผ๋Ÿผ๊ฐ’=1์ด๋ฉด a, ์•„๋‹ˆ๋ฉด b
* ELSE์—†์œผ๋ฉด NULL



ORDER BY
1. SQL ๋ฌธ์žฅ์œผ๋กœ ์กฐํšŒ๋œ ๋ฐ์ดํ„ฐ๋“ค์„ ๋‹ค์–‘ํ•œ ๋ชฉ์ ์— ๋งž๊ฒŒ ํŠน์ •ํ•œ ์นผ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ์ถœ๋ ฅํ•˜๋Š”๋ฐ ์‚ฌ์šฉ
2. ORDER BY ALIAS์ ˆ์— ์นผ๋Ÿผ๋ช… ๋Œ€์‹  ๋ช…์ด๋‚˜ ์นผ๋Ÿผ ์ˆœ์„œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
3. DEFAULT๊ฐ’์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ(ASC)์ด ์ ์šฉ๋˜๋ฉฐ DESC ์˜ต์…˜์„ ํ†ตํ•ด ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ ๊ฐ€๋Šฅ
4. SQL ๋ฌธ์žฅ์˜ ์ œ์ผ ๋งˆ์ง€๋ง‰์— ์œ„์น˜
5. SELECT ์ ˆ์—์„œ ์ •์˜ํ•˜์ง€ ์•Š์€ ์นผ๋Ÿผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
* Oracle์—์„œ๋Š” NULL์„ ๊ฐ€์žฅ ํฐ ๊ฐ’์œผ๋กœ ์ทจ๊ธ‰ํ•˜๋ฉฐ, SQL Server์—์„œ๋Š” NULL์„ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์œผ๋กœ ์ทจ๊ธ‰ํ•œ๋‹ค


SEELCT
๋ฌธ์žฅ์‹คํ–‰ ์ˆœ์„œ : FROM > WHERE > GROUPBY > HAVING > SELECT > ORDERBY





JOIN
๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”๋“ค์„ ์—ฐ๊ฒฐ ๋˜๋Š” ๊ฒฐํ•ฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅ
์ผ๋ฐ˜์ ์œผ๋กœ ํ–‰๋“ค์€ PK๋‚˜ FK ๊ฐ’์˜ ์—ฐ๊ด€์— ์˜ํ•ด JOIN์ด ์„ฑ๋ฆฝ
์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” PK, FK ๊ด€๊ณ„๊ฐ€ ์—†์–ด๋„ ๋…ผ๋ฆฌ์ ์ธ ๊ฐ’๋“ค์˜ ์—ฐ๊ด€๋งŒ์œผ๋กœ ์ด JOIN ์„ฑ๋ฆฝ ๊ฐ€๋Šฅ
5๊ฐ€์ง€ ํ…Œ์ด๋ธ”์„ JOINํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ตœ์†Œ 4๋ฒˆ์˜ JOIN๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค. (N-1)

EQUI JOIN
2๊ฐœ์˜ ํ…Œ์ด๋ธ” ๊ฐ„์— ์นผ๋Ÿผ ๊ฐ’๋“ค์ด ์„œ๋กœ ์ •ํ™•ํ•˜๊ฒŒ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ
๋Œ€๋ถ€๋ถ„ PK, FK ๊ด€๊ณ„๋ฅผ ๊ธฐ๋ฐ˜
์ปฌ๋Ÿผ๋ช… ์•ž์— ํ…Œ์ด๋ธ” ๋ช…์„ ๊ธฐ์ˆ ํ•ด์ค˜์•ผ ํ•จ

NON EQUI JOIN
2๊ฐœ์˜ ํ…Œ์ด๋ธ” ๊ฐ„์— ์นผ๋Ÿผ ๊ฐ’๋“ค์ด ์„œ๋กœ ์ •ํ™•ํ•˜๊ฒŒ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ
โ€˜=โ€™ ์—ฐ์‚ฐ์ž๊ฐ€ ์•„๋‹Œ BETWEEN, >, <= ๋“ฑ ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ

โ‘  NATURAL JOIN : ์ค‘๋ณต ์นผ๋Ÿผ์„ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉ, ์ œ์ผ ์•ž์— ๋“ฑ์žฅ, ๋ณ„์นญ ์‚ฌ์šฉ ๋ถˆ๊ฐ€
โ‘ก LEFT OUTER JOIN : A LEFT OUTER JOIND์€ A COLL = B COLL (+)๊ณผ ๋™์ผ
โ‘ข RIGHT OUTER JOIN
โ‘ฃ FULL OUTER JOIN
* JOIN์€ ํ•˜๋ฉด ํ• ์ˆ˜๋ก ์นผ๋Ÿผ์ด ๋Š˜์–ด๋‚œ๋‹ค
* FROM A, B, C์ผ ๋•Œ A์™€ B๋ฅผ ๋จผ์ € JOINํ•˜๊ณ , ๋ฌถ์ธ ์นผ๋Ÿผ์„ C์™€ JOINํ•œ๋‹ค






์ฐธ๊ณ  : https://youtu.be/PC3ypt_VGWI (SELECT๋ฌธ์žฅ ~ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ์–ธ์–ด(TCL))