๐Ÿ”ฅ SQL

[D+3] ์—‘์…€๋ณด๋‹ค ์‰ฌ์šด SQL(3) - ๋ฐ์ดํ„ฐ ํŽธ์ง‘/๊ฐ€๊ณต, ์กฐ๊ฑด๋ฌธ (REPLACE, SUBSTRING, CONCAT, IF, CASE)

๊น€์ˆฎ์—‰ 2024. 4. 17. 11:25

SQL ์‹œ์ž‘ 3์ผ์ฐจ, 3์ฃผ์ฐจ๋ฅผ ์ง€๋‚˜ ์™„๊ฐ•์„ ํ–ฅํ•ด ๋‹ฌ๋ ค๊ฐ€๋Š” ์ค‘!

 

โœ๏ธSTUDY INDEX

1. SQL ๋ฐ์ดํ„ฐ ํŽธ์ง‘/๊ฐ€๊ณต (replace, substring, concat) 
2. ์กฐ๊ฑด๋ฌธ (if ์กฐ๊ฑด, ์กฐ๊ฑด์„ ์ถฉ์กฑํ•  ๋•Œ, ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ•  ๋•Œ) 
3. ๋‹ค์ค‘ ์กฐ๊ฑด๋ฌธ (case when ~ then, else ~ end)
4. select ๋ฌธ์—์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜ ํ•ด๊ฒฐ๋ฒ• 

 

1. SQL ๋ฐ์ดํ„ฐ ํŽธ์ง‘/๊ฐ€๊ณต (replace, substring, concat) 

SQL์—์„œ ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋กœ ๊ต์ฒด(replace)ํ•˜๊ฑฐ๋‚˜ 

ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ž˜๋ผ(substring) ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ ๊ฐ€๊ณต(concat) ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์•Œ๋ ค ๋“œ๋ฆด๊ฒŒ์š”. 

ํ•จ์ˆ˜๋ช…๊ณผ ์‚ฌ์šฉ๋ฒ•   ์˜๋ฏธ  ์˜ˆ์‹œ 
replace (๋ฐ”๊ฟ€ ์ปฌ๋Ÿผ, ํ˜„์žฌ ๊ฐ’, ๋ฐ”๊ฟ€ ๊ฐ’) ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ•˜๋Š” ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ  #์€์‚ผ๊ตฌ๋ฅผ ์€ํ‰๊ตฌ๋กœ ๋ณ€๊ฒฝ 
select replace
(addr, '์€์‚ผ๊ตฌ', '์€ํ‰๊ตฌ') 
from customers 
where addr like '%์€์‚ผ๊ตฌ%' 
substr (์กฐํšŒ ์ปฌ๋Ÿผ, ์‹œ์ž‘ ์œ„์น˜, ๊ธ€์ž ์ˆ˜) ์›ํ•˜๋Š” ๋ฌธ์ž๋งŒ ๋‚จ๊ธฐ๊ธฐ 
๋˜๋Š” ํ•„์š” ์—†๋Š” ๋ฌธ์ž ์ž๋ฅด๊ธฐ 
#์ฃผ์†Œ ์ „์ฒด๊ฐ€ ์•„๋‹Œ ์‹œ๋„๋งŒ ๋‚˜์˜ค๊ฒŒ ์ˆ˜์ •
select substr(addr, 1, 2) "์‹œ๋„"
from customers 
where addr like '%์„œ์šธํŠน๋ณ„์‹œ%'
concat (๋ถ™์ด๊ณ  ์‹ถ์€ ๊ฐ’1, 2, 3 ...)  ์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ฉ์น˜๊ธฐ  #์„œ์šธ์‹œ ์Œ์‹์ ๋ช…์„ '[์„œ์šธ] ์Œ์‹์ ๋ช…'์œผ๋กœ
select concat (' [ ', substr(addr, 1, 2) ,' ] ', restaurant_name) as '๋ฐ”๋€ ์Œ์‹์  ๋ช…' 
from food_orders 
where addr like '%์„œ์šธ%'

 

* concat์—๋Š” ์ปฌ๋Ÿผ, ๋ฌธ์ž, ์ˆซ์ž, ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ ๋ถ™์ผ ์ˆ˜ ์žˆ์–ด์š”. 

* %๋Š” 0๊ฐœ ์ด์ƒ์˜ ์ž„์˜์˜ ๋ฌธ์ž์—ด์„ ๋‚˜ํƒ€๋‚ด์š”.

๊ทธ๋ž˜์„œ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๋ฌธ์ž์˜ ์•ž๋’ค์— ๋ถ™์ด๋ฉด, %์€์‚ผ๊ตฌ%๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ์ฃผ์†Œ๋ฅผ ์ฐพ๊ฒ ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. 

 

2. ์กฐ๊ฑด๋ฌธ (if ์กฐ๊ฑด, ์กฐ๊ฑด์„ ์ถฉ์กฑํ•  ๋•Œ, ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ•  ๋•Œ)

์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํฌ๋งท์„ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. 

๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์ธ ๋ฐฉ๋ฒ•์€ IF ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ฏธ ์ธ๋ฑ์Šค ์ด๋ฆ„์—์„œ ์‚ฌ์šฉ๋ฒ•์ด ์ž‘์„ฑ๋˜์–ด ์žˆ์–ด์„œ, ๊ฐœ์ธ์ ์œผ๋กœ ์–ด๋ ค์› ๋˜ ์‹ค์Šต ์˜ˆ์ œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค. 

 

์žฌ๋ฏธ์žˆ๋Š” ์ ์€ IF ๋ฌธ์ด ๋‹จ๋…์œผ๋กœ ๋‚˜์˜ค๊ธฐ๋„ ํ•˜๊ณ ,

๋‹ค๋ฅธ ํ•จ์ˆ˜ ์•ˆ์— ๋“ค์–ด๊ฐ€์„œ๋„ ์“ธ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜ ์‹ค์Šต์€ ์ง์ ‘ ์ฟผ๋ฆฌ๋ฅผ ์งœ๊ธฐ ๋ณด๋‹ค๋Š” ๋ฌธ๋ฒ•์„ ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋Š” ์šฉ์œผ๋กœ๋งŒ ์ƒ๊ฐํ•˜๋ฉด ์ข‹์„ ๋“ฏํ•ฉ๋‹ˆ๋‹ค.

์™œ๋ƒ๋ฉด ์•„์ง SQL 3์ผ ์ฐจ์ธ ์ €์—๊ฒ ์กฐ๊ธˆ ์–ด๋ ต๊ทธ๋“ฑ์š”  ... ๐Ÿ™„๐Ÿ˜Š

์–ธ์  ๊ฐ„ ๋ช‡ ์‹ญ ์ค„์˜ ์ฟผ๋ฆฌ๋ฅผ ์ˆ ์ˆ  ์งœ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.   

#์ž˜๋ชป๋œ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ, ๋„๋ฉ”์ธ ๋ณ„ ๊ณ ๊ฐ์˜ ์ˆ˜์™€ ํ‰๊ท  ์—ฐ๋ น์„ ๊ตฌํ•˜๋Š” ์‹ค์Šต 
select substring(if(email like '%gmail%', replace(email, 'gmail', '@gmail'), email), 10) "๋„๋ฉ”์ธ",
       count(customer_id) "๊ณ ๊ฐ ์ˆ˜",
       avg(age) "ํ‰๊ท  ์—ฐ๋ น"
from customers
group by 1

 

3. ๋‹ค์ค‘ ์กฐ๊ฑด๋ฌธ (case when ~ then, else ~ end)

์œ„์—๋งŒ ๋ด๋„ ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๊ฐ€ ๊ฒน์ณ์ง€๋ฉด ๋ฒŒ์จ ๋ณต์žกํ•ด ๋ณด์ด์ฃ ? 

์—ฌ๋Ÿฌ ๋ฒˆ์˜ IF ๋ฌธ์„ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด 2๊ฐœ ์ด์ƒ์˜ ์กฐ๊ฑด์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ Case ๋ฌธ์ž…๋‹ˆ๋‹ค! 

๋งˆ์น˜ 2์ผ ์ฐจ์— group by๋ฅผ ์•Œ๊ฒŒ ๋˜์—ˆ์„ ๋•Œ์™€ ๊ฐ™์€ ๊ธฐ์จ์ž…๋‹ˆ๋‹ค๐Ÿ˜š

์•„๋ž˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•๊ณผ ๊ฐ„๋‹จํ•œ ์ ์šฉ ์˜ˆ์ œ ์†Œ๊ฐœ๋“œ๋ฆฝ๋‹ˆ๋‹ค. 

#CASE๋ฌธ ์‚ฌ์šฉ ๋ฐฉ๋ฒ• 

case when ์กฐ๊ฑด1 then ๊ฐ’(์ˆ˜์‹)1
     when ์กฐ๊ฑด2 then ๊ฐ’(์ˆ˜์‹)2
     else ๊ฐ’(์ˆ˜์‹)3
end
#์—ฐ๋ น๋Œ€๋ณ„๋กœ ๊ณ ๊ฐ ๋ถ„๋ฅ˜ ๋งŒ๋“ค๊ธฐ 
SELECT name, 
	gender, 
	age, 
	case when age >= 40 then '40๋Œ€ ์ด์ƒ'
		when age between 30 and 39 then '30๋Œ€'
		when age between 20 and 29 then '20๋Œ€'
		when age between 10 and 19 then '10๋Œ€'
		when age between 0 and 9 then '10๋Œ€ ๋ฏธ๋งŒ' end '์—ฐ๋ น๋Œ€'
FROM customers

 

4. SELECT ๋ฌธ์—์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜ ํ•ด๊ฒฐ๋ฒ• 

๋งˆ์ง€๋ง‰์œผ๋กœ select ๋ฌธ์—์„œ ์™•์™•์™• ์ดˆ๋ณด๊ฐ€ ๊ฒช์ด ์‰ฌ์šด ์˜ค๋ฅ˜์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ด๋“œ๋ฆฝ๋‹ˆ๋‹ค. 

์ด๊ฑด 100% ์ œ ๊ฒฝํ—˜์—์„œ ๋‚˜์˜จ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ €์™€ ๊ฐ™์€ ์ˆ˜์ค€์„ ๊ฐ–๊ณ  ๊ณ„์‹  ๋ถ„๊ป˜์„œ๋Š” ๋งŽ์ด ๊ณต๊ฐํ•˜์‹ค ๊ฑฐ๋ผ ์ƒ๊ฐํ•ด์š” ใ…‹ใ…‹ 

 

  • select ์ ˆ ์ปฌ๋Ÿผ & ํ•จ์ˆ˜ ๋’ค์— , ์ฝค๋งˆ๋ฅผ ์“ฐ์ง€ ์•Š์•˜์„ ๋•Œ 
    ํ•จ์ˆ˜๋‚˜ ์˜คํƒ€๊ฐ€ ์—†๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ ๋Œ€์ฒด ์™œ!! ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š”์ง€ ๊ถ๊ธˆํ–ˆ๋‹ค๋ฉด ์ฝค๋งˆ๋ฅผ ํ™•์ธํ•ด ๋ณด์„ธ์š”.  
  • table์— ์—†๋Š” ์ปฌ๋Ÿผ์„ select ๋ฌธ์— ๋ถˆ๋ €์„ ๋•Œ 
    ๊ฐ€๋” from ํ…Œ์ด๋ธ”์— ์—†๋Š” ์ปฌ๋Ÿผ์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๋Ÿฌ๋ฉด ์˜ค๋ฅ˜ ๋‚ฉ๋‹ˆ๋‹ค! 
    ์ €๋Š” ํ˜„์žฌ ์„œ๋ธŒ ์ฟผ๋ฆฌ ๊ฐœ๋…์— ๋Œ€ํ•ด ๋ฐฐ์šฐ๊ณ  ์žˆ๋Š”๋ฐ, ์ฟผ๋ฆฌ ์•ˆ์— ์ฟผ๋ฆฌ๋ฅผ ์งœ๋‹ค ๋ณด๋‹ˆ ์ด๋Ÿฐ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋”๋ผ๊ณ ์š”. 
  • ์ปฌ๋Ÿผ ํ˜น์€ ํ•จ์ˆ˜ ๋“ฑ์— ์˜คํƒ€๊ฐ€ ์žˆ์„ ๋•Œ 

๊ทธ๋ฆฌ๊ณ  ์œ„ ๋‚ด์šฉ์„ ํ™•์ธํ–ˆ๋Š”๋ฐ๋„ ์˜คํƒ€๋ฅผ ์ง„์งœ ๋ชจ๋ฅด๊ฒ ๊ฑฐ๋‚˜ ๋น ๋ฅธ ๋””๋ฒ„๊น…์„ ์›ํ•˜์‹œ๋Š” ๋ถ„๋“ค์€ 

์•„๋ฌป๋”ฐ ChatGPTํ•œํ…Œ ๋ฌผ์–ด๋ณด๋Š”๊ฒŒ ๊ฐ€์žฅ ๋น ๋ฅด๊ณ  ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค ใ…Žใ…Ž ์ œ ๋…ํ•™ ๋ฉ”์ดํŠธ์ด์ž ์ œ์ผ ์นœ์ ˆํ•œ ์„ ์ƒ๋‹˜์ž…๋‹ˆ๋‹ค! 

๋Œ€ํ•™๊ต ๊ต์–‘ ์ˆ˜์—…์„ ๋“ฃ๋˜ ์‹œ์ ˆ์—” Chat GPT๊ฐ€ ์—†์–ด ํŒŒ์ด์ฌ์„ ์ค‘๋„ ํฌ๊ธฐํ–ˆ๋˜ ๊ธฐ์–ต์ด ๋‚˜๋„ค์š”. 

๋งŒ์•ฝ ๊ทธ๋•Œ ์ด ์นœ๊ตฌ๊ฐ€ ์žˆ์—ˆ๋‹ค๋ฉด, ์ข€ ๋” ์ˆ˜์›”ํ•˜๊ฒŒ ์–ธ์–ด๋ฅผ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์ง€ ์•Š์•˜์„๊นŒ ์ƒ๊ฐํ•ด์š”! 

Chat GPT๋Š” F๊ฐ€ ๋ถ„๋ช…ํ•ด! ๋ง์„ ๋„ˆ๋ฌด ์˜ˆ์˜๊ฒŒ ํ•˜๊ณ  ๊ณต๊ฐ์„ ๋„˜ ์ž˜ํ•ด์ฃผ์ž–์•„!


 

์˜ค๋Š˜์˜ ๊ณต๋ถ€๋Š” ์—ฌ๊ธฐ๊นŒ์ง€์ž…๋‹ˆ๋‹ค. 

 

์•„์ง SQL์„ ์‹œ์ž‘ํ•œ ์ง€๋Š” 3์ผ๋ฐ–์— ๋˜์ง€ ์•Š์•˜์ง€๋งŒ

์–ผ๋ฅธ ์ž˜ ๋ฐฐ์›Œ์„œ ์˜๋ฏธ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ํ•ด๋ณด๊ณ  ์‹ถ์–ด์š”.

์š•์‹ฌ์— ๋น„ํ•ด ๋„ˆ๋ฌด ๊ท€์—ฝ๊ณ  ํ—ˆ์ ‘ํ•œ ์ˆ˜์ค€์„ ๊ฐ–๊ณ  ์žˆ์ง€๋งŒ,

์˜ฌํ•ด 9์›” ์•ˆ์— ๋ฐ์ดํ„ฐ ๋ถ„์„ & ์‹œ๊ฐํ™”๊นŒ์ง€ ๋งˆ์Šคํ„ฐํ•  ๊ฑฐ์˜ˆ์š”๐Ÿ€