2021.12.21 ๐๋ง์
ํ๋กค๋ก๊ทธ
์ค๋์ SELECT์ WHERE ์ด์ธ์ ์กฐ๊ฑด์ ์ง์ด ๋ฃ์ ์ ์๋ ์กฐ๊ฑด๋ฌธ ๋ช ๋ น์ด DECODE์ CASE์ ๋ํด ๋ฐฐ์ ์ต๋๋ค.
- DECODE(A, B, true, false) : A=B ์ด๋ฉด true Aโ B ์ด๋ฉด false
- DECODE(A, B, B_true, C, C_true , false) :
-- A=B ์ด๋ฉด B_true
-- A=C ์ด๋ฉด C_true
-- Aโ B, Aโ C ์ด๋ฉด false- DECODE(A, B, DECODE(A2, B2, B2_true), B_false)
-- A=B ์ด๋ฉด์ A2=B2 ์ด๋ฉด B2_true
-- A=B ์ด๋ฉด์ A2โ B2 ์ด๋ฉด null
-- Aโ B ์ด๋ฉด B_false
- CASE ๋ณ์
WHEN ๊ฐ1 THEN ๊ฒฐ๊ณผ1 : ๋ณ์=๊ฐ1 ์ด๋ฉด ๊ฒฐ๊ณผ1
WHEN ๊ฐ2 THEN ๊ฒฐ๊ณผ2 : ๋ณ์โ ๊ฐ1์ด๊ณ , ๋ณ์=๊ฐ2 ์ด๋ฉด ๊ฒฐ๊ณผ2
ELSE ๊ฒฐ๊ณผ3 : ์ ๋ชจ๋ ๊ฐ์ ๋ง์กฑ ๋ชปํ ์ ๊ฒฐ๊ณผ3
END;- CASE
WHEN ์กฐ๊ฑด์1 THEN ๊ฒฐ๊ณผ1 : ์กฐ๊ฑด์1์ด ์ฐธ์ด๋ฉด ์ด๋ฉด ๊ฒฐ๊ณผ1
WHEN ์กฐ๊ฑด์2 THEN ๊ฒฐ๊ณผ2 : ์กฐ๊ฑด์1์ด ๊ฑฐ์ง์ด๊ณ , ์กฐ๊ฑด์2๊ฐ ์ฐธ์ด๋ฉด ๊ฒฐ๊ณผ2
ELSE ๊ฒฐ๊ณผ3 : ์ ๋ชจ๋ ์กฐ๊ฑด์์ ๋ง์กฑ ๋ชปํ ์ ๊ฒฐ๊ณผ3
END;
1. ์ฑ ์ด๋ฆ์ด โ์ถ๊ตฌโ,โ์ผ๊ตฌโ,โ๋๊ตฌโ,โ๊ณจํโ ๊ด๋ จ์ฑ ์ โ๊ตฌ๊ธฐ์ข ๋ชฉโ, ํผ๊ฒจ ๊ด๋ จ ์ฑ ์ โ์ค์ผ์ดํ โ, ์ญ๋ ๊ด๋ จ ์ฑ ์ โ์ฒด์กฐโ ๊ทธ ์ธ ๋ชจ๋ ์ฑ ์ โ์คํฌ์ธ โ๋ก ์ถ๋ ฅํ๋ โ์ข ๋ชฉโ์ปฌ๋ผ์ ๋ง๋ค์ด ์ฑ ๋ฒํธ, ์ฑ ์ด๋ฆ, ์ถํ์ฌ, ์ข ๋ชฉ์ ์ถ๋ ฅ
SELECT bookid, bookname, publisher,
CASE
WHEN (bookname LIKE '%์ถ๊ตฌ%'
OR bookname LIKE '%์ผ๊ตฌ%'
OR bookname LIKE '%๋๊ตฌ%'
OR bookname LIKE '%๊ณจํ%') THEN '๊ตฌ๊ธฐ์ข ๋ชฉ'
WHEN bookname LIKE '%ํผ๊ฒจ%' THEN '์ค์ผ์ดํ '
WHEN bookname LIKE '%์ญ๋%' THEN '์ฒด์กฐ'
ELSE '๊ทธ ์ธ'
END "์ข ๋ชฉ"
FROM book;
2. ๋ชจ๋ ์ฑ ์ ํ๊ท ๊ฐ๊ฒฉ ์ด์์ ์ฑ ์ โํ๊ท ๊ฐ์ด์โ, ๋ฏธ๋ง์ null๋ก ์ถ๋ ฅํ๋ โํ๊ท ๊ฐโ ์ปฌ๋ผ์ ๋ง๋ค์ด ์ฑ ์ด๋ฆ, ๊ฐ๊ฒฉ, ํ๊ท ๊ฐ๋ฅผ ์ถ๋ ฅ
SELECT bookname, price,
CASE
WHEN price >= (SELECT AVG(price) FROM book) THEN 'ํ๊ท ๊ฐ์ด์'
ELSE null
END "ํ๊ท ๊ฐ"
FROM book;
3. ์ฑ ์ ๊ฐ๊ฒฉ์ด 10000์ ์ดํ์ธ ์ฑ ๋ค์ 1000์ ์ธ์ํ๊ณ , ์ด๊ณผ์ธ ์ฑ ์ ๊ฐ๊ฒฉ์ ๋ณ๋์์ด ์ฑ ์ด๋ฆ, ๊ฐ๊ฒฉ, ๋ณ๋๊ฐ๊ฒฉ์ผ๋ก ์ถ๋ ฅ
SELECT bookname, price,
CASE
WHEN price <= 10000 THEN price+1000
ELSE price
END "๋ณ๋๊ฐ๊ฒฉ"
FROM book;
4. ์ ํ๋ฒํธ๊ฐ ์๋ ๊ณ ๊ฐ์ โ๋น๊ณต๊ฐโ ์๋ ๊ณ ๊ฐ์ โ์ ๋ ฅํ์โ๋ก ๊ณ ๊ฐ์ ๋ชจ๋ ์ ๋ณด๋ฅผ ์ถ๋ ฅ
SELECT c.*,
DECODE(phone, null, '์ ๋ ฅํ์', '๋น๊ณต๊ฐ')
FROM customer c;
5. ์ฃผ๋ฌธ ๋ด์ญ ์ค ํ ์ธ์ด ๋ค์ด๊ฐ ์ฑ ์ โํ ์ธโ, ๊ฐ๊ฒฉ์ ๋ณ๋์ด ์๋ ์ฑ ์ โ๋ณ๋์์โ์ผ๋ก ์ถ๋ ฅํ๋ ์ปฌ๋ผ์ ์ถ๊ฐํ์ฌ ์ฑ ์ด๋ฆ, ์ถํ์ฌ, ๊ฐ๊ฒฉ, ํ๋งค๊ฐ๊ฒฉ, ํ ์ธ๋ด์ญ์ ์ถ๋ ฅ
SELECT bookname ,publisher, price, saleprice,
CASE
WHEN (price-saleprice) > 0 THEN 'ํ ์ธ'
WHEN (price-saleprice) = 0 THEN '๋ณ๋์์'
ELSE '๊ธฐํ'
END
FROM book b, orders o
WHERE b.bookid = o.bookid;
6. ์ฑ ์ ๊ตฌ๋งคํ ๋ด์ญ์ด ์๋ ๊ณ ๊ฐ์๊ฒ ์ฟ ํฐ์ ์ ๊ณตํ๊ณ ๊ตฌ๋งค ๋ด์ญ์ด ์๋ ๊ณ ๊ฐ์ ์ ๊ณตํ์ง ์๋ โ์ฟ ํฐโ ์ปฌ๋ผ์ ๋ง๋ค์ด โ์ ๊ณตโ, โ๋ฏธ์ ๊ณตโ์ผ๋ก ๊ณ ๊ฐ์ด๋ฆ, ์ฟ ํฐ ์ปฌ๋ผ ์ถ๋ ฅ
SELECT a.name, "์ฟ ํฐ"
FROM
(SELECT c.name,
CASE
WHEN o.orderid is null THEN '๋ฏธ์ ๊ณต'
ELSE '์ ๊ณต'
END "์ฟ ํฐ"
FROM orders o, customer c
WHERE o.custid(+) = c.custid) a
GROUP BY a.name , "์ฟ ํฐ";
7. ์ฃผ๋ฌธ์ 3๋ฒ ์ด์ํ ๊ณ ๊ฐ์ โ์ต์ฐ์ํ์โ, 2๋ฒ์ โ์ฐ์ํ์โ, 1๋ฒ์ โ์ผ๋ฐํ์โ, 0๋ฒ์ โ์ ์ฌ๊ณ ๊ฐโ ์ผ๋ก '๋ฉค๋ฒ์ญโ ์ปฌ๋ผ์ ๋ง๋ค์ด ์ด๋ฆ๊ณผ ํจ๊ป ์ถ๋ ฅ
SELECT c.custid, c.name,
CASE
WHEN count() >= 3 THEN '์ต์ฐ์ํ์'
WHEN count() = 2 THEN '์ฐ์ํ์'
WHEN count(*) = 1 THEN (CASE
WHEN MAX(o.orderid) is null THEN '์ ์ฌ๊ณ ๊ฐ'
ELSE '์ผ๋ฐํ์'
END)
END ๋ฉค๋ฒ์ญ
FROM orders o, customer c
WHERE o.custid(+) = c.custid
GROUP BY c.custid, c.name;