<SQL ์ฒซ๊ฑธ์> ์ ๋ณด๊ณ ์ง์ ํ์ตํ๊ณ ๊ธฐ๋กํ๋ ํฌ์คํธ! ๐ฅ
DATABASE ๋ง์คํฐ๋ฅผ ๊ฟ๊พธ๋ฉฐ...๐ฅ
๐ 3์ฅ ์ ๋ ฌ๊ณผ ์ฐ์ฐ
๐ 9๊ฐ ์ ๋ ฌ - ORDER BY
- ์ค์ ์ฐ์ต์ ์ํด ์ง๋ ํ๋ก์ ํธ์๋ wattataxi2 DB๋ฅผ ๊ฐ์ง๊ณ ์ฐ์ต!
- ORDER BY ๊ตฌ๋ฅผ ์ฌ์ฉํด์ ๊ฒ์๊ฒฐ๊ณผ์ ํ ์์๋ฅผ ๋ฐ๊ฟ๋ณด์ฅ!
- ์ ๋ ฌ(sort) ๋ฐฉ๋ฒ์ ๊ณต๋ถํ ๊พธ~~
๐ select ์ด from ํ
์ด๋ธ๋ช
order by ์ด ๐
1) order by๋ก ๊ฒ์ ๊ฒฐ๊ณผ ์ ๋ ฌํ๊ธฐ
- tickets ํ
์ด๋ธ์ price ์ด์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๋ ๊ฐ๊ฒฉ์ด ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ผ์ ๋์ด!
๐ select * from tickets order by price asc; ๐
- ์๋ฌด๊ฒ๋ ์ง์ ์ํด์ค ๋ ๊ธฐ๋ณธ ๊ฐ์ ์ค๋ฆ์ฐจ์์ด๋ผ๋ ๊ฒ์ ๊ธฐ์ตํด์คญ....!
2) order by desc๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ๊ธฐ
select * from tickets order by price desc;
3) ๋์๊ด๊ณ
- ์์นํ ๋ฐ์ดํฐ๋ผ๋ฉด ๋์๊ด๊ณ๋ ์ซ์์ ํฌ๊ธฐ๋ก ํ๋ณ. ๋ ์ง์๊ฐํ ๋ฐ์ดํฐ๋ ์ซ์ ํฌ๊ธฐ๋ก ํ๋ณ. ์ต๊ทผ ์์ผ ์๋ก 'ํฌ๋ค', ๊ณผ๊ฑฐ๋ก ๊ฐ ์๋ก '์๋ค'๋ผ๊ณ ๋ณด๋ฉด ๋จ!
- ๋ฌธ์์ดํ ๋ฐ์ดํฐ์ ๋์๊ด๊ณ๋ ์ฌ์ ์ ์์์ ์ํด ๊ฒฐ์
ex) '๋๋น'์ '๊ฐ๋ฐฉ', '๊ฐ์กฑ'์ '๊ฐ๋ฐฉ'>'๊ฐ์กฑ'>'๋๋น' ์์์!
- ๋ฌธ์์ดํ ์ด์ ์ซ์๋ฅผ ์ ์ฅํ๋ ๊ฒฝ์ฐ๋ '๋ฌธ์'๋ก ์ธ์๋๋๊น ์ฃผ์ํ ๊ฒ!
4) order by๋ ํ
์ด๋ธ์ ์ํฅ ์์ค
- order by๋ฅผ ์ด์ฉํด ํ ์์๋ฅผ ๋ฐ๊ฟ ์ ์์. ํ์ง๋ง ์ด๊ฑด ๊ทธ๋ฅ ํ์์๋ฅผ ๋จ์ํ ๋ฐ๊ฟ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ๊ฒ์ผ ๋ฟ ์ ์ฅ์ฅ์น์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ํ ์์๋ฅผ ๋ฐ๊พธ๋ ๊ฑด ์๋! ๋จ์ ์ฐธ์กฐ!
๐ 10๊ฐ ๋ณต์์ ์ด์ ์ง์ ํด ์ ๋ ฌํ๊ธฐ
- ์์์๋ ์ด ํ๋๋ง ์ ํด์ order by ํ๋๋ฐ, ๊ทธ๋ผ ๋ณต์์ ์ด๋ ์ง์ ํด์ ์ ๋ ฌ์ด ๊ฐ๋ฅํ ๊น?
๐ select ์ด๋ช
from ํ
์ด๋ธ๋ช
where ์กฐ๊ฑด์ order by ์ด๋ช
1 [asc/desc], ์ด๋ช
2[asc/desc].. ๐
- ๊ฐ๋ฅํด! ๊ทผ๋ฐ ์ด๋ด ๋, NULL๊ฐ์ ์ฃผ์ํ ํ์๊ฐ ์์!
1) ๋ณต์ ์ด๋ก ์ ๋ ฌ ์ง์
- price ๊ธฐ์ค์ผ๋ก ์ค๋ฆ or ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ์ ํด์ฃผ์์ด๋ ๋๋จธ์ง ์ด์ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ๊ฐ ์์. ์ด๋ฐ ๊ฒฝ์ฐ order by๋ก ๋ณต์ ์ด์ ์ง์ ํ ์ ์์.
๐ select * from tickets order by price, seat_remain; ๐
- price๋ก ์ค๋ฆ์ฐจ์์ด ๋์ด์๋๋ฐ ๊ฐ ๊ฐ๊ฒฉ๋ณ๋ก seat_remain์ด ์ค๋ฆ์ฐจ์ ์ ๋ ฌ๋์ด์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค!
- ๊ทธ๋ผ order by์์ ์ด์ ์์๋ฅผ ๋ฐ๊ฟ๋ณผ๊น? ์์์ order by a, b์๋ค๋ฉด ์ด๋ฒ์๋ order by b, a๋ก!!
๐ select * from tickets order by seat_remain, price; ๐
- ์๋ ๊ฒ ๋ฐ๋๋น! ์ ๊ธฐํด...๐ฉ
- ๊ทธ๋ ๋ค๋ฉด ํ๋๋ asc๋ก ๋ค๋ฅธํ๋๋ desc๋ก ํด๋ณผ๊น?
๐ select * from tickets order by price desc, seat_remain asc; ๐
ํฌํฌ ์ ๊ธฐํ์ฅ....๐ฃ
3) NULL ๊ฐ์ ์ ๋ ฌ์์
- NULL ๊ฐ์ ๊ทธ ํน์ฑ์ ๋์๋น๊ต๋ฅผ ํ ์ ์์ด ์ ๋ ฌ ์์๋ 1. ํน์ ๊ฐ๋ณด๋ค ํฐ ๊ฐ, 2. ํน์ ๊ฐ๋ณด๋ค ์์ ๊ฐ. ์ด๋ ๊ฒ ๋ ๊ฐ์ง๋ก ๋๋จ.
- order by๋ก ์ง์ ํ ์ด์์ NULL ๊ฐ์ ๊ฐ์ง๋ ํ์ ๊ฐ์ฅ ๋จผ์ ํ์๋๊ฑฐ๋ ๊ฐ์ฅ ๋์ค์ ํ์.
- MySQL์ ๊ฒฝ์ฐ NULL๊ฐ์ ๊ฐ์ฅ ์์ ๊ฐ์ผ๋ก ์ทจ๊ธ...! ๊ทธ๋์ asc์์๋ ๊ฐ์ฅ ๋จผ์ , desc์์๋ ๊ฐ์ฅ ๋์ค์ ํ์!
๐ 11๊ฐ ๊ฒฐ๊ณผ ํ ์ ํํ๊ธฐ - LIMIT
- LIMIT๊ตฌ๋ก ๊ฒฐ๊ณผ ํ์ ์ ํํ๋ ๋ฐฉ๋ฒ?
๐ select ์ด๋ช
from ํ
์ด๋ธ๋ช
LIMIT ํ์ [OFFSET ์์ํ] ๐
- ํ์ ์ ํ
- LIMIT๊ตฌ๋ select ๋ช
๋ น ๋ง์ง๋ง์ ์ง์ , where๊ตฌ๋ order by ๊ตฌ ๋ค์ ์ง์ .
๐ select ์ด๋ช
from ํ
์ด๋ธ๋ช
where ์กฐ๊ฑด์ order by ์ด๋ช
LIMIT ํ์ ๐
-
๋ง์ฝ LIMIT์ ํ์๋ฅผ 10์ผ๋ก ์ง์ ํ๋ฉด ์ต๋ 10๊ฐ์ ํ์ด ๋ฐํ! ๊ณ ๋ฌ๋ฉด.. ์ฐ์ตํด๋ณด์ฅ...!
-
locations ํ
์ด๋ธ: ํ์ด 13๊ฐ์ธ๋ฐ, ์ด๊ฑธ 5๊ฐ๋ง ์ถ๋ ค๋ณด์ฅ!
-
limit ์ฌ์ฉํด์ ํ 5๊ฐ ์ถ๋ฆฌ๊ธฐ- ์จ๋-!
-
์ ๋ ฌํ ํ ์ ํํ๊ธฐ
๊ทธ๋ ๋ค๋ฉด where id <= 5๋ก ๋ช
๋ น์ ์ค๊ฑฐ๋ limit = 5๋ก ์ค๊ฑฐ๋ ๋ญ๊ฐ ๋ค๋ฅธ๊ฑธ๊น?
-> limit์ ๋ฐํํ ํ์๋ฅผ ์ ํํ๋ ๊ธฐ๋ฅ, where์ ๊ตฌ๋ก ๊ฒ์ํ ํ order by๋ก ์ ๋ ฌ๋ ๋ค ์ต์ข
์ ์ผ๋ก ์ฒ๋ฆฌ.(limit์ ์ ๋ ฌ ๊ธฐ๋ฅ์ด ์์ผ๋๊น ์ ๋ ฌ๊ธฐ๋ฅ์ ์ง์ ํด์ค์ผํจ!)
- ์คํ์
์ง์
- ์น ์์คํ
์์๋ ํ์ด์ง ๋จ์๋ก ํ๋ฉด์ ํ์ํ ๋ด์ฉ์ ์ฒ๋ฆฌ. ๐ํ์ด์ง ๋๋๊ธฐ๐๊ธฐ๋ฅ์ ํ์ฉํ๋ ๊ฒ. -> ์ปค๋ฎค๋ํฐ ์ฌ์ดํธ ๋ฑ์์ ๊ฒ์ํ ํ๋จ ๋ถ๋ถ์ '1 2 3 4 5 ๋ค์' ๋ฑ์ผ๋ก ํ์๋ ๊ฒ์ด ๊ทธ ์์!
-> ์ด ํ์ด์ง ๋๋๊ธฐ ๊ธฐ๋ฅ์ limit์ ํตํด ๊ฐ๋จํ ๊ตฌํ ๊ฐ๋ฅ!
ex. ํ ํ์ด์ง ๋น 5๊ฑด์ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋๋ก ํ๋ค๋ฉด, ์ฒซ ๋ฒ์งธ ํ์ด์ง์ ๊ฒฝ์ฐ limit 5๋ก ๊ฒฐ๊ด๊ฐ์ ํ์ํ๋ฉด ๋จ. ๊ทธ ๋ค์ ํ์ด์ง์์๋ 6๋ฒ์งธ ํ๋ถํฐ 5๊ฑด์ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋๋ก ํ๋๊ฑฐ์ฅ. ์ด ๋ '6๋ฒ์งธ ํ๋ถํฐ'๋ผ๋ ํํ์ ๊ฒฐ๊ด๊ฐ์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ทจ๋ํ ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒ์ผ๋ก limit๊ตฌ์ offset์ผ๋ก ์ง์ ๊ฐ๋ฅ!
๐ select * from locations limit 3 offset 0; ๐
๐ select * from locations limit 3 offset 3; ๐
๐ select * from locations limit 3 offset 6; ๐
- ์ฌ๊ธฐ์ offset์ ๊ทธ ์ซ์ ๋ค์๋ถํฐ ํ๋ฉด์ ์ถ๋ ฅํด์ค๋ค๋ ๋ป์ธ ๊ฒ ๊ฐ์.. ์์ง ์ชผ์ค๊ธ ๊ฐ์ด ์์ด..!๐ค
๐ 12๊ฐ ์์น ์ฐ์ฐ
- SQL์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ณ์ฐ๊ธฐ๋ฅ์ ํฌํจํจ. ์์น์ ์ฐ์ฐ ๋ฐฉ๋ฒ์ ๋ํด ๊ณต๋ถ๋ฅผ ํด๋ณผ๊น...?๐ค
๐ +-*/%MOD ๐
- % ๋์ MODํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์์!
- ์ฐ์ฐ์์ ์ฐ์ ์์
์ฐ์ ์์ 1๋ฒ์ * /.
์ฐ์ ์์ 2๋ฒ์ +-
- select ๊ตฌ๋ where ๊ตฌ ์์์๋ ์ฐ์ฐํ ์ ์์!
- select ๊ตฌ๋ก ์ฐ์ฐํ๊ธฐ
๐ select ์1, ์2... from ํ
์ด๋ธ๋ช
๐
- ์ผ๋จ, ticket ํ
์ด๋ธ์ ์ฐธ๊ณ ํ ๊ฑฐ์ผ.
- ๋ง๋ ์๋์ง๋ง price์ seat_remain์ ์ฐ์ฐํด๋ณด์.^^
- ๊ณ์ฐ์์ total = price * seat_remain์ผ๋ก ์ก๊ธฐ. select๊ตฌ๋ก ์ง์ ํด์ ๊ณ์ฐ ๊ฐ๋ฅ.
- ์ด์ ๋ณ๋ช
- ๊ณ์ price * seat_remain ์ด๋ ๊ฒ ์ฐ๋ฉด ๋๋ฌด ๊ธธ๊ณ ์์๋ณด๊ธฐ ํ๋๋๊น...! ๋ณ๋ช
์ ์ง์ด์ค๊น? ๐ total์ด๋ผ๋ ๋ณ๋ช
์ ์ง์ด์ฃผ์ฅ..!
๐ select *, price * seat_remain AS total from tickets; ๐
- ์๋ฐ์์ผ๋ก AS total์ ๋ฃ์ด์ฃผ๋ฉด ๋ณ๋ช
์ ๋ง๋ค์ด ์ค ์ ์์ฐ~~~ ๊ทผ๋ฐ AS๋ ์๋ต๊ฐ๋ฅ!
- ๋จ, ํ๊ธ๋ก ์ง์ ํ๋ ๊ฒฝ์ฐ์๋ ๋๋ธ์ฟผํธ("")๋ฅผ ๋๋ฌ์ธ์ ์ง์ ํด์ฃผ๊ธฐ.(์ซ์๋ ์๋ผ!)
- WHERE ๊ตฌ์์ ์ฐ์ฐํ๊ธฐ
- ์๊น ์์์ ๋ง๋ total ๊ฐ์ ๊ฒ์ํด๋ณด์ฅ!
๐ select price*seat_remain AS total from tickets where price*seat_remain >= 40000.000; ๐
- ๊ทผ๋ฐ ์ select total๋ก ์ด์ด๋ฆ์ ์ํด์ค๊ฑฐ๋?...?
-> ์๋๋ฉด! select ๋ช
๋ น์ ์ค์ ๋ก ์คํํด๋ณด๋ฉด total์ด๋ ์ด์ ์กด์ฌํ์ง ์๋๋ค๋ ์๋ฌ๊ฐ ๋ฐ์ํจ ^^
-> where๊ตฌ์์์ ํ ์ ํ, select ๊ตฌ์์์ ์ด ์ ํ์ ๐ค ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ ๋ด๋ถ์์ where๊ตฌ -> select๊ตฌ์ ์์๋ก ์ฒ๋ฆฌ๊ฐ ๋จ ๐ค.(์ ๊ธฐํด!๋์ค์!) ๊ทธ๋์ where๊ตฌ๋ก ํ์ด ์กฐ๊ฑด์ ์ผ์นํ๋์ง ์๋์ง ๋จผ์ ์กฐ์ฌํ ํ์ select๊ตฌ์ ์ง์ ๋ ์ด์ ์ ํํด ๊ฒฐ๊ณผ๋ก ๋ฐํํ๋ ์์ผ๋ก ์ฒ๋ฆฌ.
-> ๋ณ๋ช
์ select ๊ตฌ๋ฌธ์ ๋ด๋ถ ์ฒ๋ฆฌํ ๋ ๋ถ์ฌ์ง. ๊ทธ๋๊น where๊ตฌ์ ์ฒ๋ฆฌ๋ select๊ตฌ๋ณด๋ค ์ ํ๋๋ฏ๋ก wherer๊ตฌ์์ ์ฌ์ฉํ ๋ณ์นญ์ ์์ง ๋ด๋ถ์ ์ผ๋ก ์ง์ ๋์ง ์์ ์ํ๊ฐ ๋๋๊น ์๋ฌ๋ฐ์!
- NULL ๊ฐ์ ์ฐ์ฐ
- NULL๊ฐ์ ์ฐ์ฐ์ด ์๋ผ...๐
NULL + 1 = NULL
1 + NULL = NULL
1 + 2 * NULL = NULL
1 / NULL = NULL
- ์๋ค ๋ค ๋ชจ๋์ฐ NULL์ด์ผ ^^
- ORDER BY ๊ตฌ์์ ์ฐ์ฐํ๊ธฐ
- order by๊ตฌ์์๋ ์ฐ์ฐ๊ฐ๋ฅํ๊ณ ๊ทธ ๊ฒฐ๊ด๊ฐ๋ค์ ์ ๋ ฌ ๊ฐ๋ฅ! ๋ด๊ฐ ํ๋ total์ ์ ๋ ฌ ํ ๋ฒ ํด๋ณผ๊น?.? ํฃใ
...
๐ select price * seat_remain AS total from tickets order by total desc; ๐
- order by๋ ์๋ฒ์์ ๋ด๋ถ์ ์ผ๋ก ๊ฐ์ฅ ๋์ค์ ์ฒ๋ฆฌ๋จ. ๊ทธ๋๊น select ๊ตฌ๋ณด๋ค ๋์ค์ ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ select ๊ตฌ์์ ์ง์ ํ ๋ณ๋ช
์ order by์์๋ ์ฌ์ฉํ ์ ์๋๊ฑฐ์ฅ.
- ๊ทผ๋ฐ, where ๊ตฌ์์๋ ๋ณ๋ช
์ ์ฌ์ฉํ ์ ์์ด.... ์๋๋ฉด ์๋ฒ์์ ๋ด๋ถ์ฒ๋ฆฌ ์์๊ฐ ์๊ธฐ ๋๋ฌธ์ด์ง....๐ผ
๐ฑ where ๊ตฌ -> select ๊ตฌ -> order by ๊ตฌ ๐ฑ
- ํจ์
์ฐ์ฐ์ ์ธ์ ํจ์๋ฅผ ์ฌ์ฉํด ์ฐ์ฐ๋ ๊ฐ๋ฅํด!
ํจ์๋ช
(์ธ์1, ์ธ์2...)
- roundํจ์
- ์์์ ์ ๊ฐ์ง๋ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ, ๋ฐ์ฌ๋ฆผ์ ์ํด roundํจ์๋ฅผ ์ฌ์ฉํจ.
๐ select price*seat_remain, round(price*seat_remain) from tickets; ๐
- roundํจ์๋ integerํ์ ์๋ฃํ์ decial ํ์ ์๋ฃํ์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ์ญํ !(decimal์ ์ ์๋ถ์ ์์๋ถ์ ์๋ฆฟ์๋ฅผ ์ง์ ํ ์ ์๋ ์๋ฃํ์!)
๐ select price*seat_remain, round(price*seat_remain,1) from tickets; ๐
์๊ฑฐ์จ ์์์ ๋์งธ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผํ ๊ฒ!
๐ 13๊ฐ ๋ฌธ์์ด ์ฐ์ฐ
- ๋ฌธ์์ดํ ์ฐ์ฐ -> ๋ฌธ์์ด๊ฒฐํฉ์ด๋? ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ๊ฒฐํฉํ๋ ์ฐ์ฐ!
- ๋ฌธ์์ด ๊ฒฐํฉ
-
MySQL์์๋ CONCATํจ์๋ก ๋ฌธ์์ด์ ๊ฒฐํฉํจ.
-
seattypes ํ
์ด๋ธ๋ก ์ฐ์ต์ ํด๋ณด์ฅ..!
-
type์ด๊ณผ rate์ด์ ํฉ์ณ๋ณด๋ ๊ฒ์ด์ผ!
์ ๊ธฐํด...๐ฆ
- substring ํจ์
- substring ํจ์๋ ๋ฌธ์์ด์ ์ผ๋ถ๋ถ์ ๊ณ์ฐํด์ ๋ฐํํด์ฃผ๋ ํจ์!
๐ substring('20140125001',1,4) -> '2014' # ์ฌ๊ธฐ์ 1,4๋ ''์์ ์๋ ๋ฌธ์์ด์์ ์ฒซ๋ฒ์งธ๋ถํฐ 4๊ฐ๋ฅผ ๋ฝ์๊ฑฐ๋ผ๋ ๋ง! ๐
- Trim ํจ์
- ๋ฌธ์์ด์ ์๋ค๋ก ์ฌ๋ถ์ ์คํ์ด์ค๊ฐ ์์ ๊ฒฝ์ฐ ์ด๋ฅผ ์ ๊ฑฐํด์ฃผ๋ ํจ์. ๊ทผ๋ฐ ๋ฌธ์์ด ์ค๊ฐ์ ์๋ ๊ณต๋ฐฑ์ ์ ๊ฑฐ ์๋ผ. ๊ณ ์ ๊ธธ์ด ๋ฌธ์์ด ํ์ ๋ํด ๋ง์ด ์ฌ์ฉํ๋ ํจ์!
- ์์ ๋ฐฐ์ด ๊ฒ์ฒ๋ผ CHAR VS VARCHAR์ ์ฐจ์ด์ ์ CHAR์ ์ต๋๊ธธ์ด๊ฐ ์ฃผ์ด์ง๋ฉด ๊ทธ๊ฑธ ๊ณต๋ฐฑ์ผ๋ก ์ฑ์์๋ผ๋ ๋ค ์ฌ์ฉํ๋ ๋ฌธ์์ดํ์ด๊ณ VARCHAR์ ์ต๋๊ธธ์ด๊ฐ ์ฃผ์ด์ ธ๋ ๋ฐ์ดํฐ ๊ธธ์ด ๋งํผ๋ง ์ฌ์ฉํ๋ ๋ฌธ์์ดํ์ด์์ด! (๊ธฐ์ต๋๋?...?)
- ์ด๋ ๋ฏ CHARํ์ ๋ฌธ์์ดํ์์ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ ๊ณ ์ ๋๊ณ , ๋จ์ ๊ณต๋ฐฑ์ ์์จ ๋, ์ด๋ ๊ฒ TRIM ํจ์๋ฅผ ์ฌ์ฉํ๋๊ฑฐ์ง!
๐ Trim('ABC ') -> 'ABC' ๐
- Character_length ํจ์
-
character_lengthํจ์๋ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๊ณ์ฐํด ๋๋ ค์ฃผ๋ ํจ์. ๋ฌธ์์ด์ ๊ธธ์ด๋ ๋ฌธ์ ๋จ์๋ก ๊ณ์ฐ๋์ด ์์น๋ก ๋ฐํ๋จ. ์ค์ฌ์ char_length๋ก ์ฌ์ฉ๊ฐ๋ฅ.
-
octet_lengthํจ์๋ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๋ฐ์ดํธ ๋จ์๋ก ๊ณ์ฐํด ๋๋ ค์ฃผ๋ ํจ์.
-
๋ฌธ์์ธํธ(character set)
- ํ ๋ฌธ์๊ฐ ๋ช ๋ฐ์ดํธ์ธ์ง๋ ์ฐ์ด๋ ๋ฌธ์์ธํธ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.-> ์ด๊ฒ ์ ์ค์ํ๋ฐ?
- char_length ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ๋์ง ์์! (ํ๊ธ์ด๋ ASCII๋ฌธ์์ด๋ ๋ฌธ์ ๋จ์๋ก ๊ณ์ฐ๋๋๊น!) ๊ทธ์น๋ง octet_lengthํจ์์ ๊ฒฝ์ฐ ๋ฌธ์ ์๊ฐ ์๋ ๋ฐ์ดํธ ๋จ์๋ก ๊ธธ์ด๋ฅผ ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์ ์ฃผ์ํ ํ์๊ฐ ์์!
๐ 14๊ฐ ๋ ์ง ์ฐ์ฐ
๐ current_timestamp current_date interval ๐
- SQL์์์ ๋ ์ง
- ๋ ์ง๋ ์๊ฐ ๋ฐ์ดํฐ๋ ์์น ๋ฐ์ดํฐ์ ๊ฐ์ด ์ฌ์น ์ฐ์ฐ ๊ฐ๋ฅ. ๋ ์ง์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฐ์ฐํ๋ฉด! ๊ฒฐ๊ด๊ฐ์ผ๋ก ๋์ผํ ๋ ์ง์๊ฐ ์ ํ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ ๊ฒฝ์ฐ๋ ์์ผ๋ฉฐ ๊ธฐ๊ฐ์ ์ฐจ๋ฅผ ๋ํ๋ด๋ ๊ธฐ๊ฐํ(interval) ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ ๊ฒฝ์ฐ๋ ์์!
- ์์คํ
๋ ์ง: RDBMS์์๋ ์์คํ
๋ ์ง์ ์๊ฐ์ ํ์ธํ๋ ํจ์๋ฅผ ์ ๊ณตํจ.
- 'Current_timestamp'๋ผ๋ ๊ธด ์ด๋ฆ์ ํจ์๋ก ์คํํ์ ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์๊ฐ์ ํ์. ์ธ์ ํ์์๋ธ!
๐ select current_timestamp; ๐
์ ๊ธํ์ฆค...? ๐ฆ ใ
ใ
- ๋ ์ง ์์
์์์ ๋ ์ง๋ฅผ ์ ์ฅํ๊ณ ์ถ์ ๊ฒฝ์ฐ์๋ ์ง์ ๋ ์ง ๋ฐ์ดํฐ๋ฅผ ์ง์ ํด์ผํจ.
์ด๋ป๊ฒ?
2021/08/14
2021-08-14
14 Aug 2021
- ๋ ์ง์ ๋ง์
๊ณผ ๋บ์
- ๋ ์ง์๊ฐํ ๋ฐ์ดํฐ๋ ๊ธฐ๊ฐํ ์์น๋ฐ์ดํฐ์ ๋ง์
๋ฐ ๋บ์
์ ํ ์ ์์. ๋ ์ง์๊ฐํ ๋ฐ์ดํฐ์ ๊ธฐ๊ฐํ ์์น๋ฐ์ดํฐ๋ฅผ ๋ํ๊ฑฐ๋ ๋นผ๋ฉด ๋ ์ง์๊ฐํ ๋ฐ์ดํฐ๊ฐ ๋ฐํ๋จ.
๐ select current_date + interval 1 day; ๐
# current_date๋ ์์คํ
๋ ์ง์ ๋ ์ง๋ง ํ์ธํ๋ ํจ์. interval 1 day๋ '1์ผ ํ'๋ผ๋ ์๋ฏธ์ ๊ธฐ๊ฐํ ์์.
- ์ผ์ฃผ์ผ์ ๋ํด์ค๋ณผ๊น?
๐ select current_date + interval 7 day; ๐
๋ฐ๋~!
- ๊ทธ๋ผ ๋ ์งํ ๊ฐ์ ๋บผ์
๋ ๊ฐ๋ฅ?
๋ ์ง์๊ฐํ ๋ฐ์ดํฐ ๊ฐ์ ๋บผ์
๊ฐ๋ฅ! datediff ํจ์๋ฅผ ์ฐ๋ฉด ๋บ '๊ธฐ๊ฐ'์ด ๋์ด!
๐ select datediff('2021-08-14', '2021-01-01'); ๐
๐ 15๊ฐ CASE ๋ฌธ์ผ๋ก ๋ฐ์ดํฐ ๋ณํํ๊ธฐ
- case๋ฌธ
- RDBMS์์๋ ์ฌ์ฉ์๊ฐ ํจ์๋ฅผ ์์ฑํ ์ ์์! ์ด๋ป๊ฒ? CASE ๋ฌธ์ ํ์ฉํด์!
๐ case when ์กฐ๊ฑด์ then ์1 #1
[when ์กฐ๊ฑด์2 then ์2...] #2
[else ์3] #3
end ๐
-
#1 ๋จผ์ when ์ ์๋ ์ฐธ๊ณผ ๊ฑฐ์ง์ ๋ฐํํ๋ ์กฐ๊ฑด์์ ๊ธฐ์ ํจ! ์ฐธ์ด๋ฉด then ๋ค์ ์์ด ์ฒ๋ฆฌ๋จ.
-
#1 when ์ ์ ์กฐ๊ฑด์์ ์ฐจ๋ก๋ก ํ๊ฐํด ๋๊ฐ๋ค๊ฐ ๊ฐ์ฅ ๋จผ์ ์กฐ๊ฑด์ ๋ง์กฑํ when ์ ๊ณผ ๋์ํ๋ then์ ์์ ์ฒ๋ฆฌ๊ฒฐ๊ณผ๋ฅผ case ๋ฌธ์ ๊ฒฐ๊ด๊ฐ์ผ๋ก ๋ฐํ.
-
#2 ๊ทธ ์ด๋ค ์กฐ๊ฑด์๋ ๋ง์กฑํ์ง ๋ชปํ ๊ฒฝ์ฐ์๋ else ์ ์ ๊ธฐ์ ํ ์์ด ์ฑํ๋จ. (else๋ ์๋ต๊ฐ๋ฅํ๊ณ ์๋ตํ ๊ฒฝ์ฐ์๋ 'else null'๋ก ๊ฐ์ฃผ๋จ.
-
๊ทธ๋ ๋ค๋ฉด...๐ NULL๊ฐ์ 0์ผ๋ก ๋ฐํํ๋ case์ ๊ตฌํ์ฌ๋ก๋ฅผ ์ดํด๋ณผ๊น...?^^
๐ select address, case when address IS NULL then 0 else address end "address(null=0)" from orders; ๐
-
NULL๊ฐ์ด 0์ผ๋ก ๋ฐ๋์๋ฐ!
-
๐ช ๊ทผ๋ฐ ๋ค์ select ๊ตฌ๋ฌธ์ ์ณ๋ณด๋ฉด NULL ๊ฐ์ ์ฌ์ ํ NULL ๊ฐ์ด๋ค. ์ด๊ฑด ์ด์ฉ ์ ์๋ ๊ฒ์ผ๊น? ๊ถ๊ธ..
-
COALESCE
์๊ธฐ์ NULL๊ฐ์ ๋ณํํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด COALESCE ํจ์๋ฅผ ์ฌ์ฉํ๋ ํธ์ด ๋ ์ฝ๋ค๊ณ ํ๋ค^^
๐ select address, coalesce(address,0) from orders; ๐
# address๊ฐ null์ด ์๋๋ฉด address๊ฐ์ ๊ทธ๋๋ก ์ถ๋ ฅ, ๊ทธ๋ ์ง ์์ผ๋ฉด(address๊ฐ null์ด๋ฉด 0 ์ถ๋ ฅ!)
- ๐ช ๊ทผ๋ฐ ์ด๊ฒ๋ ๋ง์ฐฌ๊ฐ์ง๋ก... NULL๊ฐ์ ์ฌ์ ํ NULL ๊ฐ์ด๋ค. ์์ ๋ฐ๊ฟ ์๋ ์๋ ๊ฑฐ์ ๊ฐ!!!
- ๋ ํ๋์ CASE ๋ฌธ
- ์ซ์๋ก ์ด๋ฃจ์ด์ง ์ฝ๋๋ฅผ ์์๋ณด๊ธฐ ๋ ์ฝ๊ฒ ๋ฌธ์์ด๋ก ๋ณํํ๊ณ ์ถ์ ๊ฒฝ์ฐ case๋ฌธ์ ๋ง์ด ์ฌ์ฉํจ.
- ์๋ฅผ ๋ค์ด, '๋จ์๋ 1, ์ฌ์๋ 2'๋ผ๋ ์ฝ๋ ์ฒด๊ณ๊ฐ ์๋ค๋ฉด 1,2๋ผ๊ณ ์ค๋ช
ํ๋ ๊ฒ๋ณด๋ค ๋จ์/์ฌ์ ๋ผ๊ณ ํ์ํ๋๊ฒ ๋ ์ดํด๊ฐ ์ฝ๊ฒ ์ง. ์ด๋ ๊ฒ ๐ฑ'๋ฌธ์ํ'ํ๋ ๊ฒ์ '๋์ฝ๋'๋ผ๊ณ ๋ถ๋ฅด๊ณ ๋ฐ๋๋ก ์์นํ ํ๋ ๊ฒ์ '์ธ์ฝ๋'๋ผ๊ณ ๋ถ๋ฆ!๐ฑ
when a = 1 then '๋จ์'
when a = 2 then '์ฌ์'
- case๋ฌธ์๋ '๊ฒ์case'์ '๋จ์case'์ ๋ ๊ฐ ๊ตฌ๋ฌธ์ผ๋ก ๋๋ ์ ์์!
- ๊ฒ์case: 'case when ์กฐ๊ฑด์ then ์...' ๊ตฌ๋ฌธ
- ๋จ์case: 'case ์ when ์ then ์...' ๊ตฌ๋ฌธ <- ์๊ธฐ๋ case๋ค์ ๋จผ์ ์์ ๊ธฐ์ ํจ!
case ์1
when ์2 then ์3
[when ์4 then ์5...]
[else ์6]
end
- ์ด๊ฑธ ์ ์ฉํด๋ณด์ฅ...!
- ๊ฒ์ case
select address AS "์ฝ๋",
case
when address = 1 then '๋จ์'
when address = 2 then '์ฌ์'
else '๋ฏธ์ง์ '
end as '์ฑ๋ณ' from orders;
select address AS "์ฝ๋",
case address # case ๋ค์๋ ๋์์ ์ ๊ธฐ
when 1 then '๋จ์' # when ๋ค์๋ ๊ฐ๋ง ์ ๊ธฐ
when 2 then '์ฌ์' # ์๊ธฐ๋ ๋ง์ฐฌ๊ฐ์ง
else '๋ฏธ์ง์ '
end as '์ฑ๋ณ' from orders;
- CASE๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ฃผ์ ์ฌํญ
- else ์๋ต
else๋ฅผ ์๋ตํ๋ฉด else null์ด ๋๋ ๊ฒ์ ์ฃผ์ํด์ผํจ. ๋์ํ๋ when์ด ํ๋๋ ์์ผ๋ฉด else ์ ์ด ์ฌ์ฉ๋จ. ์ด๋ else๋ฅผ ์๋ตํ๋ฉด ์์ ํ ๊ฒ ์ด์ธ์ ๋ฐ์ดํฐ๊ฐ ์์ ๋ Null์ด ๋ฐํ๋จ. ๋ฐ๋ผ์ else๋ฅผ ์๋ตํ์ง ์๊ณ ์ง์ ํ๋ ํธ์ด ๋์. -> case ๋ฌธ์ else๋ ์๋ตํ์ง ์๋ ํธ์ด ๋ซ๋ค๋ ๋ง...!
- when์ Null ์ง์ ํ๊ธฐ
case address
when '๋๊ตฌ ์ด๋๊ฐ' then '๋จ์'
when '์์ธ ์ด๋๊ฐ' then '์ฌ์'
when NULL then '๋ฐ์ดํฐ ์์'
else '๋ฏธ์ง์ '
end
์ด๋ด๋๋ 1. address = '๋๊ตฌ ์ด๋๊ฐ', 2. address = '์์ธ ์ด๋๊ฐ', 3. address = NULL ์ด ์์๋ก ์ฒ๋ฆฌ๋จ! ์๋ ์ค์ํ ๊ฒ์ 2๊ฐ์ง!
โฃ๏ธ NULL ๊ฐ์ธ์ง ์๋์ง ํ์ ํ๊ธฐ ์ํด์๋ IS NULL์ ์ฌ์ฉํจ.
โฃ๏ธ NULL ๊ฐ์ธ์ง๋ฅผ ํ์ ํ๋ ค๋ฉด ๊ฒ์ CASE๋ฌธ์ ์ฌ์ฉํด์ผํจ. (์๋๋ฉด ๋จ์ CASE๋ฌธ์ ํน์ฑ์ = ์ฐ์ฐ์๋ก ๋น๊ตํ๋๊น!) ๋ฐ์ ์ฐธ์กฐ!
case
when '๋๊ตฌ ์ด๋๊ฐ' then '๋จ์'
when '์์ธ ์ด๋๊ฐ' then '์ฌ์'
when address IS NULL then '๋ฐ์ดํฐ ์์'
else '๋ฏธ์ง์ '
end
-> ๋จ์ case๋ฌธ์ผ๋ก๋ NULL ๊ฐ ๋น๊ต ๋ถ๊ฐ!
๐ฉ 3์ฅ ๋ท๋ถ๋ถ case๋ฌธ ๋ค์ ํ ๋ฒ ๋ณต์ํ๊ธฐ...๐ฉ ํ!