SQLD

SQLD ๐Ÿค– [์˜ˆ์‹œ๋ฌธ์ œ] (2026-08-15)

1. [์˜ˆ์‹œ๋ฌธ์ œ] ๋‹ค์Œ ์ค‘ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง ์‹œ ์ •๊ทœํ™”(Normalization)์˜ ์ฃผ๋œ ๋ชฉ์ ์œผ๋กœ ๊ฐ€์žฅ ๊ฑฐ๋ฆฌ๊ฐ€ ๋จผ ๊ฒƒ์€ ๋ฌด์—‡์ธ๊ฐ€?

  1. ๋ฐ์ดํ„ฐ ์ค‘๋ณต์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค.
  2. ์ด์ƒ ํ˜„์ƒ(Insertion, Update, Deletion Anomaly)์„ ์ œ๊ฑฐํ•œ๋‹ค.
  3. ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ํ™•๋ณดํ•˜๊ณ  ๋ฐ์ดํ„ฐ์˜ ์‹ ๋ขฐ๋„๋ฅผ ๋†’์ธ๋‹ค.
  4. ๋ฐ์ดํ„ฐ ์กฐํšŒ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ํ…Œ์ด๋ธ”์„ ํ†ตํ•ฉํ•œ๋‹ค.

2. [์˜ˆ์‹œ๋ฌธ์ œ] ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์˜ 3๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ์ธ ์—”ํ„ฐํ‹ฐ(Entity), ์†์„ฑ(Attribute), ๊ด€๊ณ„(Relationship)์— ๋Œ€ํ•œ ์„ค๋ช…์œผ๋กœ ์˜ณ์ง€ ์•Š์€ ๊ฒƒ์€?

  1. ์—”ํ„ฐํ‹ฐ๋Š” ์—…๋ฌด์— ํ•„์š”ํ•˜๊ณ  ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์œผ๋กœ, ์œ ์ผํ•œ ์‹๋ณ„์ž์— ์˜ํ•ด ์‹๋ณ„ ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค.
  2. ์†์„ฑ์€ ์—”ํ„ฐํ‹ฐ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ณ ์œ ํ•œ ํŠน์„ฑ ๋˜๋Š” ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ•ญ๋ชฉ์œผ๋กœ, ํ•˜๋‚˜์˜ ์†์„ฑ์€ ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ ๊ฐ€์ง„๋‹ค.
  3. ๊ด€๊ณ„๋Š” ๋‘ ์—”ํ„ฐํ‹ฐ ๊ฐ„์˜ ์—ฐ๊ด€์„ฑ์„ ์˜๋ฏธํ•˜๋ฉฐ, ์นด๋””๋„๋ฆฌํ‹ฐ(Cardinality)์™€ ์„ ํƒ์„ฑ(Optionality)์œผ๋กœ ํ‘œํ˜„๋œ๋‹ค.
  4. ๊ด€๊ณ„๋Š” ์ฃผ๋กœ '๋ฌด์—‡์ด ๋ฌด์—‡์„ ํ•œ๋‹ค' ๋˜๋Š” '๋ฌด์—‡์ด ๋ฌด์—‡์ด๋‹ค' ํ˜•ํƒœ๋กœ ์„œ์ˆ ๋˜๋ฉฐ, ์—”ํ„ฐํ‹ฐ์™€ ์—”ํ„ฐํ‹ฐ ์‚ฌ์ด์˜ ์—…๋ฌด ๊ทœ์น™์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

3. [์˜ˆ์‹œ๋ฌธ์ œ] ๋‹ค์Œ SQL ์งˆ์˜๋ฌธ์— ๋Œ€ํ•œ ์„ค๋ช…์œผ๋กœ ๊ฐ€์žฅ ์ ์ ˆํ•œ ๊ฒƒ์€? SELECT ๋ถ€์„œ๋ช…, COUNT(์‚ฌ์›๋ฒˆํ˜ธ) AS ์‚ฌ์›์ˆ˜ FROM ์‚ฌ์›ํ…Œ์ด๋ธ” WHERE ์ง๊ธ‰ = '๋Œ€๋ฆฌ' GROUP BY ๋ถ€์„œ๋ช… HAVING COUโ€ฆ

  1. ์ „์ฒด ์‚ฌ์› ์ค‘ ์ง๊ธ‰์ด '๋Œ€๋ฆฌ'์ธ ์‚ฌ์›๋“ค์˜ ์ˆ˜๋ฅผ ๋ถ€์„œ๋ณ„๋กœ ์ง‘๊ณ„ํ•˜๊ณ , ๊ทธ ์ˆ˜๊ฐ€ 2๋ช… ์ด์ƒ์ธ ๋ถ€์„œ๋งŒ ์กฐํšŒํ•œ๋‹ค.
  2. ๊ฐ ๋ถ€์„œ์˜ ์‚ฌ์› ์ˆ˜๋ฅผ ์„ธ์–ด 2๋ช… ์ด์ƒ์ธ ๋ถ€์„œ๋งŒ ์กฐํšŒํ•˜๋ฉฐ, ๊ทธ ์ค‘ ์ง๊ธ‰์ด '๋Œ€๋ฆฌ'์ธ ์‚ฌ์›๋งŒ ์นด์šดํŠธํ•œ๋‹ค.
  3. ์ง๊ธ‰์ด '๋Œ€๋ฆฌ'์ธ ์‚ฌ์›๋“ค ์ค‘์—์„œ ์‚ฌ์› ์ˆ˜๊ฐ€ 2๋ช… ์ด์ƒ์ธ ๋ถ€์„œ์˜ ์ •๋ณด๋งŒ ๋ณด์—ฌ์ค€๋‹ค.
  4. ์ง๊ธ‰์ด '๋Œ€๋ฆฌ'์ธ ์‚ฌ์›๋งŒ์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋ฉฐ, ๋ถ€์„œ๋ณ„ ์‚ฌ์› ์ˆ˜๊ฐ€ 2๋ช… ์ด์ƒ์ธ ๊ฒฝ์šฐ์—๋งŒ ํ•ด๋‹น ๋ถ€์„œ๋ช…๊ณผ ์ „์ฒด ์‚ฌ์› ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

4. [์˜ˆ์‹œ๋ฌธ์ œ] ๋‹ค์Œ ๋‘ ํ…Œ์ด๋ธ”(EMPLOYEES, DEPARTMENTS)์„ ์กฐ์ธํ•˜๋Š” SQL๋ฌธ๊ณผ ๊ทธ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ์„ค๋ช…์œผ๋กœ ์˜ณ์ง€ ์•Š์€ ๊ฒƒ์€? - EMPLOYEES ํ…Œ์ด๋ธ”: ์‚ฌ์›๋ฒˆํ˜ธ, ์‚ฌ์›๋ช…, ๋ถ€์„œID (๋ถ€์„œID๋Š” NULโ€ฆ

  1. EMPLOYEES ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์‚ฌ์› ์ •๋ณด๊ฐ€ ๊ฒฐ๊ณผ์— ํฌํ•จ๋œ๋‹ค.
  2. ๋ถ€์„œID๊ฐ€ NULL์ธ ์‚ฌ์›์˜ ๊ฒฝ์šฐ, D.๋ถ€์„œ๋ช… ์ปฌ๋Ÿผ์—๋Š” NULL์ด ํ‘œ์‹œ๋œ๋‹ค.
  3. DEPARTMENTS ํ…Œ์ด๋ธ”์— ์žˆ์ง€๋งŒ, ์–ด๋–ค ์‚ฌ์›๋„ ์†Œ์†๋˜์–ด ์žˆ์ง€ ์•Š์€ ๋ถ€์„œ์˜ ์ •๋ณด๋„ ๊ฒฐ๊ณผ์— ํฌํ•จ๋œ๋‹ค.
  4. FROM ์ ˆ์˜ LEFT OUTER JOIN ๋Œ€์‹  RIGHT OUTER JOIN์œผ๋กœ ๋ฐ”๊พธ๊ณ  ํ…Œ์ด๋ธ” ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ์ง€ ์•Š์œผ๋ฉด, ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

5. [์˜ˆ์‹œ๋ฌธ์ œ] ๋‹ค์Œ ์ค‘ ์‚ฌ์›(EMPLOYEES) ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๋Š” DDL ๋ฌธ์œผ๋กœ ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ์€? (๋‹จ, ์‚ฌ์›๋ฒˆํ˜ธ๋Š” ๊ธฐ๋ณธํ‚ค, ๋ถ€์„œ๋ฒˆํ˜ธ๋Š” DEPARTMENTS ํ…Œ์ด๋ธ”์˜ ๋ถ€์„œ๋ฒˆํ˜ธ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์™ธ๋ž˜ํ‚ค, ์‚ฌ์›๋ช…์€ NULL์„ ํ—ˆ์šฉโ€ฆ

  1. CREATE TABLE EMPLOYEES ( ์‚ฌ์›๋ฒˆํ˜ธ NUMBER PRIMARY KEY, ์‚ฌ์›๋ช… VARCHAR2(50) NOT NULL, ๋ถ€์„œ๋ฒˆํ˜ธ NUMBER, CONSTRAINT FK_DEPT FOREIGN KEY (๋ถ€์„œ๋ฒˆํ˜ธ) REFERENCES DEPARTMENTS(๋ถ€์„œ๋ฒˆํ˜ธ) );
  2. CREATE TABLE EMPLOYEES ( ์‚ฌ์›๋ฒˆํ˜ธ NUMBER PRIMARY KEY, ์‚ฌ์›๋ช… VARCHAR2(50) NULL, ๋ถ€์„œ๋ฒˆํ˜ธ NUMBER, FOREIGN KEY (๋ถ€์„œ๋ฒˆํ˜ธ) REFERENCES DEPARTMENTS(๋ถ€์„œ๋ฒˆํ˜ธ) );
  3. CREATE TABLE EMPLOYEES ( ์‚ฌ์›๋ฒˆํ˜ธ NUMBER, ์‚ฌ์›๋ช… VARCHAR2(50) NOT NULL, ๋ถ€์„œ๋ฒˆํ˜ธ NUMBER FOREIGN KEY REFERENCES DEPARTMENTS(๋ถ€์„œ๋ฒˆํ˜ธ), CONSTRAINT PK_EMP PRIMARY KEY (์‚ฌ์›๋ฒˆํ˜ธ) );
  4. CREATE TABLE EMPLOYEES ( ์‚ฌ์›๋ฒˆํ˜ธ PRIMARY KEY NUMBER, ์‚ฌ์›๋ช… VARCHAR2(50) NOT NULL, ๋ถ€์„œ๋ฒˆํ˜ธ NUMBER, FOREIGN KEY (๋ถ€์„œ๋ฒˆํ˜ธ) REFERENCES DEPARTMENTS );

6. [์˜ˆ์‹œ๋ฌธ์ œ] ๋‹ค์Œ ์ค‘ ์œˆ๋„์šฐ ํ•จ์ˆ˜(Window Function)์— ๋Œ€ํ•œ ์„ค๋ช…์œผ๋กœ ๊ฐ€์žฅ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ฒƒ์€?

  1. ์ง‘๊ณ„ ํ•จ์ˆ˜(SUM, AVG, COUNT ๋“ฑ)๋ฅผ ์œˆ๋„์šฐ ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋•Œ OVER ์ ˆ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋œ๋‹ค.
  2. ROW_NUMBER() ํ•จ์ˆ˜๋Š” ๊ฐ ๊ทธ๋ฃน ๋‚ด์—์„œ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•˜๋ฉฐ, ๋™์ผํ•œ ๊ฐ’์ด๋ผ๋„ ๊ณ ์œ ํ•œ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„๋‹ค.
  3. LAG() ํ•จ์ˆ˜๋Š” ํ˜„์žฌ ํ–‰์˜ ํŠน์ • ์ปฌ๋Ÿผ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ด์ „ ํ–‰์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉ๋˜๋ฉฐ, LEAD() ํ•จ์ˆ˜๋Š” ์ดํ›„ ํ–‰์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
  4. RANK() ํ•จ์ˆ˜๋Š” ๋™์ผํ•œ ๊ฐ’์— ๋Œ€ํ•ด์„œ๋Š” ๊ฐ™์€ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•˜๊ณ , ๋‹ค์Œ ์ˆœ์œ„๋Š” ๊ฑด๋„ˆ๋›ฐ์ง€ ์•Š๊ณ  ์ด์–ด์„œ ๋ถ€์—ฌํ•œ๋‹ค.

8. [์˜ˆ์‹œ๋ฌธ์ œ] ๋‹ค์Œ ์ค‘ ํŠธ๋žœ์žญ์…˜(Transaction) ์ œ์–ด์–ด(TCL)์— ๋Œ€ํ•œ ์„ค๋ช…์œผ๋กœ ๊ฐ€์žฅ ์ ์ ˆํ•˜์ง€ ์•Š์€ ๊ฒƒ์€?

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