๐ Structured Query Language (์ง์์ด), RDBMS์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ธ์ด
- ์ข ๋ฅ
- Advanced SQL
DML
๐ Data Manipulation Language, DB ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋ ์ฐ๊ธฐ ์ํ ๋ฌธ๋ฒ
- Query Language (์ง์์ด), Declarative DML (์ ์ธ์ DML): ์ ์ ๊ฐ What๋ง ๋ช
์ํ๊ณ , How๋ DBMS๊ฐ ์์์ ์ฒ๋ฆฌํด ์ฃผ๋ DML
= SQL - Procedural DML (์ ์ฐจ์ DML): ์ ์ ๊ฐ What + How ๋ช ์
Insert
INSERT INTO ํ
์ด๋ธ๋ช
[ (์ปฌ๋ผ๋ช
1, ์ปฌ๋ผ๋ช
2, ...) ] VALUES (๋ฐ์ดํฐ1, ๋ฐ์ดํฐ2, ...);- ๋ช
์๋์ง ์์ ์ปฌ๋ผ์ (Create ๋ฌธ์์
DEFAULT๊ฐ์ ์ ์ํด๋ ๊ฒฝ์ฐ) ๊ธฐ๋ณธ๊ฐ์ด ์ฑ์์ง๊ฒ ๋จ, ์ ์ํ์ง ์์ ๊ฒฝ์ฐnull- PK,
NOT NULL๋ฑ Integrity Constraint (๋ฌด๊ฒฐ์ฑ ์ ์ฝ) ์๋ ๊ฒฝ์ฐ ์๋ฌ
- PK,
- ์ปฌ๋ผ๋ช
()๋ฆฌ์คํธ ์๋ตํ ๊ฒฝ์ฐ, Create Table ๋ฌธ์ผ๋ก ์์ฑํ ์ปฌ๋ผ ์์์ ๋ง๊ฒ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋์ดํด์ผ ํจ- ๊ฐ์ ์ ๋ง์ผ๋ฉด ๊ทธ๋ฅ ์๋ฌ (
null๋ก ์ฑ์์ง์ง๊ฑฐ๋ ๋ค๋ฅผ ๋ฒ๋ฆฌ์ง ์์)
- ๊ฐ์ ์ ๋ง์ผ๋ฉด ๊ทธ๋ฅ ์๋ฌ (
Update
UPDATE ํ
์ด๋ธ๋ช
SET ์ปฌ๋ผ๋ช
1 = ์๊ฐ1, ์ปฌ๋ผ๋ช
2 = ์๊ฐ2, ... [ WHERE ์กฐ๊ฑด์ ];- Where์ ์์ ๊ฒฝ์ฐ ๋ชจ๋ Row ๋ณ๊ฒฝ
- ์กฐ๊ฑด์ ๋ง๋ Row ์์ด๋ ์๋ฌ X
- Result Table์ ์์ ํ Table, ์ฆ ๋ณ๊ฒฝ๋์ง ์์ Row๋ค๊น์ง ํฌํจ
Delete
DELETE FROM ํ
์ด๋ธ๋ช
[ WHERE ์กฐ๊ฑด์ ];- ์ ์ฒด Table์ ์ญ์ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ (= Where์ ์์ ๊ฒฝ์ฐ) ๋์ Truncate๋ฅผ ์ธ ์๋ ์์
- ์กฐ๊ฑด์ ๋ง๋ Row ์์ด๋ ์๋ฌ X
Merge
MERGE INTO ํ
์ด๋ธ๋ช
USING ๋น๊ตํ
์ด๋ธ๋ช
ON ์กฐ๊ฑด์
[ WHEN MATCHED THEN
UPDATE์
[ DELETE์ ] ]
[ WHEN NOT MATCHED THEN
INSERT์ ]
;ON ์กฐ๊ฑด์ ์ ๋ฐ๋ผํ ์ด๋ธ๋ช์ Insert, Update, Delete ๋ฑ์ ํ ๋ฒ์ ๊ฐ๋ฅํ ์ด๋ธ๋ช๊ณผ๋น๊ตํ ์ด๋ธ๋ช์ Full Outer Joinํ๊ฒ ๋จ
Select
DML์ด ์๋ ๋ณ๋๋ก DQL (Data Query Language) ์ผ๋ก ๋ถ๋ฅํ๊ธฐ๋ ํจ
SELECT [ DISTINCT | ALL ] ์ปฌ๋ผ๋ช
1, ...
FROM ํ
์ด๋ธ๋ช
1, ...
[ WHERE ์กฐ๊ฑด์ ];์ปฌ๋ผ๋ช์๋ฆฌ์ ์์, ์ฐ์ฐ์ (Operator), ํจ์ (Function), Aggregate Function (์ง๊ณ ํจ์) ๋ฑ์ด ์ฌ ์ ์์- ์๋
์ปฌ๋ผ๋ช์ด ๋ค์ด๊ฐ๋ ์ค๋ฅ๋ ์๋ - Default =
ALL
โ ์ค๋ณต ์ ๊ฑฐ:DISTINCT - ์คํ ์์:
FROMโกWHEREโกGROUP BYโกHAVINGโกSELECTโกORDER BY
=FROM๋ถํฐ ์ญ ์คํํ๋ค,ORDER BY๋์ค๊ธฐ ์ SELECT
As (Alias)
SELECT ์ปฌ๋ผ๋ช
[ AS ] ์์ด๋ฆ- โญ ์ด๋ค ์์น์์๋ ์๋ต ๊ฐ๋ฅ
- Result Table์ ์ปฌ๋ผ๋ช
์
์์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅ - ์๋ฌธ์๋ก ์ถ๋ ฅํ๊ณ ์ถ์ ๊ฒฝ์ฐ,
'์๋ฌธ์์์ด๋ฆ'์ฒ๋ผ ๋ฌธ์์ด๋ก ๋๊ฒจ์ฃผ์ด์ผ ํจ- ๋ฌธ์์ด์ ์์๋ฐ์ดํ (
') ๋ก ๊ฐ์ธ์ผ ํจ, != ํฐ๋ฐ์ดํ (") - ์ด ์ธ์ ๋ชจ๋ ์ํฉ์์๋ ๋๋ฌธ์๋ก ์ถ๋ ฅ (๐
์ปฌ๋ผ๋ช์ ์๋ฌธ์๋ก ์์ฑํ๋ , Select๋ฌธ์์ปฌ๋ผ๋ช๋๋์์ด๋ฆ์ ์๋ฌธ์๋ก ์ ์๋ , โฆ)
- ๋ฌธ์์ด์ ์์๋ฐ์ดํ (
Operator
- ์ซ์: ์ฌ์น ์ฐ์ฐ์
+,-,*,/,( )- null๊ณผ์ ์ฐ์ฐ ๊ฒฐ๊ณผ ๋ฌด์กฐ๊ฑด
null
- null๊ณผ์ ์ฐ์ฐ ๊ฒฐ๊ณผ ๋ฌด์กฐ๊ฑด
- ๋ฌธ์: ํฉ์ฑ ์ฐ์ฐ์
||
Function
- ์ซ์
ABS(์)SIGN(์): ๋ถํธ์ ๋ฐ๋ผ1,0,-1์ค ํ๋ ๋ฐํROUND(์ [, ์๋ฆฟ์]): ์๋ฆฟ์๊น์ง ๋ฐ์ฌ๋ฆผ, ์์์ผ ๊ฒฝ์ฐ ์ ์๋ถ ์๋ฆฟ์๋ฅผ ์๋ฏธ, Default =0TRUNC(์ [, ์๋ฆฟ์]): ์๋ฆฟ์๊น์ง ๋ฒ๋ฆผ, Default =0CEIL(์): ์์์ ์ดํ ์ฌ๋ฆผ
โMSSQLCEILINGFLOOR(์): ์์์ ์ดํ ๋ฒ๋ฆผMOD(ํผ์ ์, ์ ์)์ ์๊ฐ0์ด๋ฉดํผ์ ์๊ทธ๋๋ก ๋ฆฌํด- ๋๋จธ์ง ๋ถํธ๋
ํผ์ ์์ ๋ถํธ๋ฅผ ๋ฐ๋ฆ
POWER(m, n):m^nSQRT(์): ๋ฃจํธ๊ฐ ๋ฆฌํด
- ๋ฌธ์
CHR(์์คํค์ฝ๋)
โMSSQLCHARLOWER(๋๋ฌธ์ํฌํจ๋ฌธ์์ด): ๋ โก ์UPPER(์๋ฌธ์ํฌํจ๋ฌธ์์ด): ์ โก ๋LTRIM(๋ฌธ์์ด [, ํน์ ๋ฌธ์์งํฉ]): ์ธ์๊ฐ ํ๋๋ฟ์ด๋ฉด ์ผ์ชฝ์ ๋ชจ๋ ๊ณต๋ฐฑ ์ ๊ฑฐ, ์๋๋ฉด ๋งจ ์ผ์ชฝ ๋ฌธ์๋ถํฐํน์ ๋ฌธ์์งํฉ์ ํฌํจ๋์ด ์๋์ง ํ์ธํ๊ณ ์ ๊ฑฐ (ํฌํจ๋์ด ์์ง ์๋ค๋ฉด ๋ ํ์ํ์ง ์๊ณ ๊ทธ๋๋ก ์ข ๋ฃ)
โMSSQL ๊ณต๋ฐฑ ์ ๊ฑฐ๋ง ๊ฐ๋ฅRTRIM(๋ฌธ์์ด [, ํน์ ๋ฌธ์์ด])TRIM([์์น ํน์ ๋ฌธ์์งํฉ FROM] ๋ฌธ์์ด): ์ธ์๊ฐ ํ๋๋ฟ์ด๋ฉด ๋ฌธ์์ด ์ ์์ ๊ณต๋ฐฑ ์ ๊ฑฐ, ์๋๋ฉด์์น์์๋ถํฐํน์ ๋ฌธ์์งํฉํฌํจ ์ฌ๋ถ ํ์ธํด๊ฐ๋ฉฐ ์ ๊ฑฐ- ์์น:
LEADING(์ผ์ชฝ),TRAILING(์ค๋ฅธ์ชฝ),BOTH(์์ชฝ)
- ์์น:
LPAD(๋ฌธ์์ด, n, ๋ฌธ์):๋ฌธ์์ด๋งจ ์ผ์ชฝ์๋ฌธ์๋ฅผn๊ฐ ๋ง๋ถ์RPAD(๋ฌธ์์ด, n, ๋ฌธ์)SUBSTR(๋ฌธ์์ด, ์์์ [, ๊ธธ์ด]):์์์ ์ 1๋ถํฐ ์์ (1-indexed), ์์์ผ ๊ฒฝ์ฐ ๋งจ ๋ค์์๋ถํฐ
โMSSQLSUBSTRING(๋ฌธ์์ด)INSTR(๋ฌธ์์ด, ํน์ ๋ฌธ์์ด [, ์์์ ] [, n]):๋ฌธ์์ด์์์์ ์์๋ถํฐ,n๋ฒ์งธ๋ก ๋ฐ๊ฒฌ๋ํน์ ๋ฌธ์์ด์ ์ธ๋ฑ์ค ๋ฐํ (1-indexed), ์์ผ๋ฉด0- Default =
1,1
โMSSQLCHARINDEX
- Default =
LENGTH(๋ฌธ์์ด)
โMSSQLLENREPLACE(๋ฌธ์์ด, ๋ณ๊ฒฝ์ ๋ฌธ์์ด [, ๋ณ๊ฒฝํ๋ฌธ์์ด]):๋ณ๊ฒฝํ๋ฌธ์์ด์์ ๊ฒฝ์ฐ ๊ทธ๋ฅ ์ ๊ฑฐ, ์์ ๊ฒฝ์ฐ ์นํTRANSLATE(๋ฌธ์์ด, ๋ณ๊ฒฝ์ ๋ฌธ์๋ค, ๋ณ๊ฒฝํ๋ฌธ์๋ค):๋ณ๊ฒฝ์ ๋ฌธ์๋ค,๋ณ๊ฒฝํ๋ฌธ์๋ค์ ๊ฐ์ ์ธ๋ฑ์ค์ ๋ฌธ์๋ผ๋ฆฌ 1:1 ๋งคํ์ํจ ๋ค๋ฌธ์์ด๋ด์์ ์นํCONCAT(๋ฌธ์์ด1, ๋ฌธ์์ด2)
- ๋ ์ง
SYSDATE: ํ์ฌ์ ๋ ์ง ๋ฐ ์๊ฐ (๐2021-09-12 22:08:08,nls_date_format์ ๋ฐ๋ผ ํ์ ๋ค๋ฆ)
โMSSQLGETDATEEXTRACT(๋จ์ FROM ๋ ์ง๋ฐ์ดํฐ):๋ ์ง๋ฐ์ดํฐ์ ํน์ ๋จ์์ ๋ํ ๊ฐ๋ง์ ์ ์๋ก ๋ฆฌํด- ๋จ์:
YEAR,MONTH,DAY,HOUR,MINUTE,SECOND
โMSSQLDATEPART(๋จ์, ๋ ์ง๋ฐ์ดํฐ)
- ๋จ์:
ADD_MONTHS(๋ ์ง๋ฐ์ดํฐ, ๊ฐ์์)- ํด๋น ์์ ๊ฐ์ ์ผ์๊ฐ ์์ผ๋ฉด, ํด๋น ์์ ๊ฐ์ฅ ๋ง์ง๋ง ์ผ์ ๋ฆฌํด
โMSSQLDATEADD(๋จ์, ๊ฐ์์, ๋ ์ง๋ฐ์ดํฐ)
- ํด๋น ์์ ๊ฐ์ ์ผ์๊ฐ ์์ผ๋ฉด, ํด๋น ์์ ๊ฐ์ฅ ๋ง์ง๋ง ์ผ์ ๋ฆฌํด
LAST_DAY(๋ ์ง๋ฐ์ดํฐ): ํด๋น ์์ ๋ง์ง๋ง ์ผ์ ๋ฆฌํดNEXT_DAY(๋ ์ง๋ฐ์ดํฐ, ์์ผ์ซ์): ํด๋น๋ ์ง๋ฐ์ดํฐ์ดํ ์ฒ์์ผ๋ก ๋์์ค๋์์ผ์ซ์์ ๋ ์ง ๋ฆฌํด- ์์ผ์ซ์:
1(์ผ),2(์), โฆ
- ์์ผ์ซ์:
ROUND(๋ ์ง๋ฐ์ดํฐ, ๋จ์):๋จ์๊น์ง(์ด์ ์๋ฆฌ์์) ๋ฐ์ฌ๋ฆผ (์ฆ,๋จ์๊น์ง ํ์)๋จ์๊ฐMONTH์ผ ๊ฒฝ์ฐ,15์ผ๊น์ง๋ ๊ฐ์ ๋ฌ์1์ผ,16์ผ๋ถํฐ๋ ๋ค์ ๋ฌ์1์ผ
TRUNC(๋ ์ง๋ฐ์ดํฐ, ๋จ์):๋จ์๊น์ง ๋ฒ๋ฆผ
- ๋ช
์์ ํ๋ณํ
TO_NUMBER(๋ฌธ์์ด)TO_CHAR(์/๋ ์ง [, ํฌ๋งท๋ฌธ์์ด])TO_DATE(๋ ์ง๋ฌธ์์ด, ํฌ๋งท๋ฌธ์์ด)CAST(๋ฐ๊ฟ๊ฐ AS ํ์ ): ๋ฐ๊ฟ๊ฐ์ํ์์ผ๋ก ๋ณํ
โ ๋ฌต์์ /์์์ ํ๋ณํ, Createํ ์คํค๋ง์ Insertํ ๋ฐ์ดํฐ์ ํ์ ๋ค๋ฅผ ๊ฒฝ์ฐ ๋ฐ์
๐ ์ฑ๋ฅ ์ ํ, ์๋ฌ์ ๊ฐ๋ฅ์ฑ
โMSSQLCONVERT,CAST, โฆ
- null
NVL(๊ฐ, ๊ธฐ๋ณธ๊ฐ):๊ฐ์ดnull์ด ์๋๋ฉด ๊ทธ๋๋ก ๋ฐํ,null์ด๋ฉด๊ธฐ๋ณธ๊ฐ๋์ ๋ฐํNVL2(๊ฐ, null์๋๋๊ฐ, null์ผ๋๊ฐ):NVL์ ์ ์ฌํ๋, ์ค๊ฐ์null์๋๋๊ฐ๋ผ์์ ธ ์์NULLIF(์ธ์1, ์ธ์2):์ธ์1 == ์ธ์2์ด๋ฉดnull๋ฐํ, ์๋๋ฉด์ธ์1๋ฐํCOALESCE(์ธ์1, ์ธ์2, ...):null์ด ์๋ ์ต์ด์ ๊ฐ ๋ฐํ
๐ ํฉ์ฒดํ๋ค, ๋ณํฉํ๋ค
Case
CASE
WHEN ์กฐ๊ฑด1 THEN ๊ฐ1
WHEN ์กฐ๊ฑด2 THEN ๊ฐ2
...
[ ELSE ๊ธฐ๋ณธ๊ฐ ]
END [[ AS ] Alias ]
CASE ์ปฌ๋ผ๋ช
WHEN ๋น๊ต๊ฐ1 THEN ๊ฐ1
WHEN ๋น๊ต๊ฐ2 THEN ๊ฐ2
...
[ ELSE ๊ธฐ๋ณธ๊ฐ ]
END [[ AS ] Alias ]- Else๋ฌธ ์์ ๊ฒฝ์ฐ Default =
null - ์กฐ๊ฑด์ด๋ ์ปฌ๋ผ๋ช ์๋ฆฌ์ As (Alias) ์ฌ์ฉ ๋ถ๊ฐ
- Select๋ฌธ์ ์ปฌ๋ผ๋ช
์๋ฆฌ๋ฅผ Case ๋ฌธ์ผ๋ก ๋์ฒดํ ์ ์์
SELECT CASE ... END [[ AS ] Alias ] - Oracle DECODE Function๊ณผ ๋์ผ
DECODE(์ปฌ๋ผ๋ช , ๋น๊ต๊ฐ1, ๊ฐ1, ๋น๊ต๊ฐ2, ๊ฐ2, ... [, ๊ธฐ๋ณธ๊ฐ])
From
As (Alias)
FROM ํ
์ด๋ธ๋ช
[ AS ] ๋ณ์นญ, ...- ์ฌ๋ฌ ํ
์ด๋ธ์ ์ค๋ณต ์ปฌ๋ผ๋ช
์ด ์์ด
ํ ์ด๋ธ๋ช .์ปฌ๋ผ๋ช์ผ๋ก ๋ช ์ํด์ผ ํ ๋, ์ด๋ฅผ ์งง๊ฒ ์ค์ฌ ์ธ ์ ์์ - ํ ์ด๋ธ์ Alias๋ฅผ ์ง์ ํ ๊ฒฝ์ฐ ํ ์ด๋ธ๋ช ๋์ ๋ณ์นญ์ ์ฌ์ฉํด์ผ ํจ, ๋ฌธ๋ฒ ์๋ฌ
Dual
SELECT ๊ฐ๋จํ๊ณ์ฐ๊ฐ FROM DUAL; - Dummy Table, ๊ฐ๋จํ ๊ณ์ฐ๊ฐ ํ๋๋ฅผ ํ์ธํ๊ธฐ ์ํด ์ฌ์ฉ
- ์์คํ ์ฌ์ฉ์ ์์ , ๋ชจ๋ ์ฌ์ฉ์ ์ ๊ทผ ๊ฐ๋ฅ
Where
- ๋น๊ต ์ฐ์ฐ์:
=,<,<=,>,>=null๊ณผ์ ์ฐ์ฐ ๊ฒฐ๊ณผ ๋ฌด์กฐ๊ฑดFalseโกIS NULL์ ์ฌ์ฉํด์ผํจ
- ๋ถ์ ๋น๊ต ์ฐ์ฐ์:
!=,^=,<>,NOT ๋น๊ต์กฐ๊ฑด์ - SQL ์ฐ์ฐ์
BETWEEN ๊ฐ1 AND ๊ฐ2
=์ปฌ๋ผ๋ช >= ๊ฐ1 AND ์ปฌ๋ผ๋ช <= ๊ฐ2- ๋ฒ์์
๊ฐ1,๊ฐ2ํฌํจ
- ๋ฒ์์
LIKE ๋น๊ต๋ฌธ์์ด [ ESCAPE ์ด์ค์ผ์ดํ๋ฌธ์ ]- ์์ผ๋์นด๋
%: ๋ฌธ์์ด์ด ์๋ ์๋ ์ผ์น_: ๊ธ์์๋ง ๋ง์ผ๋ฉด ์ผ์น
ESCAPE ์ด์ค์ผ์ดํ๋ฌธ์:%,_์์์ด์ค์ผ์ดํ๋ฌธ์๋ฅผ ๋ถ์ด๋ฉด, ๋ค๋ฅธ ์๋ฏธ ์์ด ๋ฌธ์ ๊ทธ๋๋ก ์ทจ๊ธ
- ์์ผ๋์นด๋
IN (๊ฐ1, ๊ฐ2, ...)
=(๊ฐ1 OR ๊ฐ2 OR ...)๊ฐ ๋น๊ต์ฐ์ฐ์ SOME(๊ฐ1, ๊ฐ2, ...): ๊ฐ๋ค ์ค ํ๋๋ผ๋๋น๊ต์ฐ์ฐ์์กฐ๊ฑด ๋ง์กฑํ๋ฉด True
=ANY- Column์ด ํ๋์ธ Subquery๋ ๊ฐ๋ฅ
๊ฐ ๋น๊ต์ฐ์ฐ์ ALL(๊ฐ1, ๊ฐ2, ...)EXIST(์๋ธ์ฟผ๋ฆฌ):์๋ธ์ฟผ๋ฆฌ์ Row ํ๋๋ผ๋ ์กด์ฌํ๋ฉด TrueUNIQUE(๊ฐ1, ๊ฐ2, ...): ์ค๋ณต ์์ผ๋ฉด TrueIS NULL
- ๋ถ์ SQL ์ฐ์ฐ์
NOT (์กฐ๊ฑด์ )/SQL์ฐ์ฐ์IS NOT NULL
- ๋
ผ๋ฆฌ ์ฐ์ฐ์
- ๋ฌด์กฐ๊ฑด
( )>NOT>AND>OR์
- ๋ฌด์กฐ๊ฑด
Group By
GROUP BY ๊ธฐ์ค์ปฌ๋ผ๋ช
1, ๊ธฐ์ค์ปฌ๋ผ๋ช
2, ...
[ HAVING ์กฐ๊ฑด์ ]- Select ์ ์ Aggregate Function (์ง๊ณ ํจ์)๊ฐ ์๋ ์ปฌ๋ผ๋ช ์ ์ ํํ๊ณ ์ถ์ ๊ฒฝ์ฐ, ๋๊ฐ์ ์ปฌ๋ผ๋ช ์ Group By ์ ์์ ๋จผ์ ์ ํํด์ผ ํจ
Having
- Group By๊ฐ ์์ด๋ Column์ด 1๊ฐ์ธ ๊ฒฝ์ฐ ๋จ๋ ์ฌ์ฉ ๊ฐ๋ฅ
Group Function (๊ทธ๋ฃน ํจ์)
๐๋ฐ์ดํฐ๋ฅผ Group Byํ์ฌ ๋ํ๋ผ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ตฌํ๋ ํจ์
Aggregate Function (์ง๊ณ ํจ์)
๐ ์ฌ๋ฌ Row๋ก๋ถํฐ ํ๋์ ๊ฐ์ ์ง๊ณ, ๋์ถํด๋ด๋ ํจ์
์ปฌ๋ผ๊ฐ == null์ธ Row๋ ์ ์ธ- Select, Having ์ ์์ ์ฌ์ฉ
- Where์ ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅํ ๊ฒฝ์ฐ, ์ง๊ณ ํจ์๋ฅผ ์ฐ๋ฉด ๐์ฑ๋ฅ์ ๋ถ๋ฆฌ (ํ์์๋ ๋ฐ์ดํฐ๊น์ง ๋จผ์ Group Byํ๊ฒ ๋๋ฏ๋ก)
- ์ข
๋ฅ
COUNT(์ปฌ๋ผ๋ช ):null์ธ์ปฌ๋ผ๋ช์ ์ธํ๊ณ ๊ณ์ฐCOUNT(*):nullํฌํจ ๋ชจ๋ RowCOUNT(DISTINCT ์ปฌ๋ผ๋ช ): ์ค๋ณต ์ ๊ฑฐ ํ ๊ณ์ฐCOUNT(๋จ์ผ์์)=1
SUM(์ปฌ๋ผ๋ช )AVG(์ปฌ๋ผ๋ช )MIN(์ปฌ๋ผ๋ช )MAX(์ปฌ๋ผ๋ช )VARIANCE(์ปฌ๋ผ๋ช ): ๋ถ์ฐ = ํ์คํธ์ฐจSTDDEV(๋์): ํ์คํธ์ฐจ
Subtotal Function (์๊ณ, ์ด๊ณ ํจ์)
๐ Aggregate Function (์ง๊ณ ํจ์)์ผ๋ก ๋์ถํด๋ธ ์ปฌ๋ผ๊ฐ๋ค์ ๋ํด, ์๊ทธ๋ฃน ๊ฐ ์๊ณ ๋ฐ ์ ์ฒด ํต๊ณ๋ฅผ ๊ณ์ฐํ๋ ํจ์
GROUP BY ์๊ณํจ์ (๊ธฐ์ค์ปฌ๋ผ๋ช
1, ๊ธฐ์ค์ปฌ๋ผ๋ช
2, ...)- Group By ์ ์์ ์ฌ์ฉ
- Subquery์ Union
ALL์ ํตํด ๋์ผํ ์๋ฏธ๋ฅผ ๊ฐ๋ SQL๋ฌธ ์์ฑ ๊ฐ๋ฅSELECT ์๊ทธ๋ฃน1์ปฌ๋ผ1, ... , COUNT(*) FROM์ GROUP BY ์๊ทธ๋ฃน1์ปฌ๋ผ1, ... UNION ALL SELECT ์๊ทธ๋ฃน2์ปฌ๋ผ1, ... , COUNT(*) FROM์ GROUP BY ์๊ทธ๋ฃน2์ปฌ๋ผ1, ...- ์๊ณํจ์์ ๊ฒฐ๊ณผ๋ก ๋ฑ์ฅํ๋ ์กฐํฉ ๊ฐ๊ฐ์ ํ๋์ Subquery๋ก ๋ง๋ค๊ธฐ
- ๊ฐ Subquery์์ Group By ํ์ฉ
- ๊ฐ Subquery์ Aggregate Function (์ง๊ณ ํจ์)
COUNT(*)์ถ๊ฐ โก ์๊ณ ๋ฐ ์ง๊ณ ๊ณ์ฐ - ๋ชจ๋ Subquery๋ฅผ Set Operation
UNION ALL๋ก ์ฐ๊ฒฐ
- ์๊ณํจ์์ ๊ฒฐ๊ณผ๋ก ๋ฑ์ฅํ๋ ์กฐํฉ ๊ฐ๊ฐ์ ํ๋์ Subquery๋ก ๋ง๋ค๊ธฐ
- ์ข
๋ฅ
ROLLUP (A, B, ... , K):A, B, ..., K,A, B, ..., K-1,A๋ก ๊ทธ๋ฃนํํ์ฌ ์๊ณ๋ฅผ ๊ณ์ฐํ๊ณ , ์ ์ฒด ์ด ํฉ๊ณ ๊ณ์ฐ
= โฌ ๋ฐฉํฅ์ผ๋ก, ์๊ทธ๋ฃน์์๊ธฐ์ค์ปฌ๋ผ๋ชํ๋์ฉ ๋นผ๊ฐ๋ฉฐ ๊ทธ๋ฃนํ- ์ธ์ ์์ ๋ฐ๋๋ฉด ๊ฒฐ๊ณผ๋ ๋ฌ๋ผ์ง
โCUBE,GROUPING SETS - ์ฒ์ ์๊ธฐ๋
A, B, ..., K์ ๊ฒฝ์ฐ, ์๋ Group By ์ ์ ์ํด ์์ฑ๋๋ ๊ฒ๊ณผ ๋์ผํ Rows
โGROUPING SETS, ๊ฐ ํญ๋ชฉ์ ๋ํ ์๊ณ๋ง์ ๊ณ์ฐ - ์๊ณ: ๊ฐ ์๊ทธ๋ฃน ๋ค์ Row ์ถ๊ฐ๋จ
๊ธฐ์ค์ปฌ๋ผ๋ช๋ค์( )๋ก ๋ฌถ์ด ํ๋์ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉํ ์ ์์ (= ์๊ทธ๋ฃน ์์ฑ ์,( )๋ด์๊ธฐ์ค์ปฌ๋ผ๋ช๋ค์ ์ชผ๊ฐ์ง ์๊ณ ๊ฑด๋๋)- ๐
ROLLUP ((A, B), C)โกA, B, C,A, B, ํฉ๊ณ
- ๐
- ์๊ณ๊ฐ ๋ฐ ์๊ทธ๋ฃน์ ๊ธฐ์ค์ด ๋๋ ์ปฌ๋ผ์ ์์ฑ๊ฐ๋ค์ ์ฑ์์ง, ๊ทธ ์ธ ์์ฑ๊ฐ์
nullnull์ด ์๋ ๋ค๋ฅธ ๋ฌธ์์ด์ ์ฑ์ฐ๊ณ ์ถ์ ๊ฒฝ์ฐ, Grouping ํจ์ ํ์ฉ
- ํฉ๊ณ: ๋งจ ๋ง์ง๋ง์ Row ํ๋ ๋ ์ถ๊ฐ๋จ, ํฉ๊ณ ์ปฌ๋ผ์ ์ ์ธํ ๋๋จธ์ง ์์ฑ๊ฐ์
null
- ์ธ์ ์์ ๋ฐ๋๋ฉด ๊ฒฐ๊ณผ๋ ๋ฌ๋ผ์ง
CUBE (A, B, ... , K): ๋ชจ๋ ์กฐํฉ์ผ๋ก ๊ทธ๋ฃนํํ์ฌ ์๊ณ๋ฅผ ๊ณ์ฐํ๊ณ , ์ ์ฒด ์ด ํฉ๊ณ ๊ณ์ฐ
=ROLLUP+ ฮฑ- ๐
CUBE (A, B, C)โกA, B, C,A, B,A, C,B, C,A,B,C, ํฉ๊ณ
- ๐
GROUPING SETS: ์กฐํฉ ๋ง๋ค์ง ์๊ณ , ๊ฐ ํญ๋ชฉ์ ๋ํ ์๊ณ๋ง์ ๊ณ์ฐGROUP BY GROUPING SETS ([ ๊ธฐ์ค์ปฌ๋ผ๋ช | ROLLUP | CUBE ]+ [, ( ) ])- ๋งจ ๋ง์ง๋ง์
( )๋ฅผ ์ธ์๋ก ๋ฃ์ด์ฃผ๊ฑฐ๋, ํ ์ธ์์ROLLUP์ ์์ ์ด ํฉ๊ณ ๊ณ์ฐ ๊ฐ๋ฅ
- ๋งจ ๋ง์ง๋ง์
Grouping
SELECT GROUPING(์ปฌ๋ผ๋ช
1), GROUPING(์ปฌ๋ผ๋ช
2), ...
...
GROUP BY [ ROLLUP | CUBE | GROUPING SETS ] (์ปฌ๋ผ๋ช
A, ์ปฌ๋ผ๋ช
B, ...)
...- Select ์ ์
์ปฌ๋ผ๋ช์ Grouping ํจ์๋ก ๊ฐ์ ๊ฒฝ์ฐ,GROUPING(์ปฌ๋ผ๋ช )์ ์ด๋ฆ์ผ๋ก ํ๋ ์ปฌ๋ผ Result Table์ ์์ฑ- ์๊ณ/์ดํฉ Row์
null๋์1์, ๊ทธ ์ธ Row์๋0์ ์ฑ์๋ฃ๊ฒ ๋จ
- Case ์ ๊ณผ ํจ๊ป ์ฌ์ฉํ์ฌ,
1๋์์นํ๋ฌธ์์ด์ ๋ฃ์ด ์๊ณ/์ดํฉ Row๋ฅผ ํ์คํ ๊ตฌ๋ถํจ๊ณผ ๋์์์ปฌ๋ผ๋ช๊ณผGROUPING(์ปฌ๋ผ๋ช )์ปฌ๋ผ์ ํฉ์น ์ ์์SELECT CASE GROUPING(์ปฌ๋ผ๋ช ) WHEN 1 THEN ์นํ๋ฌธ์์ด ELSE ์ปฌ๋ผ๋ช END [[ AS ] ์ปฌ๋ผ๋ช ], ... ...- Oracle
DECODESELECT DECODE(GROUPING(์ปฌ๋ผ๋ช ), 1, ์นํ๋ฌธ์์ด, ์ปฌ๋ผ๋ช ) [[ AS ] ์ปฌ๋ผ๋ช ], ... ...
- Oracle
Order By
ORDER BY 1์ฐจ์ ๋ ฌ๊ธฐ์ค์ปฌ๋ผ(๋ฒํธ) [ DESC | ASC ] [ NULLS FIRST | NULLS LAST ], ...- Default =
ASC - Select ์ดํ ์คํ โก Select๋ ์ปฌ๋ผ๋ช
๋๋ ๋ฒํธ๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- ๋ฒํธ: Select์ ์ ๊ธฐ์ ๋ ์์๋๋ก 1, โฆ
null
Join
๐ Normalization (์ ๊ทํ)๋ Table์ ์ฐ๊ฒฐํ์ฌ, ๊ด๊ณ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋์์ ์ถ๋ ฅํ๊ธฐ ์ํ ๋ฐฉ๋ฒ
- (Inner) Join
- Equi-Join: Join์ ์กฐ๊ฑด์ด
=- ๋ Table์ ๋ค ์กด์ฌํ๋ ์ปฌ๋ผ๋ช
์ด๋๋ผ๋, Select ์
ํ ์ด๋ธ๋ช .์ปฌ๋ผ๋ช์ฒ๋ผ ์ ๋๋ก ๋ช ์ ๋๋ As (Alias) ํ์ฉ ํ์
โ Natural Join, Join ~ Using์
โ Non Equi-Join, ๋ค๋ฅธ ์กฐ๊ฑด์ผ๋ก Join
- ๋ Table์ ๋ค ์กด์ฌํ๋ ์ปฌ๋ผ๋ช
์ด๋๋ผ๋, Select ์
- Natural Join: ์๋ก ๊ฐ์ ์ด๋ฆ์ ๋ชจ๋ ์์ฑ ๊ฐ Equi-Join
- Result Table์ ์กฐ๊ฑด์ด ๋๋ ์์ฑ์ด ํ๋๋ง ํฌํจ๋จ
- Select ์
์ปฌ๋ผ๋ช๋ง ์ ์ด์ผ ํจ (ํ ์ด๋ธ๋ช .์ปฌ๋ผ๋ช์ด๋ As (Alias) ๋ถ๊ฐ)
~= Join ~ Using์
โ Equi-Join - Oracle Join ~ Using์ โก ์ด๋ฆ์ด ๊ฐ์ ์ปฌ๋ผ ์ค ์ผ๋ถ๋ง Join ์กฐ๊ฑด์ผ๋ก ํ์ฉ ๊ฐ๋ฅ
- MSSQL ์ง์ X
โ Equi-Join, ๊ฐ์ ์ด๋ฆ์ ์์ฑ์ผ๋ก Joinํ๋๋ผ๋ ์์ชฝ ํ ์ด๋ธ์ ์์ฑ ๋ ๋ค ํฌํจ
- Outer Join: ๋ค๋ฅธ ์ชฝ Table์ Join ์ง์ด ์๋ ์๋ ๋ฌด์กฐ๊ฑด Result Table์ ํฌํจ
= Join ์กฐ๊ฑด์ ์ถฉ์กฑํ์ง ์์๋ ๊ฒฐ๊ณผ์ ํฌํจ๋ ์ ์๋ ๋ฐฉ์- ๋ชฉ์ : ์ ๋ณด์ ์์ค์ ํผํ๊ธฐ ์ํจ
- ์๋ Relational Algebra (๊ด๊ณ ๋์)์๋ ์์, ํธ์๋ฅผ ์ํด SQL ๊ตฌ๋ฌธ์ผ๋ก ์ ๊ณต
- Left, Right, Full โก ๋ช
์๋ ์ชฝ ํ
์ด๋ธ Tuple ไธญ Join ์ง์ด ์๋ ๊ฒ ํฌํจ, ๋ฐ๋ํธ ํ
์ด๋ธ์ ์์ฑ์ ๋ชจ๋
null๋ก ์ฑ์- Full = Left โช Right (์ฆ, ์ค๋ณต ์ ๊ฑฐ๋จ)
- Oracle Where์ ์ ์กฐ๊ฑด ๋ช
์ํ ๋, Outer Join ๊ธฐ์ค ๋ฐ๋์ชฝ (=
null๋ก ์ฑ์์ง ์ชฝ) ์ปฌ๋ผ๋ช ๋ค์(+)๋ถ์ด๊ธฐWHERE A.์ปฌ๋ผ๋ช = B.์ปฌ๋ผ๋ช (+)- ํ์ชฝ์๋ง
(+)๊ฐ๋ฅ โก Full Outer Join ํํ ๋ถ๊ฐ - ๋๋, ANSI Join (ํ์ค Join) ๋ฌธ๋ฒ ์ฐ๊ธฐ
- ํ์ชฝ์๋ง
- Cross Join: ์กฐํฉํ ์ ์๋ ๋ชจ๋ ์กฐํฉ ์ถ๋ ฅ
= Cartesian Product (์นดํฐ์ ๊ณฑ)- Where์ ์์ด From์ ์ฌ๋ฌ Table ๋ช ์
- (ANSI (Standard, ํ์ค) Join)
CROSS JOIN
ANSI (Standard, ํ์ค) Join
โค๏ธ ๋ฒค๋๋ณ SQL ๋ฌธ๋ฒ์ ์ฐจ์ด๋ก ์ธํ ํธํ์ฑ ๋ฌธ์ ๋ฐฉ์ง
โ ๊ทธ๋ฅ From, Where์ ํ์ฉ
FROM ํ
์ด๋ธ๋ช
1 [ ์ข
๋ฅ ] JOIN ํ
์ด๋ธ๋ช
2
ON ์กฐ๊ฑด์ - ์กฐ๊ฑด์ ์ Where ๋์ On์ ์ ๋๊ธฐ
- ์ฐจ์ด์ : Outer Join์ ์กฐ๊ฑด์ด ๋๋ ์ชฝ Table์ On์ ๊ณผ ๊ด๊ณ ์์ด ํญ์ ํฌํจ
- ์กฐ๊ฑด์ด ๋๋ ์ชฝ Table์ ๋ชจ๋ Row ์ถ๊ฐ
- On์ ์ ์กฐ๊ฑด์ ๋ถํฉํ ๊ฒฝ์ฐ, ์กฐ๊ฑด์ด ๋๋ ์ชฝ Row์ ์ง์ด ๋ง๋ Row๋ฅผ ๋ง๋ถ์
- Join ์ข ๋ฃ, Join์ Result Table์ด From์ ๋์ฒดํจ
- Where์ ์กฐ๊ฑด์ผ๋ก ํํฐ๋ง
- Natural, Cross Join์ ๊ฒฝ์ฐ On์ X
- ์ฐจ์ด์ : Outer Join์ ์กฐ๊ฑด์ด ๋๋ ์ชฝ Table์ On์ ๊ณผ ๊ด๊ณ ์์ด ํญ์ ํฌํจ
- ์ข
๋ฅ:
INNER,NATURAL, [LEFT|RIGHT|FULL]OUTER,CROSS- Default =
INNER - MSSQL
NATURAL JOIN์ง์ X
- Default =
Join ~ Using
FROM ํ
์ด๋ธ๋ช
1 JOIN ํ
์ด๋ธ๋ช
2
USING (์ปฌ๋ผ๋ช
1, ์ปฌ๋ผ๋ช
2, ...)- Natural Join๊ณผ ์ ์ฌํ๋, ์ด๋ฆ์ด ๊ฐ์ ์ปฌ๋ผ ์ค ์ผ๋ถ๋ง Join ์กฐ๊ฑด์ผ๋ก ํ์ฉ ๊ฐ๋ฅ
- Using์ ์ ์ฌ์ฉ๋
์ปฌ๋ผ๋ช์ ๊ฒฝ์ฐ, Select์ ์์ ๋ฝ์ ๋์ปฌ๋ผ๋ช๊ทธ๋๋ก ์จ์ผ ํจ (ํ ์ด๋ธ๋ช .์ปฌ๋ผ๋ช์ด๋ As (Alias) ํ์ฉ ๋ถ๊ฐ)
~= Natural Join
โ Equi-Join, Select ์ํ ์ด๋ธ๋ช .์ปฌ๋ผ๋ช์ฒ๋ผ ์ ๋๋ก ๋ช ์ ๋๋ As (Alias) ํ์ฉ - MSSQL ์ง์ X
๊ตฌํ
Loop Join
- Nested-Loop: ํ Record์ ๋ํด, ๋ค๋ฅธ Table์ ๋ชจ๋ Record์ ์กฐ๊ฑด ํ์ธ
- โฐ
(# Outer Records * # Inner Blocks) + # Outer Blocks
- โฐ
- Block Nested-Loop: ํ Block ์์ Record์ ๋ํด, ๋ค๋ฅธ Table์ ๋ชจ๋ Record์ ์กฐ๊ฑด ํ์ธ
- โฐ
(# Outer Blocks * # Inner Blocks) + # Outer Blocks
- โฐ
- Indexed Nested-Loop: Join ์ปฌ๋ผ์ ๋ํ Index (์ธ๋ฑ์ค) ์กด์ฌํ ๋
- โฐ
# Outer Blocks + (# Outer Records * ์ธ๋ฑ์คํ์์๊ฐ)
- โฐ
Merge Join
- Equi-Join, Natural Join์๋ง ๊ฐ๋ฅ
- (์ ๋ ฌ ์ ๋ ๊ฒฝ์ฐ) External Merge Sort ์ํ
๋ฐ๋ฒ ์ > ch15.pptxย (์น ๋ณด๊ธฐ)
- Initial Run ์์ฑ: ํ Buffer Page์ ํ ๋ฒ์ ์ฌ๋ฆด ์ ์๋ ํฌ๊ธฐ๋ฅผ ์ฌ๋ฆฐ ๋ค Internal Sorting์ ํตํด ์ด๊ธฐ Run ์์ฑ
- Merge:
k-1๊ฐ Buffer์ ๊ฐ๊ฐ Run์ ์ฌ๋ฆฐ ๋ค, ์์์ ์ ํฌ์ธํฐ๋ก ๊ฐ๋ฆฌํจ ๋ค ๋น๊ตํด๊ฐ๋ฉฐ Output Page์ ์์๋๋ก ๊ธฐ๋กํ์ฌk-1๋ฐฐ ๋ ํฐ ํฌ๊ธฐ์ Run ์์ฑ ๐- ์ต์ 3๊ฐ์ Page ํ์
- k-way
- ์ ๋ ฌ๋ ๋ ํ ์ด๋ธ์ ์์์ ์ ํฌ์ธํฐ๋ก ๊ฐ๋ฆฌํจ ๋ค ๋น๊ตํด๊ฐ๋ฉฐ, ์กฐ๊ฑด์ ๋ง๋ ๊ฒฝ์ฐ Output Page์ ์์๋๋ก ๊ธฐ๋ก
Hash Join
- ์ ์ : ๊ธฐ์ ๋ฐ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ์ ๋ ดํด์ง โก ํ ์ฌ์ฉ์๊ฐ ๋ง์ Page ๋ ์ ๊ฐ๋ฅ
- Equi-Join, Natural Join์๋ง ๊ฐ๋ฅ
- ๋ ํ
์ด๋ธ์ ๋์ผํ Hash Fn์ผ๋ก ํด์ฑํ์ฌ Partitioningํ ๋ค, Join ์ง์ ์ฐพ์ ๋ ๋์๋๋ Partiton๋ง ํ์ธ
- In-memory Hash Index๋ฅผ ํ์ฉํ๋ฉด ์ฑ๋ฅ์ด ๋ ์ข์
DDL
๐ Data Definition Language, DB ์คํค๋ง๋ฅผ ์ ์ํ๋ ๋ฌธ๋ฒ
- Data Dictionary์ ์คํค๋ง๋ฅผ ์ ์ฅํ๊ฒ ๋จ
- ์ํ ์ , ์ด์ ์์
๋ด์ฉ์ด Auto Commit๋จ
โMSSQL DML๋ Auto Commit - Rollback ๋ถ๊ฐ๋ฅ
Create
CREATE TABLE ํ
์ด๋ธ๋ช
(
์ปฌ๋ผ๋ช
1 ๋ฐ์ดํฐํ์
(ํฌ๊ธฐ) [ ์ ์ฝ์กฐ๊ฑด ] [ DEFAULT ๊ฐ ],
... ,
[ CONSTRAINT ์ปฌ๋ผ๋ช
A ์ ์ฝ์กฐ๊ฑด ],
...
);ํ ์ด๋ธ๋ช์ ๊ณ ์ ํด์ผ ํจ- ํ
ํ ์ด๋ธ๋ช์์์์ปฌ๋ผ๋ช์ ๊ณ ์ ํด์ผ ํจ ํ ์ด๋ธ๋ช,์ปฌ๋ผ๋ช์ ์ซ์๋ก ์์ ๋ถ๊ฐ- ๊ธฐ๋ณธ๊ฐ Default =
null
Data Type
- ๋ฌธ์
CHAR: ๊ณ ์ - ๋น๊ต ์ฐ์ฐ ์, Trimํ ํ ๋น๊ต
VARCHAR: ๊ฐ๋ณCLOB- ์์ด๋ 1 byte, ํ๊ธ์ 2~3 byte
- ์ซ์
NUMBER
- ๋ ์ง
DATE
Constraint
= Integrity Constraint (๋ฌด๊ฒฐ์ฑ ์ ์ฝ)
- ์ ์ ๋ฐฉ๋ฒ
- ์ปฌ๋ผ ์ ์ฝ: ์ปฌ๋ผ ์ ์ ๋ค์ ๋ง๋ถ์ด๊ธฐ
- ํ
์ด๋ธ ์ ์ฝ: ์ปฌ๋ผ ์ ์๊ฐ ๋ค ๋๋ ๋ค Constraint๋ฌธ ์ถ๊ฐ
- ํ ์ ์ฝ์ด ๋ณต์ ๊ฐ์ ์ปฌ๋ผ๊ณผ ์ฐ๊ด๋ ๊ฒฝ์ฐ, ํ ์ด๋ธ ์ ์ฝ์ผ๋ก๋ง ๊ฐ๋ฅ
- Alter ๋ฌธ์ผ๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅ
- ์ข
๋ฅ
PRIMARY KEYCONSTRAINT ์ ์ฝ๋ช PRIMARY KEY (์ปฌ๋ผ๋ช 1, ...)- Foreign Key
REFERNECES ์ฐธ์กฐํ ์ด๋ธ๋ช (์ปฌ๋ผ๋ช )CONSTRAINT ์ ์ฝ๋ช FOREIGN KEY (์ปฌ๋ผ๋ช 1, ...) REFERENCES ์ฐธ์กฐํ ์ด๋ธ๋ช (์ปฌ๋ผ๋ช A, ...)
UNIQUECONSTRAINT ์ ์ฝ๋ช UNIQUE(์ปฌ๋ผ๋ช 1, ...)null์ ์ค๋ณต ๊ฐ๋ฅ
NOT NULL- ํ ์ด๋ธ ์ ์ฝ์ผ๋ก ์ ์ ๋ถ๊ฐ
CHECK(์กฐ๊ฑด):์กฐ๊ฑด์ ์ ํตํด Domain ๋ช ์CONSTRAINT ์ ์ฝ๋ช CHECK(์กฐ๊ฑด์ )
CTAS
= Create Table As Select
CREATE TABLE ํ
์ด๋ธ๋ช
AS SELECT๋ฌธ;- Select๋ฌธ Subquery๋ฅผ ํตํด, ๊ธฐ์กด์ ์กด์ฌํ๋ Table๋ก๋ถํฐ ์ Table ์์ฑ
- Constraint๋
NOT NULL๋ง ๋ณต์ฌ๋จ
Alter
๐ ์ปฌ๋ผ ๋ฐ Constraint ์์
ALTER TABLE ํ
์ด๋ธ๋ช
๋ช
๋ น๋ฌธ;- ๋ช
๋ น ์ข
๋ฅ ์ค DDL๊ณผ ์ค๋ณต๋๋ ์ด๋ฆ์ ๊ฒฝ์ฐ (๐ Drop, Rename),
์ด๋ฆ COLUMN์ผ๋ก ์์ํด์ผ ํจ
- Add: ์ ์ปฌ๋ผ ์ถ๊ฐ
ALTER TABLE ํ ์ด๋ธ๋ช ADD ์ปฌ๋ผ๋ช ํ์ (ํฌ๊ธฐ); ALTER TABLE ํ ์ด๋ธ๋ช ADD (์ปฌ๋ผ๋ช 1 ํ์ (ํฌ๊ธฐ), ์ปฌ๋ผ๋ช 2 ํ์ (ํฌ๊ธฐ), ...);- ์ถ๊ฐํ ์ปฌ๋ผ์ด ํ๋๋ฟ์ผ ๊ฒฝ์ฐ, ๋ฆฌ์คํธ
( )์๋ ์๋ ์๊ด ์์
- ์ถ๊ฐํ ์ปฌ๋ผ์ด ํ๋๋ฟ์ผ ๊ฒฝ์ฐ, ๋ฆฌ์คํธ
- Drop Column: ๊ธฐ์กด ์ปฌ๋ผ ์ญ์
ALTER TABLE ํ ์ด๋ธ๋ช DROP COLUMN ์ปฌ๋ผ๋ช ;- ์ญ์ ๋ ์ปฌ๋ผ ๋ณต๊ตฌ ๋ถ๊ฐ
- Modify: ๊ธฐ์กด ์ปฌ๋ผ๋ค ์์
ALTER TABLE ํ ์ด๋ธ๋ช MODIFY ์ปฌ๋ผ๋ช ํ์ (ํฌ๊ธฐ) [ DEFAULT ๊ฐ ] [ ์ ์ฝ์กฐ๊ฑด ]; ALTER TABLE ํ ์ด๋ธ๋ช MODIFY (์ปฌ๋ผ๋ช 1 ํ์ (ํฌ๊ธฐ) [ DEFAULT ๊ฐ ] [ ์ ์ฝ์กฐ๊ฑด ], ...);DEFAULT๋ฅผ ์์ ํ๋๋ผ๋ ๊ธฐ์กด ์ปฌ๋ผ์๋ ๋ณํ X
โMSSQLALTER COLUMN
- Rename Column: ์ปฌ๋ผ๋ช
๋ณ๊ฒฝ
โ Rename,ALTER TABLE ํ ์ด๋ธ๋ช RENAME COLUMN ๊ธฐ์กด์ปฌ๋ผ๋ช TO ์์ด๋ฆ;ํ ์ด๋ธ๋ช๋ณ๊ฒฝ - Add Constraint: Constraint ์ถ๊ฐ
ALTER TABLE ํ ์ด๋ธ๋ช ADD CONSTRAINT ์ ์ฝ๋ช ์ ์ฝ์กฐ๊ฑด;
Drop
DROP TABLE ํ
์ด๋ธ๋ช
[ ๋์๋ฐฉ๋ฒ CONSTRAINT ];Cascade
๐ ์ข ์
- ๋ถ๋ชจ Table์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ฉด, ์์ Table ๋ฐ์ดํฐ๋ ์ญ์ ๋๋ ์ต์
CASCADE CONSTRAINT: ํด๋น ํ ์ด๋ธ์ PK๋ฅผ FK๋ก ์ฐธ์กฐํ๋ ๋ค๋ฅธ ํ ์ด๋ธ ์์ ๊ฒฝ์ฐ, ํด๋น ์ต์ ์ ๋ถ์ด์ง ์๊ณ ์๋ํ ๊ฒฝ์ฐ ์๋ฌ
Rename
RENAME ํ
์ด๋ธ๋ช
TO ์์ด๋ฆ;Truncate
TRUNCATE TABLE ํ
์ด๋ธ๋ช
;ํ ์ด๋ธ๋ช์ ๋ฐ์ดํฐ ๋ชจ๋ ์ ๊ฑฐ, ์ ์ฅ ๊ณต๊ฐ ์ฌ์ฌ์ฉ๋๋๋ก ์ด๊ธฐํ๋จ
~= Where์ ์๋ Delete
TCL
๐ Transaction Control Language, Transaction (ํธ๋์ญ์ )์ ์ ์ดํ๋ ๋ช ๋ น์ด
Commit
= Commit
COMMIT;- Insert, Delete, Update ํ ๋ณ๊ฒฝ๋ ๋ด์ฉ์ ํ์
- ๋ณ๊ฒฝ ํ ์ค๋ ์๊ฐ Commit ๋๋ Rollbackํ์ง ์์ผ๋ฉด, Lock์ ๊ฑธ๋ ค ๋ค๋ฅธ ์ฌ์ฉ์๋ค์ ์ ๊ทผ์ด ์ด๋ ค์ธ ์ ์์
- DDL ์คํ ์ ๋ฌต์์ ์ผ๋ก Commit ์คํ
- MSSQL DML ์คํ ์์๋ ๋ฌต์์ ์คํ
Rollback
= Rollback
ROLLBACK [ TO ์ธ์ด๋ธํฌ์ธํธ๋ช
];Savepoint
SAVEPOINT ์ธ์ด๋ธํฌ์ธํธ๋ช
;- ์ถํ Rollback์ ์ฌ์ฉํ๋ฉด,
์ธ์ด๋ธํฌ์ธํธ๋ช๊น์ง๋ง ๋ฐ์ดํฐ๊ฐ ๋ณต๊ตฌ๋๊ฒ ๋จ
DCL
๐ Data Control Language, User๋ฅผ ์์ฑํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ปจํธ๋กคํ ์ ์๋ ๊ถํ์ ์ค์ ํ๋ ๋ช ๋ น์ด
- ํ๋์ DB๋ ์ฌ๋ฌ User ๊ฐ์ง ์ ์์, User๋ง๋ค ๋ค๋ฅธ Password ๋ถ์ฌํ๊ฒ ๋จ
Create User
CREATE USER ์ ์ ๋ช
IDENTIFIED BY ๋น๋ฐ๋ฒํธ;- ์ํ ์ , Grant ํ์
Alter User
ALTER USER ์ ์ ๋ช
IDENTIFIED BY ๋น๋ฐ๋ฒํธ; - ๋ค๋ฅธ User๋ก DB์ ์ ๊ทผ
Drop User
DROP USER ์ ์ ๋ช
;Grant
GRANT ๊ถํ1, ๊ถํ2, ... TO ์ ์ ๋ช
;๊ถํ: (DDL)๋ช ๋ น์ด, (DML)๋ช ๋ น์ด ON ํ ์ด๋ธ๋ชALL: ๋ชจ๋ ๊ถํ- ๋ค๋ฅธ ์ ์ ์
ํ ์ด๋ธ๋ช์ ๊ฒฝ์ฐ,๋ค๋ฅธ์ ์ ๋ช .ํ ์ด๋ธ๋ช์ผ๋ก ๊ฐ๋ฆฌํฌ ์ ์์
์ ์ ๋ช๋์์ญํ ๋ช๋ ๊ฐ๋ฅ
Revoke
REVOKE ๊ถํ FROM ์ฌ์ฉ์๋ช
;์ ์ ๋ช์๊ฒ๊ถํํ์
Role
๐ ํน์ ๊ถํ๋ค์ ํ๋์ ์งํฉ์ผ๋ก ๋ฌถ์ด ์ด๋ฆ ๋ถ์ธ ๊ฒ
- Role ์์ฑ
CREATE ROLE ์ญํ ๋ช ; - Role์ ๊ถํ ๋ถ์ฌ
GRANT ๊ถํ TO ์ญํ ๋ช ; - Role์ ์ฌ์ฉ์์๊ฒ ๋ถ์ฌ
GRANT ์ญํ ๋ช TO ์ ์ ๋ช ;
Advanced SQL
Subquery
๐ ํ ์ฟผ๋ฆฌ ์์ ์กด์ฌํ๋ ๋๋ค๋ฅธ ์ฟผ๋ฆฌ
= Select ๋ฌธ ๋ด๋ถ์ Select, From, Where/Having ์ ์ ํฌํจ๋ ๋ ๋ค๋ฅธ Select ๋ฌธ
โ Main Query, ๋งจ ๋ฐ๊นฅ์ ์ฟผ๋ฆฌ
Scalar Subquery
Inline View
- ํ ์ด๋ธ ๋์ ์ฌ์ฉ
- From ์ ์ ์์น
Nested Subquery
- Where ๋๋ Having ์ ์ ์์น
- ์ข
๋ฅ
- Main Query์์ ๊ด๊ณ
= Subquery ๋ด์ Main Query Table์ ์ปฌ๋ผ ํฌํจ ์ฌ๋ถ- ๋น์ฐ๊ด (Un-correlated)
- ์ฐ๊ด (Correlated)
- SubQuery๊ฐ Main Query์ ํ ์๋งํผ ์คํ, โค๏ธ๋ณต์กํ ์ผ๋ฐ ๋ฐฐ์น ํ๋ก๊ทธ๋จ ๋์ฒด ๊ฐ๋ฅ, ๐์คํ ์๋ ๋๋ฆผ
- ๋ฐํํ๋ ๋ฐ์ดํฐ ํํ
- ๋จ์ผ ํ (Single Row):
0..1๊ฐ์ ๊ฐ - ๋ค์ค ํ (Multi Row):
2..*๊ฐ์ ๊ฐ - ๋ค์ค ์ปฌ๋ผ (Multi Column)
- ๋จ์ผ ํ (Single Row):
- Main Query์์ ๊ด๊ณ
View
= View
Set Operation
Union
ํ
์ด๋ธ1 UNION [ ALL ] ํ
์ด๋ธ2 [ ORDER BY์ ];- Default = ์ค๋ณต ์ ๊ฑฐ
- ๋ ํ
์ด๋ธ์ ์ค์ ๋ก ์ค๋ณต์ด ์๋ ๊ฒฝ์ฐ,
ALL์ ๋ถ์ด๋ฉด ์ถ๊ฐ ๊ณผ์ ๊ฑฐ์น๋ฏ๋ก ์ฑ๋ฅ์ ๋ถ๋ฆฌ
- ๋ ํ
์ด๋ธ์ ์ค์ ๋ก ์ค๋ณต์ด ์๋ ๊ฒฝ์ฐ,
- Result Relation์ ์ปฌ๋ผ๋ช
์
ํ ์ด๋ธ1์ ๋ฐ๋ผ๊ฐ - โ ์ฃผ์
- Union ํธํ์ฑ
- ํ
์ด๋ธ1, ํ
์ด๋ธ2๊ฐ Subquery์ผ ๊ฒฝ์ฐ, Order By์ ํฌํจ ๋ถ๊ฐ
- โญ Order By๋ ๋งจ ๋ง์ง๋ง์๋ง ๊ฐ๋ฅ
Union ํธํ์ฑ
๐ ๋ ํ ์ด๋ธ ๊ฐ Set Operation์ด ๊ฐ๋ฅํ๊ธฐ ์ํ ์กฐ๊ฑด
- ์ปฌ๋ผ ์ ์ผ์น
- ๊ฐ์ ์์น์ ์ปฌ๋ผ ๊ฐ Domain ์ผ์น
Intersect
ํ
์ด๋ธ1 INTERSECT [ ALL ] ํ
์ด๋ธ2;Minus, Except
ํ
์ด๋ธ1 MINUS [ ALL ] ํ
์ด๋ธ2;MINUS=EXCEPT
Window Function
๐ Row์ Row ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ํ๊ธฐ ์ํ ํจ์
์๋์ฐํจ์([ ์ปฌ๋ผ๋ช
]) OVER([ PARTITION BY ๊ทธ๋ฃน๊ธฐ์ค ]
[ ORDER BY ์ ๋ ฌ๊ธฐ์ค [ DESC ]]
[ WINDOWING์ ]) [ AS ] ์์ด๋ฆ- ์ปฌ๋ผ ๋์ ์ฌ์ฉ (Select ์ )
- Group By ๋ฌธ๊ณผ ํจ๊ป ์ฌ์ฉ ๋ถ๊ฐ
- ์คํ ์์:
PARTITIONโกORDER BYโกWINDOWINGโก์๋์ฐํจ์- โ
์ ๋ ฌ๊ธฐ์ค!=์ปฌ๋ผ๋ช์ผ ๊ฒฝ์ฐ,MAX/MIN์ด๋ Value Function (ํ ์์ ํจ์)์์ ๊ฒฐ๊ณผ๊ฐ ์๋์ ๋ค๋ฅด๊ฒ ๋์ฌ ์ ์์ โฌ Windowing Default =RANGE UNBOUNDED PRECENDING
- โ
Ranking Function (์์ ํจ์)
์๋์ฐํจ์() OVER([ PARTITION BY ๊ทธ๋ฃน๊ธฐ์ค ] ORDER BY ์ ๋ ฌ๊ธฐ์ค1, ... [ DESC ]) [ AS ] ์์ด๋ฆRANK(): ๊ณต๋ ์์ ์์ ๊ฒฝ์ฐ, ๋ค์ ์์๋ฅผ ๊ฑด๋๋ฐ๋ฉฐ ๋ฑ์๋ฅผ ๋งค๊น (๐ 1 1 1 4 โฆ)ORDER BY์ ์์ ๋ ฌ๊ธฐ์ค์ ๋ฐ๋ผ ์์ ๋งค๊นPARTITION BY์ ์์ ๊ฒฝ์ฐ,๊ทธ๋ฃน๊ธฐ์ค๋ด์์ ์์ ๋งค๊น
DENSE_RANK(): ๊ณต๋ ์์๊ฐ ์์ด๋ ๋ค์ ์์ ๊ฑด๋๋ฐ์ง ์์ (๐ 1 1 1 2 โฆ)ROW_NUMBER(): ๊ณต๋ ์์ ์์,์ ๋ ฌ๊ธฐ์ค๊ฐ์ด ๊ฐ๋๋ผ๋ ๊ฐ๊ธฐ ๋ค๋ฅธ ์์ ๋ถ์ฌ (๐ 1 2 3 4 โฆ)
~=OracleROWNUM(Top-N Query)
๋น์จ ํจ์
- SQLD ์ํ์๋ ํด๋น ๋ถ๋ฅ๊ฐ ์กด์ฌํ๋, ์ค์ ๋๋ถ๋ถ์ RDBMS์์๋ Ranking Function (์์ ํจ์) ๋ถ๋ฅ์ ์ํจ
๋น์จํจ์() OVER([ PARTITION BY ํํฐ์
๊ธฐ์ค ]
ORDER BY ์ ๋ ฌ๊ธฐ์ค [ DESC ]) [ AS ] ์์ด๋ฆRATIO_TO_REPORT(์ปฌ๋ผ๋ช ): ํํฐ์ ์์,์ปฌ๋ผ๋ช์ด ์ด ํฉ๊ณ์์ ์ฐจ์งํ๋ ๋น์จ,0 <= ๊ฒฐ๊ณผ <= 1
=์ปฌ๋ผ๋ช / SUM(์ปฌ๋ผ๋ช )RATIO_TO_REPORT(์ปฌ๋ผ๋ช ) OVER([ PARTITION BY ํํฐ์ ๊ธฐ์ค ]) [ AS ] ์์ด๋ฆ- MSSQL ์ง์ X
PERCENT_RANK(): ํํฐ์ ์ ๋งจ ์ Row๋ฅผ0, ๋งจ ์๋ Row๋ฅผ1๋ก ๋์์ ๋์ ๋ฐฑ๋ถ์ ์์๊ฐ,0 <= ๊ฒฐ๊ณผ <= 1
=(RANK() OVER(์ ๋ ฌ๊ธฐ์ค) - 1) / (COUNT(*) OVER() - 1)- MSSQL ์ง์ X
CUME_DIST(): ํํฐ์ ์์์ ๋์ ๋ฐฑ๋ถ์จ,0 < ๊ฒฐ๊ณผ <= 1
=COUNT(*) OVER(์ ๋ ฌ๊ธฐ์ค) / COUNT(*) OVER()- MSSQL ์ง์ X
NTILE(n): ์ ์ฒด Rows๋ฅผn๋ฑ๋ถํ์ ๋, ํ์ฌ Row์ ๋ฑ๊ธ ๊ณ์ฐ,1 <= ๊ฒฐ๊ณผ <= n- ๋ฑ ๋๋์ด ๋จ์ด์ง์ง ์๋ ๊ฒฝ์ฐ, ์์ชฝ ๋ฑ๊ธ(
1)๋ถํฐ ํ๋์ฉ ๋ ์ฑ์์ง๊ฒ ๋จ
- ๋ฑ ๋๋์ด ๋จ์ด์ง์ง ์๋ ๊ฒฝ์ฐ, ์์ชฝ ๋ฑ๊ธ(
Aggregate Function (์ง๊ณ ํจ์)
= Aggregate Function (์ง๊ณ ํจ์)
์ง๊ณํจ์(์ปฌ๋ผ๋ช
) OVER([ PARTITION BY ๊ทธ๋ฃน์กฐ๊ฑด์ปฌ๋ผ๋ช
]
[ ORDER BY ๋์ ํฉ์ ๋ ฌ๊ธฐ์ค [ DESC ] ]
[ WINDOWING์ ]) AS ์์ด๋ฆ- ์ฃผ๋ก ์ซ์ ํ์
์ ์ ์ฉ๋จ
MAX,MIN,COUNTโก ๋ฌธ์, ๋ ์ง์๋ ์ ์ฉ ๊ฐ๋ฅ
- (
OVER์๋ ์ง๊ณํจ์์์) ์ฐจ์ด์ : Row ๊ฐ์์ ๋ณํ X
=PARTITION BY์ ์๊ทธ๋ฃน๊ธฐ์ค์ด ๊ฐ์ Row๋ค๋ผ๋ฆฌ๋ ์๋ก ๊ฐ์ ๊ฐ์ด ์ปฌ๋ผ๊ฐ์ผ๋ก ๋ค์ด๊ฐ๊ฒ ๋จ OVER()์ ๊ฒฝ์ฐ, ๊ทธ๋ฅ์ง๊ณํจ์(์ปฌ๋ผ๋ช )๋ฅผ ๊ณ์ฐํ ํ๋์ ๊ฒฐ๊ณผ ์์๊ฐ์ด ๋ชจ๋ Row์ ๋ค์ด๊ฐ- โ
ORDER BY์ ์๋ ๊ฒฝ์ฐ, Windowing์ ์ Default๋ฅผ ์ ๊ณ ๋ คํด์ผ ํจ
SUM- Oracle
ORDER BY์ ๊ณผRANGE UNBOUNDED PRECEDING(= Windowing ์ ) ์ด ์๋ ๊ฒฝ์ฐ,๋์ ํฉ์ ๋ ฌ๊ธฐ์ค์์๋๋ก ๋์ ํฉ ๊ณ์ฐSUM(์ปฌ๋ผ๋ช ) OVER(PARTITION BY ๊ทธ๋ฃน์กฐ๊ฑด์ปฌ๋ผ๋ช ORDER BY ๋์ ํฉ์ ๋ ฌ๊ธฐ์ค [ DESC ] RANGE UNBOUNDED PRECEDING) [ AS ] ์์ด๋ฆ๋์ ํฉ์ ๋ ฌ๊ธฐ์ค=์ปฌ๋ผ๋ช์ผ ๊ฒฝ์ฐ,PARTITION๊ตฌ๋ฌธ ์ ๊ฑฐํด์ผ ํจRANGE UNBOUNDED PRECEDING๊ตฌ๋ฌธ ์๋ต ๊ฐ๋ฅ
- Oracle
MAXMINAVGCOUNT
Windowing
๐ Window ์ ์์ ๋ฐ์ดํฐ์ ๋ฒ์๋ฅผ ์ง์ ํ๊ธฐ ์ํ ์
๊ธฐ์ค BETWEEN ๋ฒ์1 AND ๋ฒ์2- โญ Default =
RANGE UNBOUNDED PRECENDING
=RANGEBETWEENUNBOUNDED PRECENDINGAND CURRERNT ROW
= ์ฒซ Row๋ถํฐ ํ์ฌ Row๊น์ง ๊ธฐ์ค ๋ฒ์์ฒ๋ผ,BETWEEN์์ด ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ =FOLLOWING์ ์ธ๊ธฐ์ค UNBOUNDED PRECENDING๊ธฐ์ค n PRECENDING๊ธฐ์ค CURRENT ROW
- ๊ธฐ์ค
ROWS: Row ์์ฒด์ ์์น ๊ธฐ์คRANGE: Row์ ๊ฐ ๊ธฐ์ค
- ๋ฒ์
UNBOUNDED PRECENDING: ๋งจ ์์ Row- ๊ฐ์ด ํฌ๊ณ ์์ ๊ฑด ๋ชจ๋ฆ,
ORDER BY์ASC/DESC์ ๋ฐ๋ผ ๋ฐ๋ฆ
- ๊ฐ์ด ํฌ๊ณ ์์ ๊ฑด ๋ชจ๋ฆ,
UNBOUNDED FOLLOWING: ๋งจ ์๋์ RowCURRENT ROW: ํ์ฌ ํn PRECEDING: ํ์ฌ ํ์์ n ์์ Rown FOLLOWING: ํ์ฌ ํ์์ n ์๋์ Row
Value Function (ํ ์์ ํจ์)
ํ์์ํจ์(์ปฌ๋ผ๋ช
) OVER([ PARTITION BY ๊ทธ๋ฃน์กฐ๊ฑด์ปฌ๋ผ๋ช
]
ORDER BY ์ ๋ ฌ๊ธฐ์ค์ปฌ๋ผ [ DESC ]
[ WINDOWING์ ]) [ AS ] ์์ด๋ฆ- MSSQL ์ง์ X
FIRST_VALUE(์ปฌ๋ผ๋ช ): ๋งจ ์ Row์ ์ปฌ๋ผ๊ฐLAST_VALUE(์ปฌ๋ผ๋ช ): ๋งจ ์๋ Row์ ์ปฌ๋ผ๊ฐ- โ ์ ๋ ฌ ์์๊ฐ
ASC์ธ ๊ฒฝ์ฐ ์์๊ณผ ๋ค๋ฅด๊ฒ ๋์- ์์ธ: Windowing์ ์ Default๊ฐ
RANGE UNBOUNDED PRECENDINGโก ์ฆ, ์ฒซ Row๋ถํฐ ํ์ฌ Row ์ค ๋งจ ์๋์ ๊ฒ์ ์ ํํ๋ฏ๋ก, ํญ์ ์๊ธฐ ์์ ์ ์์ฑ๊ฐ ์ ํํ๊ฒ ๋จ - ํด๊ฒฐ:
RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING๋ช ์ ํ์
- ์์ธ: Windowing์ ์ Default๊ฐ
- โ ์ ๋ ฌ ์์๊ฐ
LAG(์ปฌ๋ผ๋ช [, n] [, ๊ธฐ๋ณธ๊ฐ]):n๋งํผ ์ Row์ ์ปฌ๋ผ๊ฐ, Default =1,null, ์์ชฝ Row๋ผ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ ๋์๊ธฐ๋ณธ๊ฐ์ฑ์์ง๊ฒ ๋จ
๐ LAG = ์ง์ฐ, ๋๋๋คLEAD(์ปฌ๋ผ๋ช [, n] [, ๊ธฐ๋ณธ๊ฐ]):n๋งํผ ์๋ Row์ ์ปฌ๋ผ๊ฐ
Top-N Query
- Oracle
ROWNUM: ๋งจ ์ Row์์๋ถํฐ ์์๋๋ก1,2, โฆ ๋ฒํธ๊ฐ ๋งค๊ฒจ์ง๋ Pseudo Column (๊ฐ์ง ์ปฌ๋ผ)SELECT [ ROWNUM, ] ... FROM ์ ๋ ฌ๋ํ ์ด๋ธ๋ช [ WHERE ROWNUM < ๊ฐ | WHERE RUMNUM <= ๊ฐ ] ;- From์ ์ Order By๋ก ์ ๋ ฌ๋ Subquery ๋ฅผ ๋๊ฒ ๋จ
โ โ Main Query์ Order By๋ฌธ์ ์ ๋ ฌ ์์๋ฅผ ๋ฌ ๋ดค์ ๋งจ ๋ง์ง๋ง์ ์คํ๋จ, ์ ๋ ฌ ์ Rows์ROMNUM์ ๋ถ์ด๊ฒ ๋จ - Where์ ์กฐ๊ฑด ๊ตฌ์ฑ์
ROMNUM์ ํฌํจ์ํฌ ๊ฒฝ์ฐ,ROWNUM <๋๋ROWNUM <=๋ง ์ฌ์ฉ ๊ฐ๋ฅ- Select์ ๋ฌด๊ด, Select์ ์
ROWNUMํฌํจ ์ ๋์ด ์์ด๋ ๋จ
- Select์ ๋ฌด๊ด, Select์ ์
- From์ ์ Order By๋ก ์ ๋ ฌ๋ Subquery ๋ฅผ ๋๊ฒ ๋จ
- Ranking Function (์์ ํจ์) ํ์ฉ
SELECT์ FROM ( SELECT ์์ํจ์() OVER([ PARTITION BY ํํฐ์ ๊ธฐ์ค ] ORDER BY ์ ๋ ฌ๊ธฐ์ค [ DESC ]) [ AS ] ์์ด๋ฆ ... ) [ WHERE ์์ด๋ฆ < ๊ฐ | WHERE ์์ด๋ฆ <= ๊ฐ ] ;
Top
SELECT TOP(n) [ PERCENT ] [ WITH TIES ] ์ปฌ๋ผ1, ์ปฌ๋ผ2, ...
FROM์
...- Order By์ ์ดํ์ ์ํ๋๋ฏ๋ก, ์ ๋ ฌํ ๋ค
n๊ฐ/n%๊ฐ ๋งํผ ์ถ๋ ฅํ๊ฒ ๋จ PERCENT:n๊ฐ๊ฐ ์๋n%๊ฐ์ Row ์ถ๋ ฅWITH TIES:n๊ฐ๋ฅผ ๋๋๋ผ๋ ๋ชจ๋ ๋์ ์ถ๋ ฅ
Limit
Oracle ์ง์ X
...
[ ORDER BY์ ]
LIMIT n
[ OFFSET m ]
;- Order By์ ์ดํ์ ์ํ
OFFSET:m๋ค์ Row๋ถํฐ ์ถ๋ ฅ, Default =0(1-indexed)
Fetch First
...
[ ORDER BY์ ]
[ OFFSET m ROWS ]
FETCH FIRST [ n ] ROW ONLY
;- Order By์ ์ดํ์ ์ํ
n, e์ Default =1
Self Join
๐ ๋ ์์ ๊ณผ์ Join
- ๊ฐ์ ํ ์ด๋ธ ์ฌ๋ฌ ๋ฒ ๋ฑ์ฅ โก Alias ํ์
- Depth๊ฐ ๊น์ด์ง ๊ฒฝ์ฐ, Hierarchy Query (๊ณ์ธต ์ฟผ๋ฆฌ)๋ฅผ ์ฐ๋ฉด ๋ฐ๋ณต์ ์ค์ด๊ณ ๊ฐ๋จํ๊ฒ ์์ฑ ๊ฐ๋ฅ
Hierarchy Query (๊ณ์ธต ์ฟผ๋ฆฌ)
SELECT์
FROM ํ
์ด๋ธ๋ช
START WITH ์กฐ๊ฑด์
CONNECT BY ์กฐ๊ฑด์
[ ORDER SIBINIGS BY ์ปฌ๋ผ๋ช
]
;START WITH ์กฐ๊ฑด์ :์กฐ๊ฑด์ ์ ๋ง์กฑํ๋ Row๋ฅผ Root ๋ ธ๋๋ก ์์CONNECT BY: Root ๋ ธ๋์์๋ถํฐ,์กฐ๊ฑด์ ์ ๋ง์กฑํ๋ Row ์์ ๋๊น์ง ์ด์ด๊ฐ๋ฉฐ ์์ ๋ ธ๋ ์์ฑPRIOR ์ปฌ๋ผ๋ช: ๋ถ๋ชจ ๋ ธ๋์ปฌ๋ผ๋ช์ ์์ฑ๊ฐ ๋ฐํ- ๐
CONNECT BY PRIOR ๋ถ๋ชจ์์ปฌ๋ผ๋ช = ์์์์ปฌ๋ผ๋ช
- ๐
SELECTLEVEL: ํ์ฌ ๋ ธ๋์ Depth, Root =1SYS_CONNECT_BY_PATH(๊ฐ, ๊ตฌ๋ถ์): Root ๋ ธ๋์์๋ถํฐ ํ์ฌ ๋ ธ๋๊น์ง์ ๊ฒฝ๋ก๋ฅผ๊ฐ || ๊ตฌ๋ถ์ || ๊ฐ || ...์ผ๋ก ๋ง๋ค์ด ์ถ๋ ฅ๊ฐ์ ๊ตฌ์ฑํ๊ธฐ ์ํด ํด๋น ๋ ธ๋์ ์ปฌ๋ผ๊ฐ๋ค ํ์ฉ ๊ฐ๋ฅ
CONNECT_BY_ROOT ์ปฌ๋ผ๋ช: ํ์ฌ ๋ ธ๋์ Root ๋ ธ๋์ปฌ๋ผ๋ช์์ฑ๊ฐ ๋ฐํCONNECT_BY_ISLEAF: Leaf ๋ ธ๋์ผ ๊ฒฝ์ฐ1, ๊ทธ ์ธ0๋ฐํ
ORDER SIBILING BY ์ปฌ๋ผ๋ช: Level๋ก 1์ฐจ ์ ๋ ฌํ ๋ค,์ปฌ๋ผ๋ช์ผ๋ก 2์ฐจ ์ ๋ ฌ
โ โ Order By, ๊ณ์ธต ๊ตฌ์กฐ์ ์๊ด์์ด ์ ๋ ฌ
Pivot
OracleMSSQL
SQLํ์ฉ-3(๊ณ์ธตํ ์ฟผ๋ฆฌ, PIVOT, ์ ๊ทํํ์)
์์ 1, ์์ 2
- Group By์ ์์น์ ์ฌ์ฉ
Pivot
๐ Table ๋ฐ์ดํฐ๋ฅผ ์์ฝํ๊ณ , Row๋ฅผ Column์ผ๋ก ๋ฐ๊พธ์ด ์ฌ๊ตฌ์ฑํ๋ ๋ช
๋ น์ด
= ํ ์ปฌ๋ผ์ ์ฌ๋ฌ ์์ฑ๊ฐ(= Row) ๊ฐ๊ฐ์ด ์ปฌ๋ผ๋ช
์ผ๋ก ๋ฐ๋
SELECT์
FROM์
PIVOT (
์ง๊ณํจ์1(์ง๊ณ๋์์ปฌ๋ผ1) [[ AS ] ์ง๊ณ์ ๋์ฌ1 ], ...
FOR ์ปฌ๋ผ๋ช
IN (์ปฌ๋ผ๊ฐ1 [[ AS ] ์์ปฌ๋ผ๋ช
1 ], ...)
) [ AS ํผ๋ดํ
์ด๋ธ๋ช
]
[ ORDER BY์ ]
;- From์
FOR ์ปฌ๋ผ๋ช: ์ ์ปฌ๋ผ๋ช ์ผ๋ก ์ฌ์ฉํ๊ฒ ๋ ์์ฑ๊ฐ(= Row)๋ค์์ปฌ๋ผ๋ช๋ช ์์ปฌ๋ผ๋ช์ด ์ฌ๋ฌ ๊ฐ์ผ ๊ฒฝ์ฐ, ๋ฆฌ์คํธ( )๊ฐ ์ฌ ์ ์์FOR (์ปฌ๋ผ๋ช 1, ์ปฌ๋ผ๋ช 2, ...) IN ((์ปฌ๋ผ1๊ฐA, ์ปฌ๋ผ2๊ฐA, ...) [[ AS ] ์์ปฌ๋ผ๋ช A ], (์ปฌ๋ผ1๊ฐB, ์ปฌ๋ผ2๊ฐB, ...) [[ AS ] ์์ปฌ๋ผ๋ช B ], ...)
IN (์ปฌ๋ผ๊ฐ1 [[ AS ] ์์ปฌ๋ผ๋ช 1 ], ...): ์ ์ปฌ๋ผ๋ช ์ ์์ง๊ณ์ ๋์ฌ_์์ปฌ๋ผ๋ช- (
์ง๊ณ์ ๋์ฌ์์ ๊ฒฝ์ฐ)์์ปฌ๋ผ๋ช - (
์ง๊ณ์ ๋์ฌ,์์ปฌ๋ผ๋ช์์ ๊ฒฝ์ฐ)์ปฌ๋ผ๊ฐ
- ๋๋, Select์ ์ As (Alias)๋ฅผ ํตํด์๋ ๋ณ๊ฒฝ ๊ฐ๋ฅ
- Aggregate Function (์ง๊ณ ํจ์): ์ ์ปฌ๋ผ์ ์ ์ฅํ ์์ฑ๊ฐ๋ค(= Rows) ์ง๊ณ
- Order By์ , Select์
ํผ๋ดํ ์ด๋ธ๋ช๋ถ์ธ ๊ฒฝ์ฐ ํด๋น ์ ๋ค์์ ์ฌ์ฉ ๊ฐ๋ฅ
- Select์ ์ ์ง๊ณํจ์ + Case ๋ฅผ ๋ ๊ฒ๊ณผ ๋์ผ
SELECT ์ง๊ณํจ์( CASE FOR์ปฌ๋ผ๋ช WHEN ์ปฌ๋ผ๊ฐ1 THEN ์ง๊ณ๋์์ปฌ๋ผ END) [[ AS ] ์์ปฌ๋ผ๋ช ], [ ์ผ๋ฐ์ปฌ๋ผ, ] ... FROM์ [ GROUP BY ์ผ๋ฐ์ปฌ๋ผ ] ;
Unpivot
๐ Column์ Row๋ก ๋ฐ๊พธ๋ ๋ช
๋ น์ด
= ์ฌ๋ฌ ์ปฌ๋ผ๋ช
์ด ์๋ก์ด ์ปฌ๋ผ์ ์์ฑ๊ฐ(= Row)์ผ๋ก ๋ฐ๋
SELECT์
FROM์
UNPIVOT (
๊ธฐ์กด์์ฑ๊ฐ๋ด์์์ปฌ๋ผ๋ช
FOR ์์ปฌ๋ผ๋ช
IN (๊ธฐ์กด์ปฌ๋ผ๋ช
1 [[ AS ] ์๊ฐ1 ], ...)
) [ AS ํผ๋ดํ
์ด๋ธ๋ช
]
[ ORDER BY์ ]
;- From์
FOR ์์ปฌ๋ผ๋ช: ์ ์ปฌ๋ผ๋ช ์ ์- ๊ธฐ์กด์ ์ปฌ๋ผ๋ช
๋ค์ ๊ฐ๊ธฐ ๋ค๋ฅธ
์์ปฌ๋ผ๋ช์ ์์ฑ๊ฐ์ผ๋ก ๋ฐ๊พธ๊ณ ์ถ์ ๊ฒฝ์ฐ, ๋ฆฌ์คํธ( )๊ฐ ์ฌ ์ ์์FOR (์์ปฌ๋ผ๋ช 1, ์์ปฌ๋ผ๋ช 2, ...)- ์ ์๋
์์ปฌ๋ผ๋ช๊ฐ์ =IN์ ๊ฐAS๋ค( )์์์๊ฐ๊ฐ์
- ์ ์๋
- ๊ธฐ์กด์ ์ปฌ๋ผ๋ช
๋ค์ ๊ฐ๊ธฐ ๋ค๋ฅธ
IN (๊ธฐ์กด์ปฌ๋ผ๋ช 1 [[ AS ] ์๊ฐ1 ], ...): ๊ธฐ์กด ์ปฌ๋ผ๋ช ๊ฐ๊ฐ์ ์ด์ฉํด ์ ์์ฑ๊ฐ ์ ์- ์ฌ๋ฌ
๊ธฐ์กด์ปฌ๋ผ๋ช์ ํ๋์์๊ฐ์ผ๋ก ๋งค์นญํ ์ ์์IN ((๊ธฐ์กด์ปฌ๋ผ1, ๊ธฐ์กด์ปฌ๋ผ2, ...) AS ์๊ฐ, ...)
- ์ฌ๋ฌ
๊ธฐ์กด์์ฑ๊ฐ๋ด์์์ปฌ๋ผ๋ช: ์ ์์ฑ๊ฐ์ผ๋ก ์ฌ์ฉ๋ ๊ธฐ์กด ์ปฌ๋ผ๋ค์ ์์ฑ๊ฐ๋ค์ ๋ด๊ธฐ ์ํ ์ ์ปฌ๋ผ๋ช ์ ์- ์ ์๋
๊ธฐ์กด์์ฑ๊ฐ๋ด์์์ปฌ๋ผ๋ช๊ฐ์ =IN์ ๊ฐAS์( )์์๊ธฐ์กด์ปฌ๋ผ๋ช๊ฐ์
- ์ ์๋
- Order By์ , Select์
- Todo Cartesian Product
Regular Expression (์ ๊ท ํํ์)
Todo
[SQL] SQL ์ ๊ทํํ์ ๊ฐ์ด๋
SQLD ์ ๊ทํํ์
REGEXP_LIKE(๋ฌธ์์ด, ์ ๊ทํํ์ [, ์ต์ ]): ์ผ์น ์ฌ๋ถ ๋ฐํREGEXP_COUNT(๋ฌธ์์ด, ์ ๊ทํํ์ [, ์์์ ] [, ์ผ์น์ต์ ]): ์ผ์น ํ์ ๋ฐํREGEXP_SUBSTR(๋ฌธ์์ด, ์ ๊ทํํ์ [, ์์์ ] [, ์ผ์นํ์] [, ์๋ธํํ์]): ์ผ์นํ๋ ๋ถ๋ถ ๋ฌธ์์ด ๋ฐํREGEXP_REPLACE(๋ฌธ์์ด, ์ ๊ทํํ์, ๋ณ๊ฒฝ๋ฌธ์์ด [, ์์์ ] [, ์ผ์นํ์]): ์ผ์นํ๋ ๋ถ๋ถ์๋ณ๊ฒฝ๋ฌธ์์ด๋ก ๋์ฒดREGEXP_INSTR(๋ฌธ์์ด, ์ ๊ทํํ์ [, ์์์ ] [, ์ผ์นํ์] [, ๋ฐํ์ต์ ] [, ์ผ์น์ต์ ] [, ์๋ธํํ์]): ์ผ์นํ๋ ์์น์ ์์ ์ธ๋ฑ์ค ๋ฐํ (1-indexed)
โMSSQLPATINDEXLIKE