21.12.14 SQL ๊ณต๋ถ
๐ก NULL ์ฒ๋ฆฌํ๊ธฐ
โ IFNULL
ํด๋น ํ๋์ ๊ฐ์ด NULL์ ๋ฐํํ ๋, ๋ค๋ฅธ ๊ฐ์ผ๋ก ์ถ๋ ฅํ ์ ์๋๋ก ํด์ฃผ๋ ํจ์.
1
2
SELECT IFNULL(COL1,'๋ฐ๊ฟ ๋ณ์๋ช
') AS COL1
FROM TABLE
โ CASE
TRUE/FALSE๋ฅผ ํ๋จํ์ฌ ์กฐ๊ฑด์ ๋ง๊ฒ ๊ฐ์ ๋ณํํ ๋ ์ฌ์ฉ
- ex1
1 2 3 4 5 6
SELECT ANIMAL_TYPE, CASE WHEN NAME IS NULL THEN "No name" ELSE NAME END AS NAME, SEX_UPON_INTAKE FROM ANIMAL_INS
- ex2
1 2 3 4 5 6 7
SELECT ANIMAL_ID,NAME, CASE WHEN (SEX_UPON_INTAKE LIKE '%Neutered%' OR SEX_UPON_INTAKE LIKE '%Spayed%') THEN 'O' ELSE 'X' END AS '์ค์ฑํ' FROM ANIMAL_INS ORDER BY ANIMAL_ID ASC
โ COALESCE
์ ๋ ฅ ๋ฐ์ ์ฌ๋ฌ ๊ฐ์ ์ธ์ ์ค NULL์ด ์๋ ๊ฐ์ ๋ฐํ
1
2
SELECT ANIMAL_TYPE, COALESCE(NAME, "No name") AS NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
๐ก JOIN
โ LEFT JOIN
LEFT JOIN์ ์ฒซ ๋ฒ์งธ ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก, ๋ ๋ฒ์งธ ํ ์ด๋ธ์ ์กฐํฉํ๋ ๊ฒ.
1
2
3
4
SELECT *
FROM ์ฒซ ๋ฒ์งธ ํ
์ด๋ธ
LEFT JOIN ๋ ๋ฒ์งธ ํ
์ด๋ธ
ON ์กฐ๊ฑด
ON ์ ์์๋ WHERE ์ ์์ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ ์กฐ๊ฑด์ ์ฌ์ฉํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ WHERE t2.id IS NULL ์ด๋ผ๊ณ ์กฐ๊ฑด์ ์ถ๊ฐํด์ฃผ๋ฉด,
์๋ ๊ทธ๋ฆผ์์ ๋ณด์ด๋ ๊ต์งํฉ ๋ถ๋ถ์ ์ ์ธ๋๋ค.
โ INNER JOIN
๋ฒค๋ค์ด์ด๊ทธ๋จ์์ ๊ต์งํฉ์ ๋ํ๋ธ๋ค.
์๋์ ์ฝ๋๋ ์๊ฑฐํธ์ ์ฐ์ ๋ฅผ ๋ชจ๋ ๊ณ ๋ฅธ CART_ID๋ฅผ ์ฐพ๋ ์ฟผ๋ฆฌ๋ฌธ.
1
2
3
4
SELECT DISTINCT A.CART_ID
FROM (SELECT CART_ID FROM CART_PRODUCTS WHERE NAME = 'YOGURT') A
INNER JOIN (SELECT CART_ID FROM CART_PRODUCTS WHERE NAME = 'MILK') B
ON A.CART_ID = B.CART_ID
์ ์ฟผ๋ฆฌ๋ฌธ๊ณผ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
1
2
3
4
5
6
7
8
SELECT DISTINCT CART_ID
FROM CART_PRODUCTS
WHERE NAME = "MILK"
AND CART_ID IN (
SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME = "YOGURT"
)
๐ก IN
โ IN
ํน์ ๋ฌธ์๊ฐ ํฌํจ๋์ค ์๋์ง ํ์ธํ ๋ ์ฌ์ฉํ๋ค.
1
2
3
SELECT *
FROM TABLE_NAME
WHERE COL1 IN ('A','B','C')
๐ก DATE๊ด๋ จ
โ DATEDIIFF
DATEDIFF(DATE1, DATE2)๋ Day์ ์ฐจ์ด๋ฅผ ๋ฐํํด ์ค๋ค.
1
2
3
4
5
SELECT INS.ANIMAL_ID, INS.NAME
FROM ANIMAL_INS AS INS
INNER JOIN ANIMAL_OUTS AS OUTS
ON INS.ANIMAL_ID = OUTS.ANIMAL_ID
ORDER BY DATEDIFF(OUTS.DATETIME,INS.DATETIME) DESC LIMIT 2
์ถ๊ฐ์ ์ผ๋ก TIMESTAMPDIFF(๋จ์, DATE1, DATE2)๋ ๋จ์๋ณ๋ก ์ฐจ์ด๋ฅผ ๊ตฌํ ์ ์๋ค.
