๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๐ŸŒฎ ๐Ÿ’ฌ
๐Ÿ“œ ์ž๊ฒฉ์ฆ/SQLD

[๋…ธ๋ž‘์ด] ์˜ค๋‹ต | ๊ณผ๋ชฉ 2 | SQL ๊ธฐ๋ณธ ๋ฐ ํ™œ์šฉ 1-50

by ๋ฐ”์ฟ„๋ฆฌ 2024. 2. 18.

 

1. DML, DDL, DCL, TCL ๊ตฌ๋ถ„

 

8. WHERE ์ ˆ์—๋Š” ์ง‘๊ณ„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. (์˜ˆ: WHERE AVG(SAL) >= 1800X)

 

10. NULL ๊ฐ’์„ ์กฐ๊ฑด์ ˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ IS NULL, IS NOT NULL์ด๋ž€ ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

11. Oracle vs Sql ๊ณต๋ฐฑ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

query : INSERT INTO ํ…Œ์ด๋ธ” VALUES ('', '', '')

์œ„์™€ ๊ฐ™์€ query ์‹คํ–‰์‹œ, Oracle์—๋Š” NULL๋กœ ์ž…๋ ฅ๋˜๊ณ  Sql์—๋Š” ''์œผ๋กœ ์ž…๋ ฅ๋œ๋‹ค.

- Oracle: SELECT * FROM ํ…Œ์ด๋ธ” WHERE ์ปฌ๋Ÿผ๋ช… IS NULL;

- Sql : SELECT * FROM ํ…Œ์ด๋ธ” WHERE ์ปฌ๋Ÿผ๋ช… = '';

 

14. GROUP BY, HAVING

- ์ง‘๊ณ„ ํ•จ์ˆ˜์˜ ํ†ต๊ผ ์ •๋ณด๋Š” NULL ๊ฐ’์„ ๊ฐ€์ง„ ํ–‰์„ ์ œ์™ธํ•˜๊ณ  ์ˆ˜ํ–‰ํ•œ๋‹ค.

- GROUP BY ์ ˆ์—์„œ๋Š” SELECT ์ ˆ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ALIAS ๋ช…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

- ์ง‘๊ณ„ ํ•จ์ˆ˜๋Š” WHERE ์ ˆ์—๋Š” ์˜ฌ ์ˆ˜ ์—†๋‹ค. → ์ง‘๊ณ„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” GROUP BY ์ ˆ๋ณด๋‹ค WHERE ์ ˆ์ด ๋จผ์ € ์ˆ˜ํ–‰๋œ๋‹ค.

- WHERE ์ ˆ์€ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ GROUP์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ ์ „์— ํ–‰๋“ค์„ ๋ฏธ๋ฆฌ ์ œ๊ฑฐํ•œ๋‹ค.

 

16. ์˜ค๋ผํด์—์„œ ๋‚ ์งœ์˜ ์—ฐ์‚ฐ์€ ์ˆซ์ž์˜ ์—ฐ์‚ฐ๊ณผ ๊ฐ™๋‹ค.

ํŠน์ • ๋‚ ์งœ์— 1์„ ๋”ํ•˜๋ฉด ํ•˜๋ฃจ๋ฅผ ๋”ํ•œ ๊ฒฐ๊ณผ์™€ ๊ฐ™์œผ๋ฏ€๋กœ 1/24/60 = 1๋ถ„์„ ์˜๋ฏธํ•œ๋‹ค.

1/24/(60/10) = 10๋ถ„๊ณผ ๊ฐ™๋‹ค.

 

20. NULL ๊ด€๋ จ ํ•จ์ˆ˜

- Oracle : NVL(ํ‘œํ˜„์‹1, ํ‘œํ˜„์‹2)

- Sql : ISNULL(ํ‘œํ˜„์‹1, ํ‘œํ˜„์‹2)

→ ํ‘œํ˜„์‹1์˜ ๊ฐ’์ด NULL์ด๋ฉด ํ‘œํ˜„์‹2์˜ ๊ฐ’์ด ์ถœ๋ ฅ๋œ๋‹ค. (๋‹จ, ํ‘œํ˜„์‹1๊ณผ ํ‘œํ˜„์‹2์˜ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๊ฐ™์•„์•ผ ํ•œ๋‹ค.)

 

27. NULL ํฌํ•จ ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ

- NULL + 2, 2 + NULL

- NULL - 2, 2 - NULL

- NULL * 2, 2 * NULL

- NULL / 2, 2 / NULL

์˜ ๊ฒฐ๊ณผ๋Š” ๋ชจ๋‘ NULL ์ด๋‹ค.

 

28. ORDER BY ์ ˆ ํŠน์ง•

- ๊ธฐ๋ณธ์ ์ธ ์ •๋ ฌ ์ˆœ์„œ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ(ASC)์ด๋‹ค.

- ์ˆซ์žํ˜• ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ–ˆ์„ ๊ฒฝ์šฐ์— ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’๋ถ€ํ„ฐ ์ถœ๋ ฅ๋œ๋‹ค.

- ๋‚ ์งœํ˜• ๋ฐ์ดํ„ฐ ๋‹ค์ž…์€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ–ˆ์„ ๊ฒฝ์šฐ ๋‚ ์งœ ๊ฐ’์ด ๊ฐ€์žฅ ์ด๋ฅธ ๊ฐ’์ด ๋จผ์ € ์ถœ๋ ฅ๋œ๋‹ค.

- Oracle์—์„œ๋Š” NULL ๊ฐ’์„ ๊ฐ€์žฅ ํฐ ๊ฐ’์œผ๋กœ ๊ฐ„์ฃผํ•˜์—ฌ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ–ˆ์„ ๊ฒฝ์šฐ์— ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์—, ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ–ˆ์„ ๊ฒฝ์šฐ์—๋Š” ๊ฐ€์žฅ ๋จผ์ € ์œ„์น˜ํ•œ๋‹ค.

- ๋ฐ˜๋ฉด, SQL Server์—์„œ๋Š” NULL ๊ฐ’์„ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์œผ๋กœ ๊ฐ„์ฃผํ•˜์—ฌ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ–ˆ์„ ๊ฒฝ์šฐ์—๋Š” ๊ฐ€์žฅ ๋จผ์ €, ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ–ˆ์„ ๊ฒฝ์šฐ์—๋Š” ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•œ๋‹ค.

 

29. ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” SQL

SELECT ์ง€์—ญ, SUM(๋งค์ถœ๊ธˆ์•ก) AS ๋งค์ถœ๊ธˆ์•ก
    FROM ์ง€์—ญ๋ณ„๋งค์ถœ
    GROUP BY ์ง€์—ญ
    ORDER BY ๋…„ DESC;

 

→ GROUP BY ์ ˆ์— ๋ช…์‹œ๋˜์ง€์•Š์€ ์ปฌ๋Ÿผ์€ ๋‹ค๋ฅธ ์ ˆ์— ์ง‘๊ณ„ ํ•จ์ˆ˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

์ง€์—ญ์œผ๋กœ GROUPING ํ–ˆ๋Š”๋ฐ, ๋…„์œผ๋กœ ์ •๋ ฌํ•  ์ˆ˜ ์—†๋‹ค.

 

32. SELECT ๋ฌธ์žฅ์˜ ์‹คํ–‰ ์ˆœ์„œ๋Š” FROMWHERE GROUP BYHAVING SELECTORDER BY ์ด๋‹ค

 

33. ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”๋กœ๋ถ€ํ„ฐ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ „์ฒด ํ…Œ์ด๋ธ” ๊ฐœ์ˆ˜์—์„œ ์ตœ์†Œ N - 1 ๊ฐœ ๋งŒํผ์˜ JOIN ์กฐ๊ฑด์ด ํ•„์š”ํ•˜๋‹ค.

- 5๊ฐœ์˜ ํ…Œ์ด๋ธ”๋กœ๋ถ€ํ„ฐ ํ•„์š”ํ•œ ์นผ๋Ÿผ์„ ์กฐํšŒํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ์ตœ์†Œ 4๊ฐœ์˜ JOIN ์กฐ๊ฑด์ด ํ•„์š”ํ•˜๋‹ค.

 

35. JOIN

- ์ผ๋ฐ˜์ ์œผ๋กœ ์กฐ์ธ์€ PK์™€ FK๊ฐ’์˜ ์—ฐ๊ด€์„ฑ์— ์˜ํ•ด ์„ฑ๋ฆฝ๋œ๋‹ค.

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

- EQUI JOIN์€ ์กฐ์ธ์— ๊ด€์—ฌํ•˜๋Š” ํ…Œ์ด๋ธ” ๊ฐ„์˜ ์นผ๋Ÿผ ๊ฐ’๋“ค์ด ์ •ํ™•ํ•˜๊ฒŒ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

- EQUI JOIN์€ '=' ์—ฐ์‚ฐ์ž์— ์˜ํ•ด์„œ๋งŒ ์ˆ˜ํ–‰๋˜๋ฉฐ, ๊ทธ ์ด์™ธ์˜ ๋น„๊ต ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ชจ๋‘ NON EQUI JOIN์ด๋‹ค.

- ๋Œ€๋ถ€๋ถ„ NON EQUI JOIN์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋•Œ๋กœ๋Š” ์„ค๊ณ„์ƒ์˜ ์ด์œ ๋กœ ์ˆ˜ํ–‰์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

 

37. ์ˆœ์ˆ˜ ๊ด€๊ณ„ ์—ฐ์‚ฐ์ž์™€ SQL ๋ฌธ์žฅ ๋น„๊ต

- SELECT ์—ฐ์‚ฐ์€ WHERE ์ ˆ๋กœ ๊ตฌํ˜„

- PROJECT ์—ฐ์‚ฐ์€ SELECT ์ ˆ๋กœ ๊ตฌํ˜„

- (NATURAL) JOIN ์—ฐ์‚ฐ์€ ๋‹ค์–‘ํ•œ JOIN ๊ธฐ๋Šฅ์œผ๋กœ ๊ตฌํ˜„

- DIVIDE ์—ฐ์‚ฐ์€ ํ˜„์žฌ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ

 

43. CROSS JOIN์€ E.F.CODD ๋ฐ•์‚ฌ๊ฐ€ ์–ธ๊ธ‰ํ•œ ์ผ๋ฐ˜ ์ง‘ํ•ฉ ์—ฐ์‚ฐ์ž์˜ PRODUCT์˜ ๊ฐœ๋…์œผ๋กœ, ํ…Œ์ด๋ธ” ๊ฐ„ JOIN ์กฐ๊ฑด์ด ์—†๋Š” ๊ฒฝ์šฐ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ์˜ ์กฐํ•ฉ์„ ๋งํ•œ๋‹ค. ์กฐ๊ฑด์ ˆ์ด ์—†๊ฑฐ๋‚˜ CROSS JOIN ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” ์–‘์ชฝ ์ง‘ํ•ฉ์˜ M*N ๊ฑด์˜ ๋ฐ์ดํ„ฐ ์กฐํ•ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.

 

44. LEFT OUTER JOIN

์กฐ์ธ ์ˆ˜ํ–‰ ์‹œ ๋จผ์ € ํ‘œ๊ธฐ๋œ ์ขŒ์ธก ํ…Œ์ด๋ธ”์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ์ฝ์€ ํ›„, ๋‚˜์ค‘ ํ‘œ๊ธฐ๋œ ์šฐ์ธก ํ…Œ์ด๋ธ”์—์„œ JOIN ๋Œ€์ƒ ํ…Œ์ด๋ธ”์„ ์ฝ์–ด ์˜จ๋‹ค. ์ฆ‰, Table A์™€ B๊ฐ€ ์žˆ์„ ๋•Œ (Table 'A'๊ฐ€ ๊ธฐ์ค€์ด ๋จ), A์™€ B๋ฅผ ๋น„๊ตํ•ด์„œ B์˜ JOIN ์นผ๋Ÿผ์—์„œ ๊ฐ™์€ ๊ฐ’์ด ์žˆ์„ ๋•Œ ๊ทธ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , B์˜ JOIN ์นผ๋Ÿผ์—์„œ ๊ฐ™์€ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” B ํ…Œ์ด๋ธ”์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ์นผ๋Ÿผ๋“ค์€ NULL๋กœ ์ฑ„์šด๋‹ค.

 

45. FULL OUTER JOIN

์กฐ์ธ ์ˆ˜ํ–‰ ์‹œ ์ขŒ์ธก, ์šฐ์ธก ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด JOINํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ฆ‰, TABLE A์™€ B๊ฐ€ ์žˆ์„ ๋•Œ (TABLE 'A', 'B' ๋ชจ๋‘ ๊ธฐ์ค€์ด ๋จ), RIGHT OUTER JOIN๊ณผ LEFT OUTER JOIN์˜ ๊ฒฐ๊ณผ๋ฅผ ํ•ฉ์ง‘ํ•ฉ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ ๊ฒฐ๊ณผ์™€ ๋™์ผํ•˜๋‹ค.

 

49. Oracle์—์„œ๋Š” OUTER JOIN ๊ตฌ๋ฌธ์„ (+) ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ANSI ๋ฌธ์žฅ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Inner์ชฝ ํ…Œ์ด๋ธ”์— ์กฐ๊ฑด์ ˆ์„ ON์ ˆ์— ํ•จ๊ป˜ ์œ„์น˜์‹œ์ผœ์•ผ ์ •์ƒ์ ์ธ OUTER JOIN์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

50. NULL ์—ฐ์‚ฐ

- ์นผ๋Ÿผ๋ผ๋ฆฌ ์—ฐ์ƒํ•  ๋•Œ NULL์„ ํฌํ•จํ•˜๋ฉด ๊ฒฐ๊ณผ๋Š” NULL์ด๋‹ค.

- ๋ ˆ์ฝ”๋“œ๋ผ๋ฆฌ ์—ฐ์‚ฐํ•  ๋•Œ NULL์„ ํฌํ•จํ•˜๋ฉด ๊ฒฐ๊ณผ๊ฐ€ NULL์ด ์•„๋‹ˆ๋ฉฐ, ์ด์œ ๋Š” NULL์„ ์—ฐ์‚ฐ์—์„œ ์ œ์™ธํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.