[TIL 01/15_์‚ฌ์ „์บ ํ”„ 3์ผ์ฐจ] SQL ๊ธฐ์ดˆ ๋ฌธ๋ฒ•

2025. 1. 15. 14:10ยทToday I Learned

ใ€€์˜ค๋Š˜ ํ•™์Šต ์š”์•ฝใ€€

1. ๊ฐœ์ธ ๊ณต๋ถ€

  • Spring ์‚ฌ์ „์บ ํ”„ ํ€˜์ŠคํŠธ ์ง„ํ–‰(1๊ฐœ)
    • 5) ๊ณต๋ถ€ํ•˜๋‹ค๋ณด๋‹ˆ ํŒ€ ํ”„๋กœ์ ํŠธ ์‹œ๊ฐ„์ด ์™”์–ด์š”!
      ๋‚ ์งœ๋ฅผ ํ™œ์šฉํ•˜๋Š” ํ•จ์ˆ˜ year(), curdate(), datediff()
  • ์—‘์…€๋ณด๋‹ค ์‰ฝ๊ณ  ๋น ๋ฅธ SQL 1์ฃผ์ฐจ ๊ฐ•์˜ ์ˆ˜๊ฐ•(5๊ฐ•)
    • 1-4. ํ•„์š”ํ•œ ํ•ญ๋ชฉ๋งŒ ๋ฝ‘์•„์„œ ์‚ฌ์šฉํ•˜๊ธฐ
    • 1-5. ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋กœ ํ•„ํ„ฐ๋งํ•˜๊ธฐ (WHERE ์ด๋ž€)
    • 1-6. ํ•„ํ„ฐ๋ง์„ ํ•  ๋•Œ ์œ ์šฉํ•œ ํ‘œํ˜„ ์•Œ์•„๋ณด๊ธฐ (๋น„๊ต์—ฐ์‚ฐ, BETWEEN, IN, LIKE)
    • 1-7. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์กฐ๊ฑด์œผ๋กœ ํ•„ํ„ฐ๋งํ•˜๊ธฐ (๋…ผ๋ฆฌ์—ฐ์‚ฐ)
    • 1-8. ์—๋Ÿฌ๋ฉ”์„ธ์ง€์— ๋‹นํ™ฉํ•˜์ง€ ์•Š๊ณ  ์Šค์Šค๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ

ใ€€ํ•™์Šต ๋‚ด์šฉ ์ •๋ฆฌใ€€

1. Spring ์‚ฌ์ „ ์บ ํ”„ ํ€˜์ŠคํŠธ

  • ๋‚ ์งœ์— ๊ด€ํ•œ ๋ฐ์ดํ„ฐ ์ถ”์ถœ 
    • ์—ฐ๋„ ์ถ”์ถœ : YEAR()
    • ์›” ์ถ”์ถœ : MONTH()
    • ์ผ ์ถ”์ถœ : DAYOFMONTH()
SELECT * FROM member WHERE YEAR(birth)=2000;
#memberํ…Œ์ด๋ธ”์—์„œ birth์ปฌ๋Ÿผ์˜ ๊ฐ’ ์ค‘ ๋…„๋„๊ฐ€ 2000๋…„์ธ ๊ฐ’๋งŒ ์ถ”์ถœ

SELECT * FROM member WHERE MONTH(birth)=1;
#memberํ…Œ์ด๋ธ”์—์„œ birth์ปฌ๋Ÿผ์˜ ๊ฐ’ ์ค‘ ์›”์ด 1์›”์ธ ๊ฐ’๋งŒ ์ถ”์ถœ

SELECT * FROM member WHERE DAYOFMONTH(birth)=1;
#memberํ…Œ์ด๋ธ”์—์„œ birth์ปฌ๋Ÿผ์˜ ๊ฐ’ ์ค‘ ์ผ์ด 1์ผ์ธ ๊ฐ’๋งŒ ์ถ”์ถœ

 

 

  • ํ•˜๋“œ์ฝ”๋”ฉ(Hard coding)์ด๋ž€?
    • ์†Œ์Šค ๋‚ด์— ํ”„๋กœ๊ทธ๋žจ์„ ์ฝ”๋”ฉํ•˜๋Š” ๋ฐฉ์‹, ์ฆ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ์Šค ์ฝ”๋“œ ๋‚ด๋ถ€์— Literal์˜ ํ˜•ํƒœ๋กœ ์ง์ ‘ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ
    • Literal(๋ฆฌํ„ฐ๋Ÿด)์ด๋ž€ ์‚ฌ์ „์  ์˜๋ฏธ๋กœ๋Š” '๋ฌธ์ž ๊ทธ๋Œ€๋กœ'๋ผ๋Š” ๋œป์ด์ง€๋งŒ, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ๋Š” ์†Œ์Šค ์ฝ”๋“œ์—์„œ ํŠน์ •ํ•œ ์ž๋ฃŒํ˜•์˜ ๊ฐ’์„ ์ง์ ‘ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•œ๋‹ค.
    • ํ•˜๋“œ์ฝ”๋”ฉ์˜ ๋ฐ˜๋Œ€๋ง์€ ์†Œํ”„ํŠธ ์ฝ”๋”ฉ ๋˜๋Š” ๋กœ๋”ฉ
    • ํ•˜๋“œ์ฝ”๋”ฉ์˜ ์žฅ์  : ํ…Œ์ŠคํŠธ์‹œ ๋™์ž‘์„ ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํ•˜๋“œ์ฝ”๋”ฉ์˜ ๋‹จ์  : ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์„ ๊ฐ€์ง€์ง€ ๋ชปํ•ด ์ฝ”๋“œ ๋ณ€๊ฒฝ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ํ™•๋ฅ ์ด ๋†’๋‹ค. 
  • ํ˜„์žฌ ์‹œ๊ฐ„์˜ ๋‚ ์งœ/์‹œ๊ฐ„ ๋ฐ˜ํ™˜
    • ํ˜„์žฌ์‹œ๊ฐ„์˜ ๋‚ ์งœ๋งŒ์„ ๋ฐ˜ํ™˜ : CURDATE()
    • ํ˜„์žฌ์‹œ๊ฐ„์˜ ์‹œ๊ฐ„๋งŒ์„ ๋ฐ˜ํ™˜ : CURTIEM()
    • ํ˜„์žฌ์‹œ๊ฐ„์„ ๋ฐ˜ํ™˜ : NOW()
SELECT * FROM team_projects WHERE CURDATE() BETWEEN start_date ANd end_date;
#team_projects ํ…Œ์ด๋ธ”์—์„œ ํ˜„์žฌ ์ง„ํ–‰์ค‘์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•˜๋Š” ์ฟผ๋ฆฌ
#ํ˜„์žฌ๋‚ ์งœ(CURDATE())๊ฐ€ start_date์™€ end_date ์‚ฌ์ด์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์„ ํƒํ•œ๋‹ค๋Š” ์˜๋ฏธ

 

  • ๋‚ ์งœ, ์‹œ๊ฐ„ ๊ณ„์‚ฐ ํ•จ์ˆ˜
    • ๋‚ ์งœ, ์‹œ๊ฐ„ ๋”ํ•˜๊ธฐ : DATE_ADD(๊ธฐ์ค€๋‚ ์งœ, INTERVAL)
    • ๋‚ ์งœ, ์‹œ๊ฐ„ ๋นผ๊ธฐ : DATE_SUB(๊ธฐ์ค€๋‚ ์งœ, INTERVAL)
    • ๋‘ ๊ธฐ๊ฐ„ ์‚ฌ์ด์˜ ์ผ์ˆ˜ ๊ณ„์‚ฐ : DATEDIFF(์ข…๋ฃŒ์ผ, ์‹œ์ž‘์ผ)
    • ๋‘ ๊ธฐ๊ฐ„ ์‚ฌ์ด์˜ ์‹œ๊ฐ„ ๊ณ„์‚ฐ : TIMEDIFF(์ข…๋ฃŒ์‹œ๊ฐ„, ์‹œ์ž‘์‹œ๊ฐ„)
    • ๋‘ ๊ธฐ๊ฐ„ ์‚ฌ์ด์˜ ๊ฐœ์›” ์ˆ˜ ๊ณ„์‚ฐ : PEROID_DIFF(์ข…๋ฃŒ๋…„์›”, ์‹œ์ž‘๋…„์›”)
    • ๋‘ ๊ธฐ๊ฐ„ ์‚ฌ์ด์˜ ์‹œ๊ฐ„ ๊ณ„์‚ฐ : TIMESTAMPDIFF(๋ฐ˜ํ™˜๊ฐ’ ํ˜•์‹MONTH,DAY,YEAR ๋“ฑ, ์‹œ์ž‘์ผ, ์ข…๋ฃŒ์ผ)
#INTERVAL ์ž‘์„ฑ ๋ฐฉ๋ฒ•
#DATE_ADD(๊ธฐ์ค€๋‚ ์งœ, INTERVAL) ์˜ˆ์‹œ
#ํ˜„์žฌ ์‹œ๊ฐ„ ๊ธฐ์ค€ 1์ดˆ,1๋ถ„, ..., +1๋…„, -1๋…„ ๊ณ„์‚ฐํ•˜๊ธฐ
SELECT DATE_ADD(NOW(), INTERVAL 1 SECOND)
SELECT DATE_ADD(NOW(), INTERVAL 1 MINUTE)
SELECT DATE_ADD(NOW(), INTERVAL 1 HOUR)
SELECT DATE_ADD(NOW(), INTERVAL 1 DAY)
SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH)
SELECT DATE_ADD(NOW(), INTERVAL 1 YEAR)
SELECT DATE_ADD(NOW(), INTERVAL -1 YEAR)

#PEROID_DIFF(์ข…๋ฃŒ๋…„์›”, ์‹œ์ž‘๋…„์›”)
#๋‚ ์งœ๋Š” YYYYMM ๋˜๋Š” YYMMํ˜•์‹์œผ๋กœ ์ž‘์„ฑ)
SELECT PERIOD_DIFF('202502','202412');
>> 2
SELECT PERIOD_DIFF('202412','202502');
>> -2
SELECT PERIOD_DIFF('2502','2312');
>> 14

 

 

2. ์—‘์…€๋ณด๋‹ค ์‰ฝ๊ณ  ๋น ๋ฅธ SQL 1์ฃผ์ฐจ ๊ฐ•์˜ ์ˆ˜๊ฐ•

  • ์ปฌ๋Ÿผ ๋ช…์นญ ๋ฐ”๊พธ๊ธฐ
    • ๋ฐฉ๋ฒ•
      • AS ์‚ฌ์šฉํ•˜๊ธฐ : ์ปฌ๋Ÿผ1 as ๋ณ„๋ช…1
      • ๋„์–ด์“ฐ๊ธฐ ํ•˜๊ธฐ : ์ปฌ๋Ÿผ2 ๋ณ„๋ช…2
    • ์œ ์˜์‚ฌํ•ญ
      • ์˜๋ฌธ๊ณผ ์–ธ๋”๋ฐ”(_)๋กœ๋งŒ ๊ตฌ์„ฑ : ๋ณ„๋ช…๋งŒ ์ž‘์„ฑ ex: od_no
      • ํŠน์ˆ˜๋ฌธ์ž, ํ•œ๊ธ€, ๋„์–ด์“ฐ๊ธฐ ํฌํ•จ : "๋ณ„๋ช…"์„ ํฐ๋”ฐ์˜ดํ‘œ ์•ˆ์— ์ž‘์„ฑ ex: "์ฃผ๋ฌธ๋ฒˆํ˜ธ"
      • _(์–ธ๋”๋ฐ”๋งŒ ๊ฐ€๋Šฅ) ์ผ๋ฐ˜ -๋Š” ํฐ๋”ฐ์˜ดํ‘œ ํ•„์š”
  • ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง ํ•˜๊ธฐ
    • From ํ…Œ์ด๋ธ”๋ช… ๋’ค์— Where์ ˆ๋กœ ์ž‘์„ฑํ•œ๋‹ค.
    • ๋น„๊ต ์—ฐ์‚ฐ์ž : > , < , = , <>
    • between, in, like ๋“ฑ
    • ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž : and , or , not
  • ์—๋Ÿฌ๋ฉ”์„ธ์ง€ ๋Œ€์‘
    • ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ( @@๋Š” ์ฟผ๋ฆฌ์˜ ํ‹€๋ฆฐ ๋ถ€๋ถ„์ด ํ‘œ์‹œ๋จ)
      1. ํ…Œ์ด๋ธ” ๋ช…์„ ๋‹ค๋ฅด๊ฒŒ ์ ์—ˆ์„ ๋•Œ : Table @@ dosen't exist
      2. ์ปฌ๋Ÿผ ๋ช…์„ ๋‹ค๋ฅด๊ฒŒ ์ ์—ˆ์„ ๋•Œ : Unknown coumn @@
      3. ํ•„ํ„ฐ๋ง ์กฐ๊ฑด์„ ์ค„ ๋•Œ ๋ฌธ์ž์— ์ž‘์€ ๋”ฐ์˜ดํ‘œ๋ฅผ ์•ˆํ–ˆ์„ ๋•Œ : Unknown coumn ''@@ in 'where clause
    • ๊ทธ ์™ธ ๋‹ค์–‘ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์ง€๋งŒ, ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๊ณต๋ถ€ํ•˜๊ธฐ ๋ณด๋‹ค๋Š” ์—๋Ÿฌ๋ฉ”์„ธ์ง€๊ฐ€ ๋–ด์„๋•Œ ๊ทธ๊ฒƒ์„ ์ฝ์–ด๋ณด๋Š” ๊ฒƒ์ด ์ค‘์š”
  • ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์ฃผ์˜ํ•  ์ 
    • ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ํŒŒ์•…ํ•  ๊ฒƒ
      : ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์–ด๋–ค ํ…Œ์ด๋ธ”์ด ์žˆ๊ณ , ๊ฐ ํ…Œ์ด๋ธ”์ด ์–ด๋–ค ์—ด๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ
    • ์กฐ๊ฑด์˜ ์ •ํ™•์„ฑ ํ™•์ธ
      : ์ฃผ์–ด์ง„ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๊ฒŒ ์กฐ๊ฑด์„ ์ •ํ™•ํ•˜๊ฒŒ ์„ค์ •

ใ€€๋ฉ”๋ชจใ€€

1. MySQL / SQL Server / Oracle?

  • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(RDBMS, Relational Database Management System)์˜ ์ข…๋ฅ˜
  • ๋‚ ์งœ์˜ ์ผ์„ ์ถ”์ถœํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ฐพ๋Š”๋ฐ MYSQL์€ DAYOFMONTH()๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , SQL Server๋Š” DAY()ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ์ฐจ์ด๋ฅผ ์•Œ์•„๋ณด์•˜๋‹ค.
ํŠน์„ฑ MySQL SQL Server Oracle
๊ฐœ๋ฐœ์‚ฌ Oracle Microsoft Oracle Corporation
์šด์˜ ์ฒด์ œ Window, Linux, macOS Windows, Linux (2017์ด์ƒ) Window, Linux, Solaris
๊ธฐ๋Šฅ ๊ฒฝ๋Ÿ‰ํ™”, ๊ธฐ๋ณธ ๊ธฐ๋Šฅ ๊ณ ๊ธ‰ BI, ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ ๊ณ ๊ธ‰ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ, ๋ถ„์„ ๊ธฐ๋Šฅ
์„ฑ๋Šฅ ๋น ๋ฅธ ์ฝ๊ธฐ ์„ฑ๋Šฅ, ์ž‘์€ ๊ทœ๋ชจ ์ ํ•ฉ ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐ ํŠธ๋žœ์žญ์…˜
๋ณด์•ˆ ๊ธฐ๋ณธ ๋ณด์•ˆ ๊ธฐ๋Šฅ ๊ณ ๊ธ‰ ๋ณด์•ˆ ๊ธฐ๋Šฅ ๊ณ ๊ธ‰ ๋ณด์•ˆ ๋ฐ ์•”ํ˜ธํ™” ๊ธฐ๋Šฅ

 


ใ€€๋‹ค์Œ ๊ณต๋ถ€ ๊ณ„ํšใ€€

1. 3์ฃผ์ฐจ ๊ฐ•์˜๊นŒ์ง€ ์ˆ˜๊ฐ• ์™„๋ฃŒ

2. ์‚ฌ์ „์บ ํ”„ ํ€˜์ŠคํŠธ  6๋‹จ๊ณ„ ํ’€๊ธฐ

'Today I Learned' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[TIL 01/20_์‚ฌ์ „์บ ํ”„ 6์ผ์ฐจ] SQL ๊ธฐ์ดˆ ๋ฌธ๋ฒ•  (0) 2025.01.20
[TIL 01/17_์‚ฌ์ „์บ ํ”„ 5์ผ์ฐจ] SQL ๊ธฐ์ดˆ ๋ฌธ๋ฒ•  (0) 2025.01.17
[TIL 01/16_์‚ฌ์ „์บ ํ”„ 4์ผ์ฐจ] SQL ๊ธฐ์ดˆ ๋ฌธ๋ฒ•  (0) 2025.01.16
[TIL 01/14_์‚ฌ์ „์บ ํ”„ 2์ผ์ฐจ] SQL ๊ธฐ์ดˆ ๋ฌธ๋ฒ•  (1) 2025.01.14
์Šคํƒ€ํ„ฐ ๋…ธํŠธ  (0) 2025.01.13
'Today I Learned' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [TIL 01/17_์‚ฌ์ „์บ ํ”„ 5์ผ์ฐจ] SQL ๊ธฐ์ดˆ ๋ฌธ๋ฒ•
  • [TIL 01/16_์‚ฌ์ „์บ ํ”„ 4์ผ์ฐจ] SQL ๊ธฐ์ดˆ ๋ฌธ๋ฒ•
  • [TIL 01/14_์‚ฌ์ „์บ ํ”„ 2์ผ์ฐจ] SQL ๊ธฐ์ดˆ ๋ฌธ๋ฒ•
  • ์Šคํƒ€ํ„ฐ ๋…ธํŠธ
aggeeeee
aggeeeee
ใ€€ φ(๏ผŽ๏ผŽ;)ใ€€๐Ÿ”œใ€€\_ใธ(โ–ญ-โ–ญ)โœจ
  • aggeeeee
    ๐Ÿฅ” ๋‹˜์˜ ๋ธ”๋กœ๊ทธ
    aggeeeee
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (155)
      • Today I Learned (25)
      • ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ (115)
        • ๋ณธ์บ ํ”„ ๊ณผ์ œ (17)
        • ์‚ฌ์ „์บ ํ”„ ๊ณผ์ œ (23)
        • SQL ์ฝ”๋“œ์นดํƒ€ (44)
        • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋“œ์นดํƒ€ (31)
      • ๐Ÿ’ป๐Ÿš€ (15)
        • Java (7)
        • Git & GitHub (1)
        • CS (4)
        • Spring & SpringBoot (3)
  • ๋งํฌ

  • ์ตœ๊ทผ ๊ธ€

  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
aggeeeee
[TIL 01/15_์‚ฌ์ „์บ ํ”„ 3์ผ์ฐจ] SQL ๊ธฐ์ดˆ ๋ฌธ๋ฒ•
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”