๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–‹๏ธ ๊ธฐ์ˆ ์‹ฌํ™”/SQLD

[SQLD๋ฒผ๋ฝ์น˜๊ธฐ] SQL ์ž๊ฒฉ๊ฒ€์ • ์‹ค์ „๋ฌธ์ œ ์˜ค๋‹ต๋…ธํŠธ(2๊ณผ๋ชฉ-1)

by OR15A 2023. 11. 17.
[ 2๊ณผ๋ชฉ SQL ๊ธฐ๋ณธ ๋ฐ ํ™œ์šฉ ]

2-1 SQL ๊ธฐ๋ณธ

DCL : ์ปจํŠธ๋กค = ๊ถŒํ•œ

DDL : Definition ์ •์˜์–ด. ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ(ํ…Œ์ด๋ธ” ์ด๋ฆ„, ๊ตฌ์กฐ ์ƒ์„ฑ, ํ…Œ์ด๋ธ” ์‚ญ์ œ) ์ •์˜ 

DML : Manipulation ๋ฐ์ดํ„ฐ ์กฐ์ž‘(์ƒˆ๋กœ์šดํ–‰ ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ ๋“ฑ) + ์กฐํšŒ

TCL : Transaction  ์ปจํŠธ๋กค(DML ์กฐ์ž‘๊ฒฐ๊ณผ ์ž‘์—…๋‹จ์œ„๋ณ„๋กœ ์ œ์–ด)

PL/SQL, T-SQL : ์ ˆ์ฐจ์  ๋ฐ์ดํ„ฐ ์กฐ์ž‘์–ด, ์ƒ์„ธํžˆ ๋ช…์„ธํ•˜๋Š” ์–ธ์–ด

๋ฐ์ดํ„ฐ ๋ถ€์†์–ด : ํ˜ธ์ŠคํŠธ ํ”„๋กœ๊ทธ๋žจ ์†์— ์‚ฝ์ž…๋˜์–ด ์‚ฌ์šฉํ•˜๋Š” DML ๋ช…๋ น์–ด๋“ค

๋ฐ์ด๋ธ” ์ปฌ๋Ÿผ ์ •์˜ ๋ณ€๊ฒฝ : Oracle-ALTER TABLE + MODIFY ...   SQL Server-ALTER TABLE + ALTER ...

SQL Server : ์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ ๋™์‹œ ์ˆ˜์ • ์ง€์›X. ๊ด„ํ˜ธ์‚ฌ์šฉX, NOT NULL ๋ช…์‹œ ์•ˆํ•˜๋ฉด NULL

NULL : Order By ์ ˆ์—์„œ Oracle์—๊ฒŒ๋Š” ์ œ์ผ ํฐ ๊ฐ’, SQL Server์€์ œ์ผ ์ž‘์€ ๊ฐ’, ๋ชจ๋ฅด๋Š” ๊ฐ’, ๊ฐ’์˜ ๋ถ€์žฌ, NULL๊ณผ์˜ ๋ชจ๋“  ๋น„๊ต๋Š” unknown(IS NULL์ œ์™ธ)

NULL์€ 0 ์•„๋‹ˆ๋‹ค. ๊ณต๋ฐฑ๋ฌธ์ž ์•„๋‹ˆ๋‹ค.

์œ ๋‹ˆํฌ ์ œ์•ฝ์กฐ๊ฑด : NULL์ž…๋ ฅO

ํ…Œ์ด๋ธ”์— ๋ถˆํ•„์š”ํ•œ ์นผ๋Ÿผ ์‚ญ์ œ : ALTER TABLE ํ…Œ์ด๋ธ”์ด๋ฆ„ DROP COLUMN ์‚ญ์ œํ• ์ปฌ๋Ÿผ๋ช… ;

ํ…Œ์ด๋ธ” ์ด๋ฆ„ ๋ณ€๊ฒฝ : RENAME A TO B;

Dependent : PK๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ž์‹ ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์ž…๋ ฅ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”(๋ง‰๋Š”) ์ฐธ์กฐ ๋™์ž‘ = ๋ถ€๋ชจ์— PK๊ฐ€ ์กด์žฌํ• ๋•Œ๋งŒ  ์ž์‹ ์ž…๋ ฅ ํ—ˆ์šฉ

Automatic : ๋ถ€๋ชจ์— PK์—†์œผ๋ฉด PK์ƒ์„ฑํ•˜๊ณ  ์ž์‹๋ฐ์ดํ„ฐ ์ž…๋ ฅ

Cascade : ๋ถ€๋ชจ ์‚ญ์ œ์‹œ ์ž์‹ ๊ฐ™์ด ์‚ญ์ œ

Restrict : ์ž์‹์— PK์•ˆ์“ด ๊ฒฝ์šฐ๋งŒ ๋งˆ์Šคํ„ฐ ์‚ญ์ œ ํ—ˆ์šฉ

INSERT ๋ฌธ์žฅ : ํŠน์ • ์‚ฝ์ž… ์ปฌ๋Ÿผ ๋ช…์‹œํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ์‚ฝ์ž…ํ•ด์•ผํ•จ

INSERT INTO VALUES / UPDATE SET

๋ฐ์ดํ„ฐ ์‚ญ์ œ์‹œ ๋กœ๊ทธ ์—ฌ๋ถ€ : ๋กœ๊ทธ ๋‚จ๊น€(DELETE), ๋กœ๊ทธ ์•ˆ๋‚จ๊น€(TRUNCATE, DROP)

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ์„ฑ์— ๋”ฐ๋ฅธ ๋ฌธ์ œ์  : Dirty Read(๋‹ค๋ฅธ ํŠธ๋žœ์ ์…˜์ด ์ˆ˜์ •ํ•œ ์•„์ง ์ปค๋ฐ‹ ์•ˆ๋œ ๋ฐ์ดํ„ฐ ์ฝ์Œ), Non-Repeatable Read(๋‹ค๋ฅธ ํŠธ๋ Œ์žญ์…˜์— ์˜ํ•œ ๋ณ€๊ฒฝ์œผ๋กœ ๊ฐ™์€ ์ฟผ๋ฆฌ์˜ ์ˆ˜ํ–‰๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง), Pantom Read(๊ฐ™์€ ์ฟผ๋ฆฌ์˜ ์ˆ˜ํ–‰๊ฒฐ๊ณผ ์‹œ ์ฒซ๋ฒˆ์งธ ์ฟผ๋ฆฌ์— ์—†๋˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‘๋ฒˆ์งธ ์ฟผ๋ฆฌ์— ๋‚˜์˜ด)

DDL ๋ฌธ์žฅ ์ˆ˜ํ–‰ ํ›„ : Oracle(์ž๋™ ์ปค๋ฐ‹O), SQL Server(์ž๋™ ์ปค๋ฐ‹X)
            Oracle์€ DDL ๋ฌธ์žฅ ์ˆ˜ํ–‰ ํ›„ ๋‚ด๋ถ€์ ์œผ๋กœ ํŠธ๋žœ์žญ์…˜ ์ข…๋ฃŒ์‹œํ‚ด / SQL Server์—์„œ๋Š” DDL ๋ฌธ์žฅ๋„ ํŠธ๋žœ์ ์…˜์— ํฌํ•จํ•จ

ROLLBACK์€ ์ตœ์ดˆ์˜ ํŠธ๋žœ์žญ์…˜ ์‹œ์ ๊นŒ์ง€ ์ˆ˜ํ–‰๋จ. ์„ธ์ด๋ธŒ ํฌ์ธํŠธ๋ฅผ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์œผ๋ฉด, ํŠธ๋žœ์žญ์…˜์ด ์‹œ์ž‘๋œ ์ดํ›„์˜ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ทจ์†Œํ•จ

INSERT INTO ํ…Œ์ด๋ธ”๋ช… (์ปฌ๋Ÿผ๋ช…) VALUES (''); -> Oracle์€ NULL์ž…๋ ฅ, SQL Server์€ ํ•ด๋‹น ์ปฌ๋Ÿผ์— ๋นˆ ๋ฌธ์ž์—ด('')์„ ์‚ฝ์ž…

  • ๋‚ด์žฅ ํ•จ์ˆ˜
    • ๋‹ค์ค‘ํ–‰ ํ•จ์ˆ˜
      • ์ง‘๊ณ„ํ–‰ ํ•จ์ˆ˜
      • ์œˆ๋„์šฐํ•จ์ˆ˜
      • ๊ทธ๋ฃนํ•จ์ˆ˜
    • ๋‹จ์ผํ–‰ ํ•จ์ˆ˜
  • ์‚ฌ์šฉ์ž ์ •์˜ํ•จ์ˆ˜

๋‹ค์ค‘ํ–‰ ํ•จ์ˆ˜, ๋‹จ์ผํ–‰ ํ•จ์ˆ˜๋Š” ๋‹จ์ผ๊ฐ’ ๋ฐ˜ํ™˜

A ↓ A ๋กœ ์ปค์„œ๊ฐ€ 3์งธ ์ค„๊นŒ์ง€ ๊ฐ€์žˆ๋‹ค๋ฉด  ๋ผ์ธ์ˆ˜ 3...! 

SELECT
    CASE WHEN ID= 'A' THEN 'B'
    ELSE ID
    END AS ID_reault
FROM your_table;
CASE WHEN ID = 'A' THEN 'B'      // ID ์ปฌ๋Ÿผ์˜ ๊ฐ’์ด 'A'์ผ ๊ฒฝ์šฐ, 'B'๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
ELSE ID     // ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ, ID ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
END AS ID_result      // ๊ฒฐ๊ณผ๋Š” ID_result๋ผ๋Š” ์ด๋ฆ„์˜ ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค

CASE WHEN Location = 'A' THEN 'B'    (๊ฐ™์Œ)   CASE Location  WHEN 'A'  THEN 'B'

ELSE :CASE ํ‘œํ˜„์‹์—์„œ ์ •์˜๋œ WHEN ์กฐ๊ฑด๋“ค ์ค‘ ์–ด๋Š ๊ฒƒ์—๋„ ํ•ด๋‹นํ•˜์ง€ ์•Š์„ ๋•Œ ๋ฐ˜ํ™˜ํ•  ๊ฐ’์„ ์ง€์ •. ์—†์œผ๋ฉด NULL๋ฐ˜ํ™˜

END : CASE ํ‘œํ˜„์‹์˜ ๋์„ ๋‚˜ํƒ€๋ƒ„

[ NULL ํ•จ์ˆ˜ ]

NVL(์‹1, ์‹2)   /   ISNULL(์‹1, ์‹2) : ์‹1์˜ ๊ฒฐ๊ณผ๊ฐ’ ๋ฐ˜ํ™˜. ์‹1 ๊ฒฐ๊ณผ๊ฐ’์ด NULL์ด๋ฉด ์‹2 ๊ฐ’ ์ถœ๋ ฅ <- ์‹1์ด NULL์ผ๋•Œ๋ฅผ ๋Œ€๋น„ํ•˜๋Š” ๊ฒƒ

NULLIF(์‹1, ์‹2) :  ์‹1==์‹2์ด๋ฉด NULL, ๊ฐ™์ง€ ์•Š์œผ๋ฉด ์‹1 ๋ฆฌํ„ด <- ์ฃผ๋กœ ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๋ฅผ NULL๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ

Coalesce(์‹1, ์‹2, ์‹3 ...) : ์•ž์—์„œ๋ถ€ํ„ฐ NULL์ด ์•„๋‹Œ๊ฐ’ ์ถœ๋ ฅ. ๋ชจ๋‘ NULL์ด๋ฉด NULL ๋ฆฌํ„ด.  coales ceCOUNT(*) ๋นผ๊ณ  NULL์ œ์™ธํ•˜๊ณ  ๊ณ„์‚ฐํ•จ

Order By ์ ˆ์—์„œ ์ปฌ๋Ÿผ๋ช… ๋Œ€์‹  Alias๋‚˜ ์ปฌ๋Ÿผ์ˆœ์„œ ์ •์ˆ˜ ํ˜ผ์šฉ ๊ฐ€๋Šฅ

SQL Server์˜ TOP N ์งˆ์˜๋ฌธ : WITH TIES(ํ•จ๊ป˜ ์ถœ๋ ฅ๋˜๋Š” ์˜ต์…˜) ORDER BY(์ •๋ ฌ๊ธฐ์ค€)

  • Oracle ์กฐ์ธ : WHERE์ ˆ์— JOIN์กฐ๊ฑด ๋„ฃ์Œ
  • SQL Server ์กฐ์ธ : FROM์˜ ON์ ˆ์— JOIN ์กฐ๊ฑด์„ ๋„ฃ์Œ

DBMS ์˜ตํ‹ฐ๋งˆ์ด์ € : FROM ์ ˆ์— ๋‚˜์—ด๋œ ํ…Œ์ด๋ธ”์ด ์•„๋ฌด๋ฆฌ ๋งŽ์•„๋„ ํ•ญ์ƒ 2๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์ง์ง€์–ด์„œ  JOIN ์ˆ˜ํ–‰ํ•จ