Database/SQL
[SQL] ๋ฐ์ดํฐ ํ์ฉ๋ฒ(LIKE์ฐ์ฐ์, Wildcard, ์ ๋ ฌ, ์ค๋ณต์ ๊ฑฐ, If, CASE WHEN ~ THEN, CAST)
jpocket
2025. 4. 3. 12:40
๋ฐ์ํ
๐ ํ์ต ๋ด์ฉ
- โ
ํน์ ๋ฐ์ดํฐ ์กฐ๊ฑด๊ณผ ๋ณ์นญ
- ํน์ ๋ฐ์ดํฐ ์กฐ๊ฑด์ฃผ๊ธฐ(LIKE, Wildcard)
- ๋ณ์นญ ์ฌ์ฉํ๊ธฐ(Alias)
- โ
๋ฐ์ดํฐ ์ ๋ ฌ๊ณผ ์ค๋ณต ์ ๊ฑฐ
- ๋ฐ์ดํฐ ์ ๋ ฌํ๊ธฐ(ORDER BY)
- ์ค๋ณต์ ๊ฑฐํ๊ธฐ(DISTINCT)
- โ
์กฐ๊ฑด๋ฌธ ํ์ฉํ๊ธฐ(IF, CASE WHEN ~ THEN ~)
- ๋จ์ผ ์กฐ๊ฑด๋ฌธ(IF)
- ๋ค์ค ์กฐ๊ฑด๋ฌธ(CASE WHEN ~ THEN)
- โ ๋ฐ์ดํฐ ํ์ ๋ณํํ๊ธฐ(CAST)
๐ LIKE ์ฐ์ฐ์
- ์กฐํ ์กฐ๊ฑด ๊ฐ์ด ๋ช ํํ์ง ์์ ๋ ํน์ ๋ด์ฉ์ ์ฐพ์ ์ ์์
- ์กฐ๊ฑด์ ๋ฌธ์๋ ์ซ์๋ฅผ ํฌํจํ ์ ์์
- ์ฃผ๋ก Wildcard์ ํจ๊ป ์ฌ์ฉ
๐ Wildcard
- % : ์กฐ๊ฑด์ ํฌํจํ๋ ๋ชจ๋ ๋ฌธ์๋ฅผ ์๋ฏธ(0๊ฐ ์ด์์ ๋ฌธ์)
- ๐ฅ _ : ํ๊ธ์๋ฅผ ์๋ฏธ
- _์ ๊ฐ์์ ๋ฐ๋ผ ๋ค์ ์ค๋ ๋ฌธ์์ด์ ๊ฐ์๋ฅผ ์ ํ ์ ์์
mysql("""
SELECT *
FROM bike
WHERE hr = 0
AND weekday LIKE '%ur%' # ur ์ด ๋ค์ด๊ฐ๋ weekday ์ฐพ๊ธฐ
""")
mysql("""
SELECT *
FROM bike
WHERE hr = 0
AND mnth LIKE 'ma_' # ma๋ค์ ํ ๊ธ์๊ฐ ๋ ์๋ ๋ฐ์ดํฐ ์ฐพ๊ธฐ
""")
๐ ๋ณ์นญ ์ฌ์ฉํ๊ธฐ(Alias)
์์๋ก ์ปฌ๋ผ๋ช ์ ๋ณ๊ฒฝํ ์ ์๋ค.
๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ ๊ฒ์ ์๋๋ค.
์ฝ๊ฒ ๋งํ๋ฉด, ์ปฌ๋ผ๋ช ์ด ๋๋ฌด ๊ธธ๊ฑฐ๋ ๋ณต์กํ ๋ ๋ฑ ์ปฌ๋ผ๋ช ์ ์ฌ์ฉ์ํํ ์ ์๋ ๊ธฐ๋ฅ์ด๋ค.
mysql("""
SELECT temp, hum AS 'h'
FROM bike
LIMIT 5
""")

๐ ORDER BY
SELECT
FROM
WHERE
ORDER BY
LIMIT
- ์ค๋ฆ์ฐจ์ : ASC ํน์ ์๋ต (์๋ฌด๊ฒ๋ ์ ํ์์ง ์์ผ๋ฉด ์ค๋ฆ์ฐจ์)
- ๋ด๋ฆผ์ฐจ์ : DESC
- SELECT ๊ตฌ๋ฌธ์ ์ง์ ํ ์ปฌ๋ผ์ ์์๋ฅผ ์ ๋ ฅํด๋ ์คํ ๊ฐ๋ฅ
# ์ปฌ๋ผ๋ช
1์ ๋ํด์ ๋ด๋ฆผ์ฐจ์, ๊ฐ์ ๊ฐ์ด ์๋ค๋ฉด, ์ปฌ๋ผ๋ช
2์ ๋ํด์ ์ค๋ฆ์ฐจ์
order by ์ปฌ๋ผ๋ช
1 DESC, ์ปฌ๋ผ๋ช
2
# select์ ์ ์์ฑ๋ ์ฒซ ๋ฒ์งธ ์ปฌ๋ผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์, ๊ฐ์ ๊ฐ์ด ์๋ค๋ฉด, ๋ ๋ฒ์งธ ์ปฌ๋ผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์
order by 1 DESC, 2
๐ DISTINCT
- ์ถ๋ ฅ์์ ๊ณ ์ ํ ๊ฐ์ ๋ฐํํ๊ธฐ ์ํ ํค์๋
- DISTINCT ํค์๋๋ ์์ ์จ ๋ชจ๋ ์ปฌ๋ผ์ ๊ณ ๋ คํ์ฌ ์ค๋ณต์ ๊ฑฐ
- ์ง๊ณํจ์์๋ DISTINCT ์ฌ์ฉ ๊ฐ๋ฅ
- ๐ฅ select์ ์์๋ง ์ฌ์ฉ๊ฐ๋ฅํ๋ฉฐ, ์ปฌ๋ผ๋ช ์์ ํ ๋ฒ๋ง ๋ช ์ํ๋ค.
๐ ๐ฅ IF
- ๋จ์ผ ์กฐ๊ฑด๋ฌธ
- ์์ ์ IF ํจ์์ ๋์ผ
- SELECT, WHERE์ ์์ ์ฌ์ฉ ๊ฐ๋ฅ
- IF ๋ด์ ์กฐ๊ฑด์ ์ค ๋ ํจ์์ ํจ๊ป ์ฌ์ฉ ๊ฐ๋ฅ
- [์ฐธ๊ณ ] pandasql์์๋ ifํจ์๋ฅผ iif (i๊ฐ 2๊ฐ) ๋ก ํํ
mysql("""
SELECT customerName AS "๊ณ ๊ฐ๋ช
", birthday AS "์๋
์์ผ",
iif(birthday >= '1990-01-01' , '์ดํ', '์ด์ ') AS "1990๋
๊ธฐ์ค"
FROM customers
""")
"1990๋ ๊ธฐ์ค" ์ปฌ๋ผ๋ช ์ ์์ผ์ด 1990๋ 01์ ์ดํ์ธ ์ฌ๋์ "์ดํ"๊ฐ ์ถ๋ ฅ, ๊ทธ๋ ์ง ์์ ์ฌ๋์ "์ด์ " ์ถ๋ ฅ
๐ ๐ฅ CASE WHEN ~ THEN
- ๋ค์ค ์กฐ๊ฑด๋ฌธ
- ์กฐ๊ฑด์ ๋ฐ๋ฅธ ๊ฐ์ ๋ค๋ฅด๊ฒ ์ถ๋ ฅํ๊ณ ์ถ์ ๊ฒฝ์ฐ ์ฌ์ฉ
CASE WHEN '์กฐ๊ฑด1' THEN '์กฐ๊ฑด1 ๋ฐํ๊ฐ'
WHEN '์กฐ๊ฑด2' THEN '์กฐ๊ฑด2 ๋ฐํ๊ฐ'
ELSE '๋ง์กฑํ๋ ์กฐ๊ฑด์ด ์์ ๋ ๋ฐํ ๊ฐ'
END
๐ CASE๋ฌธ์ WHEN์ ์กฐ๊ฑด์ ์์ฐจ์ ์ผ๋ก ์ฒดํฌํ๊ณ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋๋ฉด THEN์ ๋ช ์๋ ๊ฐ์ ๋ฐํ
- WHEN๊ณผ THEN์ ํ ์์ผ๋ก ์กด์ฌํ๋ ์ฌ๋ฌ ๊ฐ๊ฐ ์กด์ฌํ ์ ์์
- ELSE๋ ์์ ์กฐ๊ฑด๋ค์ ๋ชจ๋ ํด๋นํ์ง ์์์ ๋ ์ ํด์ค ๊ธฐ๋ณธ ๊ฐ
- ELSE๊ฐ ์๊ณ ์กฐ๊ฑด์ ๋ง๋ ๊ฐ์ด ์์ผ๋ฉด NULL๊ฐ ๋ฐํ
mysql("""
SELECT customerName, creditLimit
, CASE WHEN creditLimit <= 50000 THEN '5๋ง์์ดํ'
WHEN creditLimit <= 100000 THEN '10๋ง์์ดํ'
ELSE '10๋ง์์ด๊ณผ'
END AS '๊ณ ๊ฐํ๋๋ถ๋ฆฌ'
FROM customers
""")
๐ ๐ฅ CAST
- ๋ฐ์ดํฐ์ ํ์ ์ ๋ณํํ๋ ํจ์
๐ ํํ
CAST(์ปฌ๋ผ AS ๋ณํํ ํ์
mysql("""
SELECT CAST(yr AS varchar) AS yr_varchar
FROM bike
LIMIT 5
""")
- ๋ณํํ ํ์ ์๋ int, float, varchar, datetime ๋ฑ ์์ฑ
๋ฐ์ํ