DataBaseRDBSQLD

๐Ÿ“Œ Structured Query Language (์งˆ์˜์–ด), RDBMS์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด

DML

๐Ÿ“Œ Data Manipulation Language, DB ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๊ธฐ ์œ„ํ•œ ๋ฌธ๋ฒ•

  1. Query Language (์งˆ์˜์–ด), Declarative DML (์„ ์–ธ์  DML): ์œ ์ €๊ฐ€ What๋งŒ ๋ช…์‹œํ•˜๊ณ , How๋Š” DBMS๊ฐ€ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•ด ์ฃผ๋Š” DML
    = SQL
  2. Procedural DML (์ ˆ์ฐจ์  DML): ์œ ์ €๊ฐ€ What + How ๋ช…์‹œ

Insert

INSERT INTO ํ…Œ์ด๋ธ”๋ช… [ (์ปฌ๋Ÿผ๋ช…1, ์ปฌ๋Ÿผ๋ช…2, ...) ] VALUES (๋ฐ์ดํ„ฐ1, ๋ฐ์ดํ„ฐ2, ...);
  • ๋ช…์‹œ๋˜์ง€ ์•Š์€ ์ปฌ๋Ÿผ์€ (Create ๋ฌธ์—์„œ DEFAULT ๊ฐ’์„ ์ •์˜ํ•ด๋‘” ๊ฒฝ์šฐ) ๊ธฐ๋ณธ๊ฐ’์ด ์ฑ„์›Œ์ง€๊ฒŒ ๋จ, ์ •์˜ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ null
  • ์ปฌ๋Ÿผ๋ช… () ๋ฆฌ์ŠคํŠธ ์ƒ๋žตํ•  ๊ฒฝ์šฐ, 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๋ฅผ ์“ธ ์ˆ˜๋„ ์žˆ์Œ
    • Delete๋ฅผ ์“ฐ๋ฉด โค๏ธ ์ดํ›„ Commit ๋ช…๋ น์œผ๋กœ Log๋ฅผ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์–ด Rollback ๊ฐ€๋Šฅ, ๐Ÿ’”์‹œ์Šคํ…œ ๋ถ€ํ•˜๋จ
      โ†”MSSQL DML๋„ Auto Commit ๋Œ€์ƒ
  • ์กฐ๊ฑด์— ๋งž๋Š” 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

  1. ์ˆซ์ž: ์‚ฌ์น™ ์—ฐ์‚ฐ์ž +, -, *, /, ( )
    • null๊ณผ์˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ ๋ฌด์กฐ๊ฑด null
  2. ๋ฌธ์ž: ํ•ฉ์„ฑ ์—ฐ์‚ฐ์ž ||

Function

  1. ์ˆซ์ž
    • ABS(์ˆ˜)
    • SIGN(์ˆ˜): ๋ถ€ํ˜ธ์— ๋”ฐ๋ผ 1, 0, -1 ์ค‘ ํ•˜๋‚˜ ๋ฐ˜ํ™˜
    • ROUND(์ˆ˜ [, ์ž๋ฆฟ์ˆ˜]): ์ž๋ฆฟ์ˆ˜๊นŒ์ง€ ๋ฐ˜์˜ฌ๋ฆผ, ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ ์ •์ˆ˜๋ถ€ ์ž๋ฆฟ์ˆ˜๋ฅผ ์˜๋ฏธ, Default = 0
    • TRUNC(์ˆ˜ [, ์ž๋ฆฟ์ˆ˜]): ์ž๋ฆฟ์ˆ˜๊นŒ์ง€ ๋ฒ„๋ฆผ, Default = 0
    • CEIL(์ˆ˜): ์†Œ์ˆ˜์  ์ดํ•˜ ์˜ฌ๋ฆผ
      โ†”MSSQL CEILING
    • FLOOR(์ˆ˜): ์†Œ์ˆ˜์  ์ดํ•˜ ๋ฒ„๋ฆผ
    • MOD(ํ”ผ์ œ์ˆ˜, ์ œ์ˆ˜)
      • ์ œ์ˆ˜๊ฐ€ 0์ด๋ฉด ํ”ผ์ œ์ˆ˜ ๊ทธ๋Œ€๋กœ ๋ฆฌํ„ด
      • ๋‚˜๋จธ์ง€ ๋ถ€ํ˜ธ๋Š” ํ”ผ์ œ์ˆ˜์˜ ๋ถ€ํ˜ธ๋ฅผ ๋”ฐ๋ฆ„
    • POWER(m, n): m^n
    • SQRT(์ˆ˜): ๋ฃจํŠธ๊ฐ’ ๋ฆฌํ„ด
  2. ๋ฌธ์ž
    • CHR(์•„์Šคํ‚ค์ฝ”๋“œ)
      โ†”MSSQL CHAR
    • LOWER(๋Œ€๋ฌธ์žํฌํ•จ๋ฌธ์ž์—ด): ๋Œ€ โžก ์†Œ
    • UPPER(์†Œ๋ฌธ์žํฌํ•จ๋ฌธ์ž์—ด): ์†Œ โžก ๋Œ€
    • LTRIM(๋ฌธ์ž์—ด [, ํŠน์ •๋ฌธ์ž์ง‘ํ•ฉ]): ์ธ์ž๊ฐ€ ํ•˜๋‚˜๋ฟ์ด๋ฉด ์™ผ์ชฝ์˜ ๋ชจ๋“  ๊ณต๋ฐฑ ์ œ๊ฑฐ, ์•„๋‹ˆ๋ฉด ๋งจ ์™ผ์ชฝ ๋ฌธ์ž๋ถ€ํ„ฐ ํŠน์ •๋ฌธ์ž์ง‘ํ•ฉ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ œ๊ฑฐ (ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๋” ํƒ์ƒ‰ํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์ข…๋ฃŒ)
      โ†”MSSQL ๊ณต๋ฐฑ ์ œ๊ฑฐ๋งŒ ๊ฐ€๋Šฅ
    • RTRIM(๋ฌธ์ž์—ด [, ํŠน์ •๋ฌธ์ž์—ด])
    • TRIM([์œ„์น˜ ํŠน์ •๋ฌธ์ž์ง‘ํ•ฉ FROM] ๋ฌธ์ž์—ด): ์ธ์ž๊ฐ€ ํ•˜๋‚˜๋ฟ์ด๋ฉด ๋ฌธ์ž์—ด ์–‘ ์˜†์˜ ๊ณต๋ฐฑ ์ œ๊ฑฐ, ์•„๋‹ˆ๋ฉด ์œ„์น˜์—์„œ๋ถ€ํ„ฐ ํŠน์ •๋ฌธ์ž์ง‘ํ•ฉ ํฌํ•จ ์—ฌ๋ถ€ ํ™•์ธํ•ด๊ฐ€๋ฉฐ ์ œ๊ฑฐ
      • ์œ„์น˜: LEADING(์™ผ์ชฝ), TRAILING(์˜ค๋ฅธ์ชฝ), BOTH (์–‘์ชฝ)
    • LPAD(๋ฌธ์ž์—ด, n, ๋ฌธ์ž): ๋ฌธ์ž์—ด ๋งจ ์™ผ์ชฝ์— ๋ฌธ์ž๋ฅผ n๊ฐœ ๋ง๋ถ™์ž„
    • RPAD(๋ฌธ์ž์—ด, n, ๋ฌธ์ž)
    • SUBSTR(๋ฌธ์ž์—ด, ์‹œ์ž‘์  [, ๊ธธ์ด]): ์‹œ์ž‘์ ์€ 1๋ถ€ํ„ฐ ์‹œ์ž‘ (1-indexed), ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ ๋งจ ๋’ค์—์„œ๋ถ€ํ„ฐ
      โ†”MSSQL SUBSTRING(๋ฌธ์ž์—ด)
    • INSTR(๋ฌธ์ž์—ด, ํŠน์ •๋ฌธ์ž์—ด [, ์‹œ์ž‘์ ] [, n]): ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘์ ์—์„œ๋ถ€ํ„ฐ, n๋ฒˆ์งธ๋กœ ๋ฐœ๊ฒฌ๋œ ํŠน์ •๋ฌธ์ž์—ด์˜ ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜ (1-indexed), ์—†์œผ๋ฉด 0
      • Default = 1, 1
        โ†”MSSQL CHARINDEX
    • LENGTH(๋ฌธ์ž์—ด)
      โ†”MSSQL LEN
    • REPLACE(๋ฌธ์ž์—ด, ๋ณ€๊ฒฝ์ „๋ฌธ์ž์—ด [, ๋ณ€๊ฒฝํ›„๋ฌธ์ž์—ด]): ๋ณ€๊ฒฝํ›„๋ฌธ์ž์—ด ์—†์„ ๊ฒฝ์šฐ ๊ทธ๋ƒฅ ์ œ๊ฑฐ, ์žˆ์„ ๊ฒฝ์šฐ ์น˜ํ™˜
    • TRANSLATE(๋ฌธ์ž์—ด, ๋ณ€๊ฒฝ์ „๋ฌธ์ž๋“ค, ๋ณ€๊ฒฝํ›„๋ฌธ์ž๋“ค): ๋ณ€๊ฒฝ์ „๋ฌธ์ž๋“ค, ๋ณ€๊ฒฝํ›„๋ฌธ์ž๋“ค์„ ๊ฐ™์€ ์ธ๋ฑ์Šค์˜ ๋ฌธ์ž๋ผ๋ฆฌ 1:1 ๋งคํ•‘์‹œํ‚จ ๋’ค ๋ฌธ์ž์—ด ๋‚ด์—์„œ ์น˜ํ™˜
    • CONCAT(๋ฌธ์ž์—ด1, ๋ฌธ์ž์—ด2)
  3. ๋‚ ์งœ
    • SYSDATE: ํ˜„์žฌ์˜ ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ (๐Ÿ”Ž 2021-09-12 22:08:08, nls_date_format์— ๋”ฐ๋ผ ํ˜•์‹ ๋‹ค๋ฆ„)
      โ†”MSSQL GETDATE
    • EXTRACT(๋‹จ์œ„ FROM ๋‚ ์งœ๋ฐ์ดํ„ฐ): ๋‚ ์งœ๋ฐ์ดํ„ฐ์˜ ํŠน์ • ๋‹จ์œ„์— ๋Œ€ํ•œ ๊ฐ’๋งŒ์„ ์ •์ˆ˜๋กœ ๋ฆฌํ„ด
      • ๋‹จ์œ„: YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
        โ†”MSSQL DATEPART(๋‹จ์œ„, ๋‚ ์งœ๋ฐ์ดํ„ฐ)
    • ADD_MONTHS(๋‚ ์งœ๋ฐ์ดํ„ฐ, ๊ฐœ์›”์ˆ˜)
      • ํ•ด๋‹น ์›”์— ๊ฐ™์€ ์ผ์ž๊ฐ€ ์—†์œผ๋ฉด, ํ•ด๋‹น ์›”์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์ผ์ž ๋ฆฌํ„ด
        โ†”MSSQL DATEADD(๋‹จ์œ„, ๊ฐœ์›”์ˆ˜, ๋‚ ์งœ๋ฐ์ดํ„ฐ)
    • LAST_DAY(๋‚ ์งœ๋ฐ์ดํ„ฐ): ํ•ด๋‹น ์›”์˜ ๋งˆ์ง€๋ง‰ ์ผ์ž ๋ฆฌํ„ด
    • NEXT_DAY(๋‚ ์งœ๋ฐ์ดํ„ฐ, ์š”์ผ์ˆซ์ž): ํ•ด๋‹น ๋‚ ์งœ๋ฐ์ดํ„ฐ ์ดํ›„ ์ฒ˜์Œ์œผ๋กœ ๋Œ์•„์˜ค๋Š” ์š”์ผ์ˆซ์ž์˜ ๋‚ ์งœ ๋ฆฌํ„ด
      • ์š”์ผ์ˆซ์ž: 1(์ผ), 2(์›”), โ€ฆ
    • ROUND(๋‚ ์งœ๋ฐ์ดํ„ฐ, ๋‹จ์œ„): ๋‹จ์œ„๊นŒ์ง€(์ด์ „ ์ž๋ฆฌ์—์„œ) ๋ฐ˜์˜ฌ๋ฆผ (์ฆ‰, ๋‹จ์œ„๊นŒ์ง€ ํ‘œ์‹œ)
      • ๋‹จ์œ„๊ฐ€ MONTH์ผ ๊ฒฝ์šฐ, 15์ผ๊นŒ์ง€๋Š” ๊ฐ™์€ ๋‹ฌ์˜ 1์ผ, 16์ผ๋ถ€ํ„ฐ๋Š” ๋‹ค์Œ ๋‹ฌ์˜ 1์ผ
    • TRUNC(๋‚ ์งœ๋ฐ์ดํ„ฐ, ๋‹จ์œ„): ๋‹จ์œ„๊นŒ์ง€ ๋ฒ„๋ฆผ
  4. ๋ช…์‹œ์  ํ˜•๋ณ€ํ™˜
    • TO_NUMBER(๋ฌธ์ž์—ด)
    • TO_CHAR(์ˆ˜/๋‚ ์งœ [, ํฌ๋งท๋ฌธ์ž์—ด])
    • TO_DATE(๋‚ ์งœ๋ฌธ์ž์—ด, ํฌ๋งท๋ฌธ์ž์—ด)
    • CAST(๋ฐ”๊ฟ€๊ฐ’ AS ํƒ€์ž…): ๋ฐ”๊ฟ€๊ฐ’์„ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜
      โ†” ๋ฌต์‹œ์ /์•”์‹œ์  ํ˜•๋ณ€ํ™˜, Createํ•œ ์Šคํ‚ค๋งˆ์™€ Insertํ•œ ๋ฐ์ดํ„ฐ์˜ ํƒ€์ž… ๋‹ค๋ฅผ ๊ฒฝ์šฐ ๋ฐœ์ƒ
      ๐Ÿ’” ์„ฑ๋Šฅ ์ €ํ•˜, ์—๋Ÿฌ์˜ ๊ฐ€๋Šฅ์„ฑ
      โ†”MSSQL CONVERT, CAST, โ€ฆ
  5. null
    • NVL(๊ฐ’, ๊ธฐ๋ณธ๊ฐ’): ๊ฐ’์ด null์ด ์•„๋‹ˆ๋ฉด ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜, null์ด๋ฉด ๊ธฐ๋ณธ๊ฐ’ ๋Œ€์‹  ๋ฐ˜ํ™˜
      • ๊ฐ’ ๋Œ€์‹  ์ปฌ๋Ÿผ๋ช…๋„ ๊ฐ€๋Šฅ (๐Ÿ”Ž Select์ ˆ ์•ˆ)
        โ†”MSSQL ISNULL
        โ†”MySQL IFNULL
    • 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

  1. ๋น„๊ต ์—ฐ์‚ฐ์ž: =, <, <=, >, >=
    • null๊ณผ์˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ ๋ฌด์กฐ๊ฑด False โžก IS NULL ์„ ์‚ฌ์šฉํ•ด์•ผํ•จ
  2. ๋ถ€์ • ๋น„๊ต ์—ฐ์‚ฐ์ž: !=, ^=, <>, NOT ๋น„๊ต์กฐ๊ฑด์ ˆ
  3. 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 ํ•˜๋‚˜๋ผ๋„ ์กด์žฌํ•˜๋ฉด True
    • UNIQUE(๊ฐ’1, ๊ฐ’2, ...): ์ค‘๋ณต ์—†์œผ๋ฉด True
    • IS NULL
  4. ๋ถ€์ • SQL ์—ฐ์‚ฐ์ž
    • NOT (์กฐ๊ฑด์ ˆ)/SQL์—ฐ์‚ฐ์ž
    • IS NOT NULL
  5. ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž
    • ๋ฌด์กฐ๊ฑด ( ) > 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ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ)
  • ์ข…๋ฅ˜
    1. COUNT(์ปฌ๋Ÿผ๋ช…): null์ธ ์ปฌ๋Ÿผ๋ช… ์ œ์™ธํ•˜๊ณ  ๊ณ„์‚ฐ
      • COUNT(*): null ํฌํ•จ ๋ชจ๋“  Row
      • COUNT(DISTINCT ์ปฌ๋Ÿผ๋ช…): ์ค‘๋ณต ์ œ๊ฑฐ ํ›„ ๊ณ„์‚ฐ
      • COUNT(๋‹จ์ผ์ƒ์ˆ˜) = 1
    2. SUM(์ปฌ๋Ÿผ๋ช…)
    3. AVG(์ปฌ๋Ÿผ๋ช…)
    4. MIN(์ปฌ๋Ÿผ๋ช…)
    5. MAX(์ปฌ๋Ÿผ๋ช…)
    6. VARIANCE(์ปฌ๋Ÿผ๋ช…): ๋ถ„์‚ฐ = ํ‘œ์ค€ํŽธ์ฐจ
    7. 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, ...
    1. ์†Œ๊ณ„ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋กœ ๋“ฑ์žฅํ•˜๋Š” ์กฐํ•ฉ ๊ฐ๊ฐ์„ ํ•˜๋‚˜์˜ Subquery๋กœ ๋งŒ๋“ค๊ธฐ
      • ๊ฐ Subquery์—์„œ Group By ํ™œ์šฉ
    2. ๊ฐ Subquery์— Aggregate Function (์ง‘๊ณ„ ํ•จ์ˆ˜) COUNT(*) ์ถ”๊ฐ€ โžก ์†Œ๊ณ„ ๋ฐ ์ง‘๊ณ„ ๊ณ„์‚ฐ
    3. ๋ชจ๋“  Subquery๋ฅผ Set Operation UNION ALL๋กœ ์—ฐ๊ฒฐ
  • ์ข…๋ฅ˜
    1. 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, ํ•ฉ๊ณ„
        • ์†Œ๊ณ„๊ฐ’ ๋ฐ ์†Œ๊ทธ๋ฃน์˜ ๊ธฐ์ค€์ด ๋˜๋Š” ์ปฌ๋Ÿผ์˜ ์†์„ฑ๊ฐ’๋“ค์€ ์ฑ„์›Œ์ง, ๊ทธ ์™ธ ์†์„ฑ๊ฐ’์€ null
          • null์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์„ ์ฑ„์šฐ๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ, Grouping ํ•จ์ˆ˜ ํ™œ์šฉ
      • ํ•ฉ๊ณ„: ๋งจ ๋งˆ์ง€๋ง‰์— Row ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€๋จ, ํ•ฉ๊ณ„ ์ปฌ๋Ÿผ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์†์„ฑ๊ฐ’์€ null
    2. CUBE (A, B, ... , K): ๋ชจ๋“  ์กฐํ•ฉ์œผ๋กœ ๊ทธ๋ฃนํ•‘ํ•˜์—ฌ ์†Œ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ์ „์ฒด ์ด ํ•ฉ๊ณ„ ๊ณ„์‚ฐ
      = ROLLUP + ฮฑ
      • ๐Ÿ”Ž CUBE (A, B, C) โžก A, B, C, A, B, A, C, B, C, A, B, C, ํ•ฉ๊ณ„
    3. 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 ํ•จ์ˆ˜๋กœ ๊ฐ์Œ€ ๊ฒฝ์šฐ,
    1. GROUPING(์ปฌ๋Ÿผ๋ช…)์„ ์ด๋ฆ„์œผ๋กœ ํ•˜๋Š” ์ปฌ๋Ÿผ Result Table์— ์ƒ์„ฑ
    2. ์†Œ๊ณ„/์ดํ•ฉ Row์— null ๋Œ€์‹ 1์„, ๊ทธ ์™ธ Row์—๋Š” 0์„ ์ฑ„์›Œ๋„ฃ๊ฒŒ ๋จ
  • Case ์ ˆ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ, 1 ๋Œ€์‹  ์น˜ํ™˜๋ฌธ์ž์—ด์„ ๋„ฃ์–ด ์†Œ๊ณ„/์ดํ•ฉ Row๋ฅผ ํ™•์‹คํžˆ ๊ตฌ๋ถ„ํ•จ๊ณผ ๋™์‹œ์— ์ปฌ๋Ÿผ๋ช…๊ณผ GROUPING(์ปฌ๋Ÿผ๋ช…) ์ปฌ๋Ÿผ์„ ํ•ฉ์น  ์ˆ˜ ์žˆ์Œ
    SELECT 
    	CASE GROUPING(์ปฌ๋Ÿผ๋ช…) 
    		WHEN 1 THEN ์น˜ํ™˜๋ฌธ์ž์—ด ELSE ์ปฌ๋Ÿผ๋ช…
    	END [[ AS ] ์ปฌ๋Ÿผ๋ช… ],
    	...
    ...
    • Oracle DECODE
      SELECT DECODE(GROUPING(์ปฌ๋Ÿผ๋ช…), 1, ์น˜ํ™˜๋ฌธ์ž์—ด, ์ปฌ๋Ÿผ๋ช…) [[ AS ] ์ปฌ๋Ÿผ๋ช… ], ...
      ...

Order By

 ORDER BY 1์ฐจ์ •๋ ฌ๊ธฐ์ค€์ปฌ๋Ÿผ(๋ฒˆํ˜ธ) [ DESC | ASC ] [ NULLS FIRST | NULLS LAST ], ...
  • Default = ASC
  • Select ์ดํ›„ ์‹คํ–‰ โžก Select๋œ ์ปฌ๋Ÿผ๋ช… ๋˜๋Š” ๋ฒˆํ˜ธ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • ๋ฒˆํ˜ธ: Select์ ˆ์— ๊ธฐ์ˆ ๋œ ์ˆœ์„œ๋Œ€๋กœ 1, โ€ฆ
  • null
    • Oracle ์ตœ๋Œ“๊ฐ’ ์ทจ๊ธ‰,MSSQL ์ตœ์†Ÿ๊ฐ’ ์ทจ๊ธ‰
    • NULLS FIRST, NULLS LAST๋กœ ์ˆœ์„œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

Join

๐Ÿ“Œ Normalization (์ •๊ทœํ™”)๋œ Table์„ ์—ฐ๊ฒฐํ•˜์—ฌ, ๊ด€๊ณ„ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•

  1. (Inner) Join
  2. Equi-Join: Join์˜ ์กฐ๊ฑด์ด =
    • ๋‘ Table์— ๋‹ค ์กด์žฌํ•˜๋Š” ์ปฌ๋Ÿผ๋ช…์ด๋”๋ผ๋„, Select ์‹œ ํ…Œ์ด๋ธ”๋ช….์ปฌ๋Ÿผ๋ช…์ฒ˜๋Ÿผ ์ œ๋Œ€๋กœ ๋ช…์‹œ ๋˜๋Š” As (Alias) ํ™œ์šฉ ํ•„์š”
      โ†” Natural Join, Join ~ Using์ ˆ
      โ†” Non Equi-Join, ๋‹ค๋ฅธ ์กฐ๊ฑด์œผ๋กœ Join
  3. Natural Join: ์„œ๋กœ ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ชจ๋“  ์†์„ฑ ๊ฐ„ Equi-Join
    • Result Table์— ์กฐ๊ฑด์ด ๋˜๋Š” ์†์„ฑ์ด ํ•˜๋‚˜๋งŒ ํฌํ•จ๋จ
    • Select ์‹œ ์ปฌ๋Ÿผ๋ช…๋งŒ ์ ์–ด์•ผ ํ•จ (ํ…Œ์ด๋ธ”๋ช….์ปฌ๋Ÿผ๋ช…์ด๋‚˜ As (Alias) ๋ถˆ๊ฐ€)
      ~= Join ~ Using์ ˆ
      โ†” Equi-Join
    • Oracle Join ~ Using์ ˆ โžก ์ด๋ฆ„์ด ๊ฐ™์€ ์ปฌ๋Ÿผ ์ค‘ ์ผ๋ถ€๋งŒ Join ์กฐ๊ฑด์œผ๋กœ ํ™œ์šฉ ๊ฐ€๋Šฅ
    • MSSQL ์ง€์› X
      โ†” Equi-Join, ๊ฐ™์€ ์ด๋ฆ„์˜ ์†์„ฑ์œผ๋กœ Joinํ•˜๋”๋ผ๋„ ์–‘์ชฝ ํ…Œ์ด๋ธ”์˜ ์†์„ฑ ๋‘˜ ๋‹ค ํฌํ•จ
  4. 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) ๋ฌธ๋ฒ• ์“ฐ๊ธฐ
  5. Cross Join: ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์กฐํ•ฉ ์ถœ๋ ฅ
    = Cartesian Product (์นดํ‹ฐ์…˜ ๊ณฑ)

ANSI (Standard, ํ‘œ์ค€) Join

โค๏ธ ๋ฒค๋”๋ณ„ SQL ๋ฌธ๋ฒ•์˜ ์ฐจ์ด๋กœ ์ธํ•œ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ ๋ฐฉ์ง€
โ†” ๊ทธ๋ƒฅ From, Where์ ˆ ํ™œ์šฉ

FROM ํ…Œ์ด๋ธ”๋ช…1 [ ์ข…๋ฅ˜ ] JOIN ํ…Œ์ด๋ธ”๋ช…2
ON ์กฐ๊ฑด์ ˆ
  • ์กฐ๊ฑด์ ˆ์„ Where ๋Œ€์‹  On์ ˆ์— ๋‘๊ธฐ
    • ์ฐจ์ด์ : Outer Join์˜ ์กฐ๊ฑด์ด ๋˜๋Š” ์ชฝ Table์€ On์ ˆ๊ณผ ๊ด€๊ณ„ ์—†์ด ํ•ญ์ƒ ํฌํ•จ
      1. ์กฐ๊ฑด์ด ๋˜๋Š” ์ชฝ Table์˜ ๋ชจ๋“  Row ์ถ”๊ฐ€
      2. On์ ˆ์˜ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•  ๊ฒฝ์šฐ, ์กฐ๊ฑด์ด ๋˜๋Š” ์ชฝ Row์— ์ง์ด ๋งž๋Š” Row๋ฅผ ๋ง๋ถ™์ž„
      3. Join ์ข…๋ฃŒ, Join์˜ Result Table์ด From์ ˆ ๋Œ€์ฒดํ•จ
      4. Where์ ˆ ์กฐ๊ฑด์œผ๋กœ ํ•„ํ„ฐ๋ง
    • Natural, Cross Join์˜ ๊ฒฝ์šฐ On์ ˆ X
  • ์ข…๋ฅ˜: INNER, NATURAL, [ LEFT | RIGHT | FULL ] OUTER, CROSS
    • Default = INNER
    • MSSQL NATURAL JOIN ์ง€์› X

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

  1. Nested-Loop: ํ•œ Record์— ๋Œ€ํ•ด, ๋‹ค๋ฅธ Table์˜ ๋ชจ๋“  Record์™€ ์กฐ๊ฑด ํ™•์ธ
    • โฐ (# Outer Records * # Inner Blocks) + # Outer Blocks
  2. Block Nested-Loop: ํ•œ Block ์•ˆ์˜ Record์— ๋Œ€ํ•ด, ๋‹ค๋ฅธ Table์˜ ๋ชจ๋“  Record์™€ ์กฐ๊ฑด ํ™•์ธ
    • โฐ (# Outer Blocks * # Inner Blocks) + # Outer Blocks
  3. Indexed Nested-Loop: Join ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ Index (์ธ๋ฑ์Šค) ์กด์žฌํ•  ๋•Œ
    • โฐ # Outer Blocks + (# Outer Records * ์ธ๋ฑ์Šคํƒ์ƒ‰์‹œ๊ฐ„)

Merge Join

  • Equi-Join, Natural Join์—๋งŒ ๊ฐ€๋Šฅ
  1. (์ •๋ ฌ ์•ˆ ๋œ ๊ฒฝ์šฐ) External Merge Sort ์ˆ˜ํ–‰
    ๋ฐ๋ฒ ์‹œ > ch15.pptxย  (์›น ๋ณด๊ธฐ)
    1. Initial Run ์ƒ์„ฑ: ํ•œ Buffer Page์— ํ•œ ๋ฒˆ์— ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋Š” ํฌ๊ธฐ๋ฅผ ์˜ฌ๋ฆฐ ๋’ค Internal Sorting์„ ํ†ตํ•ด ์ดˆ๊ธฐ Run ์ƒ์„ฑ
    2. Merge: k-1๊ฐœ Buffer์— ๊ฐ๊ฐ Run์„ ์˜ฌ๋ฆฐ ๋’ค, ์‹œ์ž‘์ ์„ ํฌ์ธํ„ฐ๋กœ ๊ฐ€๋ฆฌํ‚จ ๋’ค ๋น„๊ตํ•ด๊ฐ€๋ฉฐ Output Page์— ์ˆœ์„œ๋Œ€๋กœ ๊ธฐ๋กํ•˜์—ฌ k-1๋ฐฐ ๋” ํฐ ํฌ๊ธฐ์˜ Run ์ƒ์„ฑ ๐Ÿ”ƒ
      • ์ตœ์†Œ 3๊ฐœ์˜ Page ํ•„์š”
      • k-way
  2. ์ •๋ ฌ๋œ ๋‘ ํ…Œ์ด๋ธ”์˜ ์‹œ์ž‘์ ์„ ํฌ์ธํ„ฐ๋กœ ๊ฐ€๋ฆฌํ‚จ ๋’ค ๋น„๊ตํ•ด๊ฐ€๋ฉฐ, ์กฐ๊ฑด์— ๋งž๋Š” ๊ฒฝ์šฐ 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

  1. ๋ฌธ์ž
    • CHAR: ๊ณ ์ •
      • ๋น„๊ต ์—ฐ์‚ฐ ์‹œ, Trimํ•œ ํ›„ ๋น„๊ต
    • VARCHAR: ๊ฐ€๋ณ€
    • CLOB
    • ์˜์–ด๋Š” 1 byte, ํ•œ๊ธ€์€ 2~3 byte
  2. ์ˆซ์ž
    • NUMBER
  3. ๋‚ ์งœ
    • DATE

Constraint

= Integrity Constraint (๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ)

  • ์ •์˜ ๋ฐฉ๋ฒ•
    1. ์ปฌ๋Ÿผ ์ œ์•ฝ: ์ปฌ๋Ÿผ ์ •์˜ ๋’ค์— ๋ง๋ถ™์ด๊ธฐ
    2. ํ…Œ์ด๋ธ” ์ œ์•ฝ: ์ปฌ๋Ÿผ ์ •์˜๊ฐ€ ๋‹ค ๋๋‚œ ๋’ค Constraint๋ฌธ ์ถ”๊ฐ€
      • ํ•œ ์ œ์•ฝ์ด ๋ณต์ˆ˜ ๊ฐœ์˜ ์ปฌ๋Ÿผ๊ณผ ์—ฐ๊ด€๋œ ๊ฒฝ์šฐ, ํ…Œ์ด๋ธ” ์ œ์•ฝ์œผ๋กœ๋งŒ ๊ฐ€๋Šฅ
      • Alter ๋ฌธ์œผ๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
  • ์ข…๋ฅ˜
    1. PRIMARY KEY
      CONSTRAINT ์ œ์•ฝ๋ช… PRIMARY KEY (์ปฌ๋Ÿผ๋ช…1, ...)
    2. Foreign Key REFERNECES ์ฐธ์กฐํ…Œ์ด๋ธ”๋ช…(์ปฌ๋Ÿผ๋ช…)
      CONSTRAINT ์ œ์•ฝ๋ช… FOREIGN KEY (์ปฌ๋Ÿผ๋ช…1, ...) REFERENCES ์ฐธ์กฐํ…Œ์ด๋ธ”๋ช…(์ปฌ๋Ÿผ๋ช…A, ...)
    3. UNIQUE
      CONSTRAINT ์ œ์•ฝ๋ช… UNIQUE(์ปฌ๋Ÿผ๋ช…1, ...)
      • null์€ ์ค‘๋ณต ๊ฐ€๋Šฅ
    4. NOT NULL
      • ํ…Œ์ด๋ธ” ์ œ์•ฝ์œผ๋กœ ์ •์˜ ๋ถˆ๊ฐ€
    5. 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์œผ๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•จ
  1. Add: ์ƒˆ ์ปฌ๋Ÿผ ์ถ”๊ฐ€
    ALTER TABLE ํ…Œ์ด๋ธ”๋ช… ADD ์ปฌ๋Ÿผ๋ช… ํƒ€์ž…(ํฌ๊ธฐ);
    ALTER TABLE ํ…Œ์ด๋ธ”๋ช… ADD (์ปฌ๋Ÿผ๋ช…1 ํƒ€์ž…(ํฌ๊ธฐ), ์ปฌ๋Ÿผ๋ช…2 ํƒ€์ž…(ํฌ๊ธฐ), ...);
    • ์ถ”๊ฐ€ํ•  ์ปฌ๋Ÿผ์ด ํ•˜๋‚˜๋ฟ์ผ ๊ฒฝ์šฐ, ๋ฆฌ์ŠคํŠธ ( ) ์žˆ๋“  ์—†๋“  ์ƒ๊ด€ ์—†์Œ
  2. Drop Column: ๊ธฐ์กด ์ปฌ๋Ÿผ ์‚ญ์ œ
    ALTER TABLE ํ…Œ์ด๋ธ”๋ช… DROP COLUMN ์ปฌ๋Ÿผ๋ช…;
    • ์‚ญ์ œ๋œ ์ปฌ๋Ÿผ ๋ณต๊ตฌ ๋ถˆ๊ฐ€
  3. Modify: ๊ธฐ์กด ์ปฌ๋Ÿผ๋“ค ์ˆ˜์ •
    ALTER TABLE ํ…Œ์ด๋ธ”๋ช… MODIFY ์ปฌ๋Ÿผ๋ช… ํƒ€์ž…(ํฌ๊ธฐ) [ DEFAULT ๊ฐ’ ] [ ์ œ์•ฝ์กฐ๊ฑด ];
    ALTER TABLE ํ…Œ์ด๋ธ”๋ช… MODIFY (์ปฌ๋Ÿผ๋ช…1 ํƒ€์ž…(ํฌ๊ธฐ) [ DEFAULT ๊ฐ’ ] [ ์ œ์•ฝ์กฐ๊ฑด ], ...);
    • DEFAULT๋ฅผ ์ˆ˜์ •ํ•˜๋”๋ผ๋„ ๊ธฐ์กด ์ปฌ๋Ÿผ์—๋Š” ๋ณ€ํ™” X
      โ†”MSSQL ALTER COLUMN
  4. Rename Column: ์ปฌ๋Ÿผ๋ช… ๋ณ€๊ฒฝ
    ALTER TABLE ํ…Œ์ด๋ธ”๋ช… RENAME COLUMN ๊ธฐ์กด์ปฌ๋Ÿผ๋ช… TO ์ƒˆ์ด๋ฆ„;
    โ†” Rename, ํ…Œ์ด๋ธ”๋ช… ๋ณ€๊ฒฝ
  5. 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 ์„ธ์ด๋ธŒํฌ์ธํŠธ๋ช… ];
  • Insert, Delete, Update ํ›„ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ์ทจ์†Œ

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

๐Ÿ“Œ ํŠน์ • ๊ถŒํ•œ๋“ค์„ ํ•˜๋‚˜์˜ ์ง‘ํ•ฉ์œผ๋กœ ๋ฌถ์–ด ์ด๋ฆ„ ๋ถ™์ธ ๊ฒƒ

  1. Role ์ƒ์„ฑ
    CREATE ROLE ์—ญํ• ๋ช…;
  2. Role์— ๊ถŒํ•œ ๋ถ€์—ฌ
    GRANT ๊ถŒํ•œ TO ์—ญํ• ๋ช…;
  3. Role์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ€์—ฌ
    GRANT ์—ญํ• ๋ช… TO ์œ ์ €๋ช…;

Advanced SQL

Subquery

๐Ÿ“Œ ํ•œ ์ฟผ๋ฆฌ ์•ˆ์— ์กด์žฌํ•˜๋Š” ๋˜๋‹ค๋ฅธ ์ฟผ๋ฆฌ
= Select ๋ฌธ ๋‚ด๋ถ€์˜ Select, From, Where/Having ์ ˆ์— ํฌํ•จ๋œ ๋˜ ๋‹ค๋ฅธ Select ๋ฌธ
โ†” Main Query, ๋งจ ๋ฐ”๊นฅ์˜ ์ฟผ๋ฆฌ

Scalar Subquery

  • ์ปฌ๋Ÿผ ๋Œ€์‹  ์‚ฌ์šฉ = โญํ•˜๋‚˜๋งŒ Select
  • ์ฃผ๋กœ Select ์ ˆ์— ์œ„์น˜

Inline View

  • ํ…Œ์ด๋ธ” ๋Œ€์‹  ์‚ฌ์šฉ
  • From ์ ˆ์— ์œ„์น˜

Nested Subquery

  • Where ๋˜๋Š” Having ์ ˆ์— ์œ„์น˜
  • ์ข…๋ฅ˜
    1. Main Query์™€์˜ ๊ด€๊ณ„
      = Subquery ๋‚ด์— Main Query Table์˜ ์ปฌ๋Ÿผ ํฌํ•จ ์—ฌ๋ถ€
      • ๋น„์—ฐ๊ด€ (Un-correlated)
      • ์—ฐ๊ด€ (Correlated)
        • SubQuery๊ฐ€ Main Query์˜ ํ–‰ ์ˆ˜๋งŒํผ ์‹คํ–‰, โค๏ธ๋ณต์žกํ•œ ์ผ๋ฐ˜ ๋ฐฐ์น˜ ํ”„๋กœ๊ทธ๋žจ ๋Œ€์ฒด ๊ฐ€๋Šฅ, ๐Ÿ’”์‹คํ–‰ ์†๋„ ๋А๋ฆผ
    2. ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํ˜•ํƒœ
      • ๋‹จ์ผ ํ–‰ (Single Row): 0..1๊ฐœ์˜ ๊ฐ’
      • ๋‹ค์ค‘ ํ–‰ (Multi Row): 2..*๊ฐœ์˜ ๊ฐ’
      • ๋‹ค์ค‘ ์ปฌ๋Ÿผ (Multi Column)

View

= View

  • ์ƒ์„ฑ: Create
    [ CREATE | REPLACE ] VIEW ๋ทฐ์ด๋ฆ„ AS
    	SELECT๋ฌธ
    ;
  • ์‚ญ์ œ: Drop
    DROP VIEW ๋ทฐ์ด๋ฆ„;

Set Operation

Union

ํ…Œ์ด๋ธ”1 UNION [ ALL ] ํ…Œ์ด๋ธ”2 [ ORDER BY์ ˆ ];
  • Default = ์ค‘๋ณต ์ œ๊ฑฐ
    • ๋‘ ํ…Œ์ด๋ธ”์— ์‹ค์ œ๋กœ ์ค‘๋ณต์ด ์—†๋Š” ๊ฒฝ์šฐ, ALL์„ ๋ถ™์ด๋ฉด ์ถ”๊ฐ€ ๊ณผ์ • ๊ฑฐ์น˜๋ฏ€๋กœ ์„ฑ๋Šฅ์ƒ ๋ถˆ๋ฆฌ
  • Result Relation์˜ ์ปฌ๋Ÿผ๋ช…์€ ํ…Œ์ด๋ธ”1 ์„ ๋”ฐ๋ผ๊ฐ
  • โš  ์ฃผ์˜
    1. Union ํ˜ธํ™˜์„ฑ
    2. ํ…Œ์ด๋ธ”1, ํ…Œ์ด๋ธ”2๊ฐ€ Subquery์ผ ๊ฒฝ์šฐ, Order By์ ˆ ํฌํ•จ ๋ถˆ๊ฐ€
      • โญ Order By๋Š” ๋งจ ๋งˆ์ง€๋ง‰์—๋งŒ ๊ฐ€๋Šฅ

Union ํ˜ธํ™˜์„ฑ

๐Ÿ“Œ ๋‘ ํ…Œ์ด๋ธ” ๊ฐ„ Set Operation์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด

  1. ์ปฌ๋Ÿผ ์ˆ˜ ์ผ์น˜
  2. ๊ฐ™์€ ์œ„์น˜์˜ ์ปฌ๋Ÿผ ๊ฐ„ 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 ] ์ƒˆ์ด๋ฆ„
  1. RANK(): ๊ณต๋™ ์ˆœ์œ„ ์žˆ์„ ๊ฒฝ์šฐ, ๋‹ค์Œ ์ˆœ์œ„๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋ฉฐ ๋“ฑ์ˆ˜๋ฅผ ๋งค๊น€ (๐Ÿ”Ž 1 1 1 4 โ€ฆ)
    • ORDER BY์ ˆ์˜ ์ •๋ ฌ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ˆœ์œ„ ๋งค๊น€
    • PARTITION BY์ ˆ ์žˆ์„ ๊ฒฝ์šฐ, ๊ทธ๋ฃน๊ธฐ์ค€ ๋‚ด์—์„œ ์ˆœ์œ„ ๋งค๊น€
  2. DENSE_RANK(): ๊ณต๋™ ์ˆœ์œ„๊ฐ€ ์žˆ์–ด๋„ ๋‹ค์Œ ์ˆœ์œ„ ๊ฑด๋„ˆ๋›ฐ์ง€ ์•Š์Œ (๐Ÿ”Ž 1 1 1 2 โ€ฆ)
  3. ROW_NUMBER(): ๊ณต๋™ ์ˆœ์œ„ ์—†์Œ, ์ •๋ ฌ๊ธฐ์ค€๊ฐ’์ด ๊ฐ™๋”๋ผ๋„ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์ˆœ์œ„ ๋ถ€์—ฌ (๐Ÿ”Ž 1 2 3 4 โ€ฆ)
    ~=Oracle ROWNUM (Top-N Query)

๋น„์œจ ํ•จ์ˆ˜

  • SQLD ์‹œํ—˜์—๋Š” ํ•ด๋‹น ๋ถ„๋ฅ˜๊ฐ€ ์กด์žฌํ•˜๋‚˜, ์‹ค์ œ ๋Œ€๋ถ€๋ถ„์˜ RDBMS์—์„œ๋Š” Ranking Function (์ˆœ์œ„ ํ•จ์ˆ˜) ๋ถ„๋ฅ˜์— ์†ํ•จ
๋น„์œจํ•จ์ˆ˜() OVER([ PARTITION BY ํŒŒํ‹ฐ์…˜๊ธฐ์ค€ ]
				ORDER BY ์ •๋ ฌ๊ธฐ์ค€ [ DESC ]) [ AS ] ์ƒˆ์ด๋ฆ„
  1. RATIO_TO_REPORT(์ปฌ๋Ÿผ๋ช…): ํŒŒํ‹ฐ์…˜์—์„œ, ์ปฌ๋Ÿผ๋ช…์ด ์ด ํ•ฉ๊ณ„์—์„œ ์ฐจ์ง€ํ•˜๋Š” ๋น„์œจ, 0 <= ๊ฒฐ๊ณผ <= 1
    = ์ปฌ๋Ÿผ๋ช… / SUM(์ปฌ๋Ÿผ๋ช…)
    RATIO_TO_REPORT(์ปฌ๋Ÿผ๋ช…) OVER([ PARTITION BY ํŒŒํ‹ฐ์…˜๊ธฐ์ค€ ]) [ AS ] ์ƒˆ์ด๋ฆ„
    • MSSQL ์ง€์› X
  2. PERCENT_RANK(): ํŒŒํ‹ฐ์…˜์˜ ๋งจ ์œ„ Row๋ฅผ 0, ๋งจ ์•„๋ž˜ Row๋ฅผ 1๋กœ ๋†“์•˜์„ ๋•Œ์˜ ๋ฐฑ๋ถ„์œ„ ์ˆœ์œ„๊ฐ’, 0 <= ๊ฒฐ๊ณผ <= 1
    = (RANK() OVER(์ •๋ ฌ๊ธฐ์ค€) - 1) / (COUNT(*) OVER() - 1)
    • MSSQL ์ง€์› X
  3. CUME_DIST(): ํŒŒํ‹ฐ์…˜์—์„œ์˜ ๋ˆ„์  ๋ฐฑ๋ถ„์œจ, 0 < ๊ฒฐ๊ณผ <= 1
    = COUNT(*) OVER(์ •๋ ฌ๊ธฐ์ค€) / COUNT(*) OVER()
    • MSSQL ์ง€์› X
  4. 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๋ฅผ ์ž˜ ๊ณ ๋ คํ•ด์•ผ ํ•จ
  1. SUM
    • Oracle ORDER BY์ ˆ๊ณผ RANGE UNBOUNDED PRECEDING(= Windowing ์ ˆ) ์ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๋ˆ„์ ํ•ฉ์ •๋ ฌ๊ธฐ์ค€ ์ˆœ์„œ๋Œ€๋กœ ๋ˆ„์ ํ•ฉ ๊ณ„์‚ฐ
      SUM(์ปฌ๋Ÿผ๋ช…) OVER(PARTITION BY ๊ทธ๋ฃน์กฐ๊ฑด์ปฌ๋Ÿผ๋ช…
                      ORDER BY ๋ˆ„์ ํ•ฉ์ •๋ ฌ๊ธฐ์ค€ [ DESC ]
                      RANGE UNBOUNDED PRECEDING) [ AS ] ์ƒˆ์ด๋ฆ„ 
      • ๋ˆ„์ ํ•ฉ์ •๋ ฌ๊ธฐ์ค€ = ์ปฌ๋Ÿผ๋ช…์ผ ๊ฒฝ์šฐ,
        1. PARTITION ๊ตฌ๋ฌธ ์ œ๊ฑฐํ•ด์•ผ ํ•จ
        2. RANGE UNBOUNDED PRECEDING ๊ตฌ๋ฌธ ์ƒ๋žต ๊ฐ€๋Šฅ
  2. MAX
  3. MIN
  4. AVG
  5. COUNT

Windowing

๐Ÿ“Œ Window ์ ˆ์—์„œ ๋ฐ์ดํ„ฐ์˜ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•œ ์ ˆ

๊ธฐ์ค€ BETWEEN ๋ฒ”์œ„1 AND ๋ฒ”์œ„2
  • โญ Default = RANGE UNBOUNDED PRECENDING
    = RANGE BETWEEN UNBOUNDED PRECENDING AND CURRERNT ROW
    = ์ฒซ Row๋ถ€ํ„ฐ ํ˜„์žฌ Row๊นŒ์ง€
  • ๊ธฐ์ค€ ๋ฒ”์œ„์ฒ˜๋Ÿผ, BETWEEN ์—†์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ = FOLLOWING ์ œ์™ธ
    1. ๊ธฐ์ค€ UNBOUNDED PRECENDING
    2. ๊ธฐ์ค€ n PRECENDING
    3. ๊ธฐ์ค€ CURRENT ROW
  • ๊ธฐ์ค€
    • ROWS: Row ์ž์ฒด์˜ ์œ„์น˜ ๊ธฐ์ค€
    • RANGE: Row์˜ ๊ฐ’ ๊ธฐ์ค€
  • ๋ฒ”์œ„
    • UNBOUNDED PRECENDING: ๋งจ ์œ„์˜ Row
      • ๊ฐ’์ด ํฌ๊ณ  ์ž‘์€ ๊ฑด ๋ชจ๋ฆ„, ORDER BY์˜ ASC/DESC์— ๋”ฐ๋ผ ๋”ฐ๋ฆ„
    • UNBOUNDED FOLLOWING: ๋งจ ์•„๋ž˜์˜ Row
    • CURRENT ROW: ํ˜„์žฌ ํ–‰
    • n PRECEDING: ํ˜„์žฌ ํ–‰์—์„œ n ์œ„์˜ Row
    • n FOLLOWING: ํ˜„์žฌ ํ–‰์—์„œ n ์•„๋ž˜์˜ Row

Value Function (ํ–‰ ์ˆœ์„œ ํ•จ์ˆ˜)

ํ–‰์ˆœ์„œํ•จ์ˆ˜(์ปฌ๋Ÿผ๋ช…) OVER([ PARTITION BY ๊ทธ๋ฃน์กฐ๊ฑด์ปฌ๋Ÿผ๋ช… ]
					ORDER BY ์ •๋ ฌ๊ธฐ์ค€์ปฌ๋Ÿผ [ DESC ]
					[ WINDOWING์ ˆ ]) [ AS ] ์ƒˆ์ด๋ฆ„
  • MSSQL ์ง€์› X
  1. FIRST_VALUE(์ปฌ๋Ÿผ๋ช…): ๋งจ ์œ„ Row์˜ ์ปฌ๋Ÿผ๊ฐ’
  2. LAST_VALUE(์ปฌ๋Ÿผ๋ช…): ๋งจ ์•„๋ž˜ Row์˜ ์ปฌ๋Ÿผ๊ฐ’
    • โš  ์ •๋ ฌ ์ˆœ์„œ๊ฐ€ ASC ์ธ ๊ฒฝ์šฐ ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘
      • ์›์ธ: Windowing์ ˆ์˜ Default๊ฐ€ RANGE UNBOUNDED PRECENDING โžก ์ฆ‰, ์ฒซ Row๋ถ€ํ„ฐ ํ˜„์žฌ Row ์ค‘ ๋งจ ์•„๋ž˜์˜ ๊ฒƒ์„ ์„ ํƒํ•˜๋ฏ€๋กœ, ํ•ญ์ƒ ์ž๊ธฐ ์ž์‹ ์˜ ์†์„ฑ๊ฐ’ ์„ ํƒํ•˜๊ฒŒ ๋จ
      • ํ•ด๊ฒฐ: RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ๋ช…์‹œ ํ•„์š”
  3. LAG(์ปฌ๋Ÿผ๋ช… [, n] [, ๊ธฐ๋ณธ๊ฐ’]): n๋งŒํผ ์œ„ Row์˜ ์ปฌ๋Ÿผ๊ฐ’, Default = 1, null, ์œ„์ชฝ Row๋ผ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ ๋Œ€์‹  ๊ธฐ๋ณธ๊ฐ’ ์ฑ„์›Œ์ง€๊ฒŒ ๋จ
    ๐Ÿ“Œ LAG = ์ง€์—ฐ, ๋”๋””๋‹ค
  4. LEAD(์ปฌ๋Ÿผ๋ช… [, n] [, ๊ธฐ๋ณธ๊ฐ’]): n๋งŒํผ ์•„๋ž˜ Row์˜ ์ปฌ๋Ÿผ๊ฐ’

Top-N Query

  1. 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 ํฌํ•จ ์•ˆ ๋˜์–ด ์žˆ์–ด๋„ ๋จ
  2. Ranking Function (์ˆœ์œ„ ํ•จ์ˆ˜) ํ™œ์šฉ
    SELECT์ ˆ
    FROM (
        SELECT ์ˆœ์œ„ํ•จ์ˆ˜() OVER([ PARTITION BY ํŒŒํ‹ฐ์…˜๊ธฐ์ค€ ]
    			            ORDER BY ์ •๋ ฌ๊ธฐ์ค€ [ DESC ]) [ AS ] ์ƒˆ์ด๋ฆ„
        ...
    )
    [ WHERE ์ƒˆ์ด๋ฆ„ < ๊ฐ’ | WHERE ์ƒˆ์ด๋ฆ„ <= ๊ฐ’ ]
    ;

Top

MSSQL

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 ์ปฌ๋Ÿผ๋ช… ]
;
  1. START WITH ์กฐ๊ฑด์ ˆ: ์กฐ๊ฑด์ ˆ์„ ๋งŒ์กฑํ•˜๋Š” Row๋ฅผ Root ๋…ธ๋“œ๋กœ ์‹œ์ž‘
  2. CONNECT BY: Root ๋…ธ๋“œ์—์„œ๋ถ€ํ„ฐ, ์กฐ๊ฑด์ ˆ์— ๋งŒ์กฑํ•˜๋Š” Row ์—†์„ ๋•Œ๊นŒ์ง€ ์ด์–ด๊ฐ€๋ฉฐ ์ž์‹ ๋…ธ๋“œ ์ƒ์„ฑ
    • PRIOR ์ปฌ๋Ÿผ๋ช…: ๋ถ€๋ชจ ๋…ธ๋“œ ์ปฌ๋Ÿผ๋ช…์˜ ์†์„ฑ๊ฐ’ ๋ฐ˜ํ™˜
      • ๐Ÿ”Ž CONNECT BY PRIOR ๋ถ€๋ชจ์˜์ปฌ๋Ÿผ๋ช… = ์ž์‹์˜์ปฌ๋Ÿผ๋ช…
  3. SELECT
    • LEVEL: ํ˜„์žฌ ๋…ธ๋“œ์˜ Depth, Root = 1
    • SYS_CONNECT_BY_PATH(๊ฐ’, ๊ตฌ๋ถ„์ž): Root ๋…ธ๋“œ์—์„œ๋ถ€ํ„ฐ ํ˜„์žฌ ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฒฝ๋กœ๋ฅผ ๊ฐ’ || ๊ตฌ๋ถ„์ž || ๊ฐ’ || ... ์œผ๋กœ ๋งŒ๋“ค์–ด ์ถœ๋ ฅ
      • ๊ฐ’์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ปฌ๋Ÿผ๊ฐ’๋“ค ํ™œ์šฉ ๊ฐ€๋Šฅ
    • CONNECT_BY_ROOT ์ปฌ๋Ÿผ๋ช…: ํ˜„์žฌ ๋…ธ๋“œ์˜ Root ๋…ธ๋“œ ์ปฌ๋Ÿผ๋ช… ์†์„ฑ๊ฐ’ ๋ฐ˜ํ™˜
    • CONNECT_BY_ISLEAF: Leaf ๋…ธ๋“œ์ผ ๊ฒฝ์šฐ 1, ๊ทธ ์™ธ 0 ๋ฐ˜ํ™˜
  4. 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์ ˆ ]
;
  1. From์ ˆ
  2. FOR ์ปฌ๋Ÿผ๋ช…: ์ƒˆ ์ปฌ๋Ÿผ๋ช…์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ์†์„ฑ๊ฐ’(= Row)๋“ค์˜ ์ปฌ๋Ÿผ๋ช… ๋ช…์‹œ
    • ์ปฌ๋Ÿผ๋ช…์ด ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๊ฒฝ์šฐ, ๋ฆฌ์ŠคํŠธ ( )๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ์Œ
      FOR (์ปฌ๋Ÿผ๋ช…1, ์ปฌ๋Ÿผ๋ช…2, ...)
      IN ((์ปฌ๋Ÿผ1๊ฐ’A, ์ปฌ๋Ÿผ2๊ฐ’A, ...) [[ AS ] ์ƒˆ์ปฌ๋Ÿผ๋ช…A ], (์ปฌ๋Ÿผ1๊ฐ’B, ์ปฌ๋Ÿผ2๊ฐ’B, ...) [[ AS ] ์ƒˆ์ปฌ๋Ÿผ๋ช…B ], ...)
  3. IN (์ปฌ๋Ÿผ๊ฐ’1 [[ AS ] ์ƒˆ์ปฌ๋Ÿผ๋ช…1 ], ...): ์ƒˆ ์ปฌ๋Ÿผ๋ช… ์ •์˜
    1. ์ง‘๊ณ„์ ‘๋‘์‚ฌ_์ƒˆ์ปฌ๋Ÿผ๋ช…
    2. (์ง‘๊ณ„์ ‘๋‘์‚ฌ ์—†์„ ๊ฒฝ์šฐ) ์ƒˆ์ปฌ๋Ÿผ๋ช…
    3. (์ง‘๊ณ„์ ‘๋‘์‚ฌ, ์ƒˆ์ปฌ๋Ÿผ๋ช… ์—†์„ ๊ฒฝ์šฐ) ์ปฌ๋Ÿผ๊ฐ’
    • ๋˜๋Š”, Select์ ˆ์˜ As (Alias)๋ฅผ ํ†ตํ•ด์„œ๋„ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
  4. Aggregate Function (์ง‘๊ณ„ ํ•จ์ˆ˜): ์ƒˆ ์ปฌ๋Ÿผ์— ์ €์žฅํ•  ์†์„ฑ๊ฐ’๋“ค(= Rows) ์ง‘๊ณ„
  5. 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์ ˆ ]
;
  1. From์ ˆ
  2. FOR ์ƒˆ์ปฌ๋Ÿผ๋ช…: ์ƒˆ ์ปฌ๋Ÿผ๋ช… ์ •์˜
    • ๊ธฐ์กด์˜ ์ปฌ๋Ÿผ๋ช…๋“ค์„ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์ƒˆ์ปฌ๋Ÿผ๋ช…์˜ ์†์„ฑ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ, ๋ฆฌ์ŠคํŠธ ( )๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ์Œ
      FOR (์ƒˆ์ปฌ๋Ÿผ๋ช…1, ์ƒˆ์ปฌ๋Ÿผ๋ช…2, ...)
      • ์ •์˜๋œ ์ƒˆ์ปฌ๋Ÿผ๋ช… ๊ฐœ์ˆ˜ = IN์ ˆ ๊ฐ AS ๋’ค ( ) ์•ˆ์˜ ์ƒˆ๊ฐ’ ๊ฐœ์ˆ˜
  3. IN (๊ธฐ์กด์ปฌ๋Ÿผ๋ช…1 [[ AS ] ์ƒˆ๊ฐ’1 ], ...): ๊ธฐ์กด ์ปฌ๋Ÿผ๋ช… ๊ฐ๊ฐ์„ ์ด์šฉํ•ด ์ƒˆ ์†์„ฑ๊ฐ’ ์ •์˜
    • ์—ฌ๋Ÿฌ ๊ธฐ์กด์ปฌ๋Ÿผ๋ช…์„ ํ•˜๋‚˜์˜ ์ƒˆ๊ฐ’์œผ๋กœ ๋งค์นญํ•  ์ˆ˜ ์žˆ์Œ
      IN ((๊ธฐ์กด์ปฌ๋Ÿผ1, ๊ธฐ์กด์ปฌ๋Ÿผ2, ...) AS ์ƒˆ๊ฐ’, ...)
  4. ๊ธฐ์กด์†์„ฑ๊ฐ’๋‹ด์„์ƒˆ์ปฌ๋Ÿผ๋ช…: ์ƒˆ ์†์„ฑ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ๋œ ๊ธฐ์กด ์ปฌ๋Ÿผ๋“ค์˜ ์†์„ฑ๊ฐ’๋“ค์„ ๋‹ด๊ธฐ ์œ„ํ•œ ์ƒˆ ์ปฌ๋Ÿผ๋ช… ์ •์˜
    • ์ •์˜๋œ ๊ธฐ์กด์†์„ฑ๊ฐ’๋‹ด์„์ƒˆ์ปฌ๋Ÿผ๋ช… ๊ฐœ์ˆ˜ = IN์ ˆ ๊ฐ AS ์•ž ( ) ์•ˆ์˜ ๊ธฐ์กด์ปฌ๋Ÿผ๋ช… ๊ฐœ์ˆ˜
  5. Order By์ ˆ, Select์ ˆ
  • Todo Cartesian Product

Regular Expression (์ •๊ทœ ํ‘œํ˜„์‹)

Todo
[SQL] SQL ์ •๊ทœํ‘œํ˜„์‹ ๊ฐ€์ด๋“œ
SQLD ์ •๊ทœํ‘œํ˜„์‹

  1. REGEXP_LIKE(๋ฌธ์ž์—ด, ์ •๊ทœํ‘œํ˜„์‹ [, ์˜ต์…˜]): ์ผ์น˜ ์—ฌ๋ถ€ ๋ฐ˜ํ™˜
  2. REGEXP_COUNT(๋ฌธ์ž์—ด, ์ •๊ทœํ‘œํ˜„์‹ [, ์‹œ์ž‘์ ] [, ์ผ์น˜์˜ต์…˜]): ์ผ์น˜ ํšŸ์ˆ˜ ๋ฐ˜ํ™˜
  3. REGEXP_SUBSTR(๋ฌธ์ž์—ด, ์ •๊ทœํ‘œํ˜„์‹ [, ์‹œ์ž‘์ ] [, ์ผ์น˜ํšŸ์ˆ˜] [, ์„œ๋ธŒํ‘œํ˜„์‹]): ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜
  4. REGEXP_REPLACE(๋ฌธ์ž์—ด, ์ •๊ทœํ‘œํ˜„์‹, ๋ณ€๊ฒฝ๋ฌธ์ž์—ด [, ์‹œ์ž‘์ ] [, ์ผ์น˜ํšŸ์ˆ˜]): ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„์„ ๋ณ€๊ฒฝ๋ฌธ์ž์—ด๋กœ ๋Œ€์ฒด
  5. REGEXP_INSTR(๋ฌธ์ž์—ด, ์ •๊ทœํ‘œํ˜„์‹ [, ์‹œ์ž‘์ ] [, ์ผ์น˜ํšŸ์ˆ˜] [, ๋ฐ˜ํ™˜์˜ต์…˜] [, ์ผ์น˜์˜ต์…˜] [, ์„œ๋ธŒํ‘œํ˜„์‹]): ์ผ์น˜ํ•˜๋Š” ์œ„์น˜์˜ ์‹œ์ž‘ ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜ (1-indexed)
    โ†”MSSQL
  6. PATINDEX
  7. LIKE