[D+1] ์์ ๋ณด๋ค ์ฌ์ด SQL(1) - ํ๋ก๊ทธ๋จ ์ค์น, ๋ฐ์ดํฐ ์กฐํ์ ํํฐ๋ง(SELECT, WHERE ๋ฑ)
๋๋์ด SQL ๊ณต๋ถ๋ฅผ ์์ํ์ต๋๋ค.
[D+] ์๋ฏธ๋ ๋งค์ผ๊ฐ์ด ๊ณต๋ถํ ๋ด์ฉ์ ์ฌ๋ฆฌ๊ฒ ๋ค๋ ์ ์ ์์ ํฌ๋ถ๋ฅผ ๋๋ฌ๋ธ ๊ฑฐ์์.
๋ ํํ์๋ ๋ถ๋ค์ ์ ์์์ ๋ง์ถฐ ๊ธ์ ์ฝ์ผ์ ๋ค๋ฉด ๊ฐ๋ ์ ๋ฆฌ์ ๋์์ด ๋์ง ์์๊น ์ถ์ด์.
๊ฑฐ๋์ ๋ฏธํ๊ณ ๊ณต๋ถํ ๋ด์ฉ ๋ณต์ต์ด๋ ํด๋ณผ๊ฒ์.
โ๏ธStudy Index
1. Mysql ํ๋ก๊ทธ๋จ ์ค์น
2. SQL ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ ๋ฐ์ดํฐ ์กฐํํ๊ธฐ (SELECT, FROM)
3. ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ ํํฐ๋งํ๊ธฐ (WHERE)
4. ํํฐ๋ง์ ์ ์ฉํ ํํ ์์๋ณด๊ธฐ (๋น๊ต์ฐ์ฐ, BETWEEN, IN, LIKE)
1. Mysql ํ๋ก๊ทธ๋จ ์ค์น
๋น์ฐํ sql์ ํ๋ ค๋ฉด ํ๋ก๊ทธ๋จ์ด ์ค์น๋์ด ์์ด์ผ๊ฒ ์ฃ ?
๋ฐ์ดํฐ ๋ถ์์ ๋์์ฃผ๋ DBeaver Community ํ๋ซํผ์ ๋ค์ด๊ฐ ๋ณธ์ธ์ OS์ ๋ง๋ ํ๋ก๊ทธ๋จ์ ์ค์นํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
๐ ์ค์น ์ฌ์ดํธ ๋งํฌ https://dbeaver.io/download/
์ฒ์ ์คํํ๋ฉด ์ฌ๋ฌ๊ฐ์ง ๋๊ตฌ ์์ด์ฝ ๋ฑ์ด ๋์ฌ ํ ๋ฐ, ๊ทธ๋ ์๋ ๋๊ณ ๋๊ฐ ์๋ MySQL์ ์ ํํด์ฃผ์๋ฉด ๋ผ์!
๊ฒ์๋ ๊ฐ๋ฅํ๋, ์ ๋ณด์ธ๋ค๊ณ ๋ฉ๋ถ ์ค์ง ๋ง์๊ณ ์ง์ ๊ฒ์ํ์ ์ ์ ํํ๋ฉด ๋!
๊ทธ ์ดํ์๋ ์ข์ธก ์๋จ ์์ด์ฝ์ ํด๋ฆญํ๋ฉด ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ์ ์์ด์.
2. SQL ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ ๋ฐ์ดํฐ ์กฐํ ๋ฐฉ๋ฒ (SELECT, FROM)
ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์์ ํ์ํ ๊ธฐ๋ณธ ๊ฐ๋ ์ ๋ํด ์ ๋ฆฌํด๋ณผ๊ฒ์.
- SQL(Structured Query Language)์ ๋ง ๊ทธ๋๋ก ๊ตฌ์กฐํ๋ ์ง์ ์ธ์ด ๋ผ๊ณ ํ ์ ์์ด์. ๊ทธ๋ฅ ์ธ์ด์์.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ฝ๊ฒ ๋งํด ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด ์๋ ํฐ ํด๋๋ผ๊ณ ์ดํดํ ์ ์๋์. ๊ทธ ์์ 'ํ
์ด๋ธ'์ด๋ผ๋ ์ฌ๋ฌ ํ์ผ์ด ์๋ ํํ์์.
- ํ ์ด๋ธ ์ ๋ง์น ์์ ๊ณผ ๊ฐ์ด ํ๊ณผ ์ด ๊ตฌ์กฐ์ ๋ฐ์ดํฐ์์.
- ๊ทธ๋ฆฌ๊ณ ํ ์ด๋ธ ์์ ๊ฐ ์ด์ '์ปฌ๋ผ' ํน์ 'ํ๋'๋ผ๊ณ ๋ถ๋ฅธ๋์.
- ์์ฝํ์๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ํ๊ณผ ์ด์ ๊ฐ์ง ๋ง์ ํ ์ด๋ธ์ด ์กด์ฌํ๊ณ , ํ ์ด๋ธ์ ์ด์ ์ปฌ๋ผ(ํน์ ํ๋)๋ผ๊ณ ํ๋ค. [ ๋ฐ์ดํฐ๋ฒ ์ด์ค > ํ ์ด๋ธ > ์ปฌ๋ผ ] ์ด๋ฐ ๊ตฌ์กฐ๋ก ์ ๋ฆฌ๋์ด ์๊ฒ ๋ค์.
๊ทธ๋ผ ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ด๋ป๊ฒ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๊น์?
์ ์ผ ๊ธฐ๋ณธ์ด ๋๋ ๋ฐ์ดํฐ ์กฐํ ํจ์๊ฐ ๋ฐ๋ก SELECT FROM ์ ๋๋ค.
์๋์ฒ๋ผ ์จ์ฃผ์๋ฉด ๋๋๋ฐ, from ๋ค์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ํ ์ด๋ธ ๋ช ์ select์๋ ๊ฐ์ ธ์ค๋ ๋ฐ์ดํฐ ํ ์ด๋ธ ์ด๋ฆ์ ์จ์ฃผ์๋ฉด ๋ผ์. ๋ง์ฝ ํน์ ์ปฌ๋ผ์ด ์๋ ํ ์ด๋ธ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ณ ์ถ๋ค๋ฉด select * ์ ์ ์ด์ฃผ์๋ฉด ๋ผ์!
select ์ปฌ๋ผ1, ์ปฌ๋ผ2 ๋๋ * (ํ
์ด๋ธ ๋ฐ์ดํฐ ์ ์ฒด ์กฐํ์ * ์ฌ์ฉ)
from ํ
์ด๋ธ๋ช
3. ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ ํํฐ๋งํ๊ธฐ (WHERE)
๊ทธ๋ผ ๋ฐ์ดํฐ์์ ํน์ ์กฐ๊ฑด์ ๋ง๋ ๊ฒ๋ค๋ง ํํฐ๋ง ํด์ผํ ๋ ์ฌ์ฉํ๋ WHERE ๋ฌธ๋ฒ์ ์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ก ์ฌ์ฉํด์.
select *
from ํ
์ด๋ธ
where ํํฐ๋ง ์กฐ๊ฑด (ex. age = 20 ๋๋ geder = 'male')
๋์น ์ฑ์ ๋ถ๋ ๊ณ์ ๊ฐ์? ์ผ๋ฐ์ ์ธ ์ซ์๋ ๊ทธ๋๋ก ์ ์ด์ฃผ์ ๋ ๋ฌด๊ดํ์ง๋ง
๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ๊ผญ '์์ ๋ฐ์ดํ' ์์ ๋ฃ์ด์ฃผ์ ์ผ ์ค๋ฅ๊ฐ ๋์ง ์์ต๋๋ค.
์ ๋ ๊ฒ ์์ฑํ๊ณ ์คํ(ctrl + enter ํจ๊ป ๋๋ฅด๊ธฐ) ํ์๋ฉด, ์๋ ์กฐ๊ฑด์ ๋ง๋ ๊ฐ๋ค์ด ๋ํ๋๊ฒ ๋ฉ๋๋ค.
4. ํํฐ๋ง์ ์ ์ฉํ ํํ ์์๋ณด๊ธฐ (๋น๊ต์ฐ์ฐ, BETWEEN, IN, LIKE)
where ์ ์ ์ํ๋ ์กฐ๊ฑด์ ํญ์ ๊ฐ๋ค(=)๊ณ ๋ง ๋ฃ์ ์ ์๊ฒ ์ฃ ?
๋ ๋ค์ํ๊ฒ ๋ด๊ฐ ์ํ๋ ์กฐ๊ฑด์ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์๋ ค๋๋ฆด๊ฒ์.
์ฌ๊ธฐ์ ์ ๊นโ "๊ฐ์ง ์๋ค(≠)"๋ ์ด๋ป๊ฒ ํํํ ๊น์?
<> ์ด๋ ๊ฒ ํํํด์! ๋๋ฐ์ด์ฃ ?! ์ ๋ =/= ์ด๋ ๊ฒ ํํํ ์ค ใ ใ
์ํผ ๊ฐ์ ๋ฃ๋ ์ค์ ์๋กญ๊ฒ ์๊ฒ๋ + ์์ํ์ง ๋ชปํ๋ ๋ด์ฉ์ด๋ผ ํ๋ฒ ์ ์ด๋ดค์ด์.
(1) ๋น๊ต์ฐ์ฐ์์ ์ข ๋ฅ
= ๊ฐ๋ค
<> ๊ฐ์ง ์๋ค (๋ค๋ฅด๋ค)
> ํฌ๋ค
>= ํฌ๊ฑฐ๋ ๊ฐ๋ค
< ์๋ค
<= ์๊ฑฐ๋ ๊ฐ๋ค
(์์) ๋์ด๊ฐ 21์ธ ๋ฏธ๋ง์ธ ๊ณ ๊ฐ ์กฐํํ๊ธฐ
select *
from costomers
where age < 21
(2) ํฌํจ๊ณผ ๊ด๋ จ๋ ์กฐ๊ฑด (BETWEEN, IN, LIKE)
'ํฌํจ๊ณผ ๊ด๋ จ๋์๋ค'๋ ๋ง์ ์ ๊ฐ ์ค์ค๋ก ์ดํดํ๊ธฐ ์ฝ๊ฒ ํํํด๋ณธ ๊ฑฐ์์. ์ฐธ๊ณ ํด์ฃผ์ธ์.
BETWEEN A and B A์ B ์ฌ์ด
IN 'ํฌํจ'ํ๋ ์กฐ๊ฑด ์ฃผ๊ธฐ
LIKE ์์ ํ ๋๊ฐ์ง ์์ง๋ง ๋น์ทํ ๊ฐ ์กฐ๊ฑด ์ฃผ๊ธฐ
(์์) ์ฃผ๋ฌธ ํ
์ด๋ธ์์ B๋ก ์์ํ๋ ์์ ์ ์ฃผ๋ฌธ ์กฐํํ๊ธฐ
select *
from food_orders
where restaurant_name like 'B%'
(3) ์ฌ๋ฌ ๊ฐ ์กฐ๊ฑด์ ํ๋ฒ์ ์ ์ฉ (and, or, not)
AND ๊ทธ๋ฆฌ๊ณ
OR ๋๋
NOT ์๋
(์์) ๊ฒฐ์ ํ
์ด๋ธ์์ ์นด๋๋ก ๊ฒฐ์ ํ๊ฑฐ๋, VAT ์จ์ด 0.2 ์ดํ์ธ ๊ฒฝ์ฐ ์กฐํ
select *
from payments
where pay_type = 'card' or vat <= 0.2
์ฒซ ๋ ๊ณต๋ถํ ๋ด์ฉ์ ์ฌ๊ธฐ๊น์ง์์.
์จ๋ผ์ธ ๊ฐ์๋ ์๊ฐ๋ณด๋ค ๋๋ฌด ์ฝ๊ฒ ์ ์๋ ค์ฃผ์ ์ ๋ฐ๋ผ๊ฐ๋๊ฒ ๋งค์ฐ ์์ํ์ด์.
์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋๋๋ก ๋ฐ์ดํฐ๊ฐ ์ ๋ฆฌ๋์ด ์ถ์ถ๋๋ ๊ณผ์ ์ด ๋๋ฌด ๊น๋ํ๋ ์ฌ๋ฏธ์๊ณ ์ข๋๋ผ๊ตฌ์.
์ฒ์์ ๋ง์ฐํ๊ฒ ์ฝ๋ฉ์ด๋๊น ์ด๋ ต์ง ์์๊น ์๊ฐํ๋๋ฐ ์ง๊ธ์ 1์ผ์ฐจ์ฌ์(ใ ใ ) ๊ทธ๋ฐ์ง ๋๋ฌด ๋๋ฌด ์ฌ๋ฏธ์์ด์!
์ธ์ ๊ฐ ์ข ๋ ์ด๋ ค์ ๋ณด์ด๋ ๊ณ ๊ธ ์คํฌ ๊ณต๋ถ๋ฅผ ๋จ๊ธฐ๋ ๋ธ๋ก๊ทธ๊ฐ ๋ ์ ์๊ฒ ์ ์ง ํด์ผ๊ฒ ์ด์๐
<์์ ๋ณด๋ค ์ฌ์ด SQL> ์จ๋ผ์ธ ๊ฐ์ 1์ฃผ์ฐจ ์๋ฐ์ ํ์ต ๋ ธํธ์ ๋๋ค.