[DB] ๋ฐ์ดํฐ๋ฒ ์ด์ค MySQL - case,if ์กฐ๊ฑด๋ฌธ ์์ฑํ๋ ๋ฐฉ๋ฒ
MySQL์์ CASE ๋ฌธ๊ณผ IF ๋ฌธ์ ์กฐ๊ฑด๋ถ ๋ก์ง์ ์ํํ๋๋ฐ ์ฌ์ฉ๋๋ค. ์ด๋ฅผ ํตํด ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฐ์ ๋ฐํํ๊ฑฐ๋ ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์๋ค.
์ฌ์ฉํ ํ ์ด๋ธ(books)
1. CASE๋ฌธ ์ฌ์ฉ๋ฐฉ๋ฒ
SQL์ case ๋ฌธ์ ๋ค๋ฅธ ์ธ์ด๋ ๋น์ทํ๊ฒ ์ฐ์ธ๋ค.
์๋๋ case์ ๊ธฐ๋ณธ ๊ตฌ์กฐ์ด๋ค.
์์ ๋ก ์ด๋ป๊ฒ ์๋๋๋์ง ์์๋ณด์.
CASE ์ปฌ๋ผ๋ช
WHEN ๊ฐ1 THEN ๊ฒฐ๊ณผ
WHEN ๊ฐ2 THEN ๊ฒฐ๊ณผ
...
ELSE ๋๋จธ์ง ๊ฒฐ๊ณผ๊ฐ
END
์์ 01 -
์ถํ๋
๋๊ฐ 2000๋
์ด์์ธ ์ฑ
๋ค์, '์ต๊ทผ์ฑ
' ์ด๋ผ๊ณ ํ๊ณ ,
๊ทธ๋ ์ง ์์ ์ฑ
๋ค์ '์์ ์ฑ
'์ด๋ผ๊ณ ํ์ฌ,
type ์ด๋ผ๋ ์ปฌ๋ผ์ ์ถ๊ฐํ์ฌ ๊ฐ์ ธ์ค์์ค.
select * ,
case
when released_year >= 2000 then '์ต๊ทผ์ฑ
'
else '์์ ์ฑ
'
end as type
from books;
์์ 02 -
์ฌ๊ณ ๊ฐ 0๋ถํฐ 50๊น์ง์ด๋ฉด '*'
์ฌ๊ณ ๊ฐ 51๋ถํฐ 100๊น์ง์ด๋ฉด '**'
๊ทธ๋ ์ง ์์ผ๋ฉด '***' ์ผ๋ก ํ์ฌ, stock ์ด๋ผ๋ ์ปฌ๋ผ์ ์ถ๊ฐํ์์ค.
select * ,
case
when stock_quantity between 0 and 50 then '*'
when stock_quantity between 51 and 100 then '**'
else '***'
end as stock
from books;
2. IF ๋ฌธ ์ฌ์ฉ๋ฐฉ๋ฒ
์กฐ๊ฑด์ด 3๊ฐ ์ด์์ผ ๋๋ case ๊ตฌ๋ฌธ์ด ๋ ์ฌ์ฉํ๊ธฐ ํธํ์ง๋ง
์กฐ๊ฑด์ด 2๊ฐ๋ผ๋ฉด if ๊ตฌ๋ฌธ ํ์ค๋ก ๋ ์ฌํํ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์๋ค.
์ case ๊ตฌ๋ฌธ์ ์์ 1๋ฒ์ ํ์ด๋ณด๋ฉด์ ๋น๊ตํด๋ณด์.
์์ 01 -
์ถํ๋
๋๊ฐ 2000๋
์ด์์ธ ์ฑ
๋ค์, '์ต๊ทผ์ฑ
' ์ด๋ผ๊ณ ํ๊ณ ,
๊ทธ๋ ์ง ์์ ์ฑ
๋ค์ '์์ ์ฑ
'์ด๋ผ๊ณ ํ์ฌ,
type ์ด๋ผ๋ ์ปฌ๋ผ์ ์ถ๊ฐํ์ฌ ๊ฐ์ ธ์ค์์ค.
select * , if(released_year >= 2000, '์ต๊ทผ์ฑ
', '์์ ์ฑ
') as type
from books;
CASE ๋ฌธ๊ณผ IF ๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๊ฑฐ๋ ์ฌ๋ฌ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ ๋ ์ ์ฉํ๋ค. ๊ฐ๋จํ ๋ก์ง๋ถํฐ ๋ณต์กํ ์กฐ๊ฑด๊น์ง ๋ค์ํ ์ํฉ์์ ํ์ฉ๋ ์ ์๋ค.