๋ฐ์ดํฐ๋ฒ ์ด์ค?
- ์ฌ๋ฌ ์ฌ๋๋ค์ด ๊ฐ์ด ์ฌ์ฉํ ๋ชฉ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ํต
- ์ํ๋ ๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฌ์ฉํ๊ธฐ ์ํด ๋ค์ํ ๊ธฐ๋ฅ๋ค์ด ์ ๊ณต ๋๋ค.
1) Create - ๋ฐ์ดํฐ์ ์์ฑ
2) Read - ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ ๊ฒ
3) Update - ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝ
4) Delete - ์ญ์
SQL?
- Structured Query Language
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ฒญ(Query)์ ๋ณด๋ด ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋์์ฃผ๋ ์ธ์ด
๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ช ๋ น์ด๋ฅผ ์์ฑํ๋ ๊ฒ = 'SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ค.'
1. Select ์ฟผ๋ฆฌ๋ฌธ
- ๋ฐ์ดํฐ๋ฅผ ์ ํํด์ ๊ฐ์ ธ์ค๊ฒ ๋ค๋ ๋ช ๋ น์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๊ฒ ๋ด๋ฆฌ๋ ๊ฒ
- 1๏ธโฃ ์ด๋ค ํ ์ด๋ธ์์ 2๏ธโฃ ์ด๋ค ํ๋์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ์ง๋ก ๊ตฌ์ฑ๋๋ค.
๐โโ๏ธ ํ ์ด๋ธ? ํ๋?
ํ ์ด๋ธ - ์๋ฃ๋ฅผ ๋ชจ์๋์ ๊ฒ
ํ๋ - ์ด๋ ํ ์๋ฏธ๋ฅผ ์ง๋๋ ์ต์ํ์ ๊ฒ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์์ ์ฒ๋ฆฌ์ ์ต์ ๋จ์
์ฐธ์กฐ๋งํฌ: https://medium.com/@jw02048/%ED%85%8C%EC%9D%B4%EB%B8%94-table-%ED%95%84%EB%93%9C-field-%EC%97%B4-column-%ED%96%89-row-f186f45ebe44
1) ์ ์ฒด ํญ๋ชฉ ๊ฐ์ ธ์ค๊ธฐ
- orders ํ ์ด๋ธ์ ๋ฐ์ดํฐ์ค *(์ ์ฒดํญ๋ชฉ) ๊ฐ์ ธ์์ค.
select * from orders;
์ฟผ๋ฆฌ๋ฌธ์ด ๋๋๋ ๊ณณ์๋ ';' ์ธ๋ฏธ์ฝ๋ก ์ผ๋ก ๋ช ์ํด์ฃผ๊ธฐ!!
2) ํน์ ํ๋๋ง ๊ฐ์ ธ์ค๊ธฐ
- orders ํ ์ด๋ธ์ ๋ฐ์ดํฐ ์ค created_at, course_title ํ๋๋ง ๊ฐ์ ธ์์ค.
select created_at, course_title from orders;
3) ์กฐ๊ฑด ๊ฑธ๊ธฐ โก๏ธ where
- orders ํ ์ด๋ธ์์ ๊ฒฐ์ ์๋จ์ด ์นด์นด์คํ์ด์ธ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์์ค.
select * from orders
where payment_method = 'kakaopay';
- point_users ํ ์ด๋ธ์์ ํฌ์ธํธ๊ฐ 5000์ ์ด์์ธ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์์ค.
select * from point_users
where point > 5000;
- orders ํ ์ด๋ธ์์ ์ฃผ๋ฌธํ ๊ฐ์๊ฐ ์น๊ฐ๋ฐ ์ข ํฉ๋ฐ์ด๋ฉด์, ๊ฒฐ์ ์๋จ์ด ์นด์นด์คํ์ด์ธ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์์ค.
select * from orders
where course_title = '์น๊ฐ๋ฐ ์ข
ํฉ๋ฐ'
and payment_method = 'kakaopay';
- '๊ฐ์ง ์์(!=)'์ ์กฐ๊ฑด ๊ฑธ์ด๋ณด๊ธฐ
- ์น๊ฐ๋ฐ ์ข ํฉ๋ฐ์ ์ ์ธํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ค.
select * from orders
where course_title != '์น๊ฐ๋ฐ ์ข
ํฉ๋ฐ';
- '๋ฒ์, between'์ ์กฐ๊ฑด ๊ฑธ์ด๋ณด๊ธฐ
- 7์ 13์ผ ~ 7์ 14์ผ์ ์ฃผ๋ฌธ๋ฐ์ดํฐ ๊ฐ์ ธ์์ค.
select * from orders
where created_at between '2020-07-13' and '2020-07-15';
- 'ํฌํจ(in)'์ ์กฐ๊ฑด ๊ฑธ์ด๋ณด๊ธฐ
- 1, 3์ฃผ์ฐจ ์ฌ๋๋ค์ '์ค๋์ ๋ค์ง' ๋ฐ์ดํฐ ๊ฐ์ ธ์์ค.
select * from checkins
where week in (1, 3);
- 'ํจํด, ๋ฌธ์์ด์ ๊ท์น(like)'์ ์กฐ๊ฑด ๊ฑธ์ด๋ณด๊ธฐ
- ๋ค์ด๋ฒ ์ด๋ฉ์ผ ์ฌ์ฉํ๋ ์ ์ ๋ง ๊ฐ์ ธ์์ค.
select * from users
where email like '%naver.com';
- 'a'๋ก ์์ํ๋ ์ด๋ฉ์ผ์ ๊ฐ์ง ์ ์ ๋ง ๊ฐ์ ธ์์ค.
select * from users
where email like 'a%';
- 'a'๋ก ์์ํ๊ณ 'co' ํฌํจํ๋ ์ด๋ฉ์ผ ๊ฐ์ง ์ ์ ๋ง ๊ฐ์ ธ์์ค.
select * from users
where email like 'a%co%';
- 'kr'๋ก ๋๋๋ ์ด๋ฉ์ผ ๊ฐ์ง ์ ์ ๋ง ๊ฐ์ ธ์์ค.
select * from users
where email like '%kr';
5) Limit
- ์ผ๋ถ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์ค๊ธฐ
- kakaopay ๊ฒฐ์ ์๋จ์ธ ์ฃผ๋ฌธ๊ฑด 5๊ฑด๋ง ๊ฐ์ ธ์์ค.
select * from orders
where payment_method = 'kakaopay'
limit 5;
6) Distinct
- ์ค๋ณต ๋ฐ์ดํฐ ์ ์ธ
- ๊ฒฐ์ ์๋จ์ ์ข ๋ฅ๋ง ๊ฐ์ ธ์์ค.
select distinct(payment_method) from orders;
7) Count
- ๊ฐ์ ์ธ๊ธฐ
- ์ฃผ๋ฌธ์ ์ด ๊ฐ์ ์๋ ค์ค.
select count(*) from orders;
- ๊ฒฐ์ ์๋จ์ ์ข ๋ฅ์ ๊ฐ์ ์๋ ค์ค
select count(distinct(payment_method)) from orders;
๋ฐ์ดํฐ๋ฒ ์ด์ค?
- ์ฌ๋ฌ ์ฌ๋๋ค์ด ๊ฐ์ด ์ฌ์ฉํ ๋ชฉ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ํต
- ์ํ๋ ๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฌ์ฉํ๊ธฐ ์ํด ๋ค์ํ ๊ธฐ๋ฅ๋ค์ด ์ ๊ณต ๋๋ค.
1) Create - ๋ฐ์ดํฐ์ ์์ฑ
2) Read - ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ ๊ฒ
3) Update - ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝ
4) Delete - ์ญ์
SQL?
- Structured Query Language
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ฒญ(Query)์ ๋ณด๋ด ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋์์ฃผ๋ ์ธ์ด
๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ช ๋ น์ด๋ฅผ ์์ฑํ๋ ๊ฒ = 'SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ค.'
1. Select ์ฟผ๋ฆฌ๋ฌธ
- ๋ฐ์ดํฐ๋ฅผ ์ ํํด์ ๊ฐ์ ธ์ค๊ฒ ๋ค๋ ๋ช ๋ น์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๊ฒ ๋ด๋ฆฌ๋ ๊ฒ
- 1๏ธโฃ ์ด๋ค ํ ์ด๋ธ์์ 2๏ธโฃ ์ด๋ค ํ๋์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ์ง๋ก ๊ตฌ์ฑ๋๋ค.
๐โโ๏ธ ํ ์ด๋ธ? ํ๋?
ํ ์ด๋ธ - ์๋ฃ๋ฅผ ๋ชจ์๋์ ๊ฒ
ํ๋ - ์ด๋ ํ ์๋ฏธ๋ฅผ ์ง๋๋ ์ต์ํ์ ๊ฒ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์์ ์ฒ๋ฆฌ์ ์ต์ ๋จ์
์ฐธ์กฐ๋งํฌ: https://medium.com/@jw02048/%ED%85%8C%EC%9D%B4%EB%B8%94-table-%ED%95%84%EB%93%9C-field-%EC%97%B4-column-%ED%96%89-row-f186f45ebe44
1) ์ ์ฒด ํญ๋ชฉ ๊ฐ์ ธ์ค๊ธฐ
- orders ํ ์ด๋ธ์ ๋ฐ์ดํฐ์ค *(์ ์ฒดํญ๋ชฉ) ๊ฐ์ ธ์์ค.
select * from orders;
์ฟผ๋ฆฌ๋ฌธ์ด ๋๋๋ ๊ณณ์๋ ';' ์ธ๋ฏธ์ฝ๋ก ์ผ๋ก ๋ช ์ํด์ฃผ๊ธฐ!!
2) ํน์ ํ๋๋ง ๊ฐ์ ธ์ค๊ธฐ
- orders ํ ์ด๋ธ์ ๋ฐ์ดํฐ ์ค created_at, course_title ํ๋๋ง ๊ฐ์ ธ์์ค.
select created_at, course_title from orders;
3) ์กฐ๊ฑด ๊ฑธ๊ธฐ โก๏ธ where
- orders ํ ์ด๋ธ์์ ๊ฒฐ์ ์๋จ์ด ์นด์นด์คํ์ด์ธ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์์ค.
select * from orders
where payment_method = 'kakaopay';
- point_users ํ ์ด๋ธ์์ ํฌ์ธํธ๊ฐ 5000์ ์ด์์ธ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์์ค.
select * from point_users
where point > 5000;
- orders ํ ์ด๋ธ์์ ์ฃผ๋ฌธํ ๊ฐ์๊ฐ ์น๊ฐ๋ฐ ์ข ํฉ๋ฐ์ด๋ฉด์, ๊ฒฐ์ ์๋จ์ด ์นด์นด์คํ์ด์ธ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์์ค.
select * from orders
where course_title = '์น๊ฐ๋ฐ ์ข
ํฉ๋ฐ'
and payment_method = 'kakaopay';
- '๊ฐ์ง ์์(!=)'์ ์กฐ๊ฑด ๊ฑธ์ด๋ณด๊ธฐ
- ์น๊ฐ๋ฐ ์ข ํฉ๋ฐ์ ์ ์ธํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ค.
select * from orders
where course_title != '์น๊ฐ๋ฐ ์ข
ํฉ๋ฐ';
- '๋ฒ์, between'์ ์กฐ๊ฑด ๊ฑธ์ด๋ณด๊ธฐ
- 7์ 13์ผ ~ 7์ 14์ผ์ ์ฃผ๋ฌธ๋ฐ์ดํฐ ๊ฐ์ ธ์์ค.
select * from orders
where created_at between '2020-07-13' and '2020-07-15';
- 'ํฌํจ(in)'์ ์กฐ๊ฑด ๊ฑธ์ด๋ณด๊ธฐ
- 1, 3์ฃผ์ฐจ ์ฌ๋๋ค์ '์ค๋์ ๋ค์ง' ๋ฐ์ดํฐ ๊ฐ์ ธ์์ค.
select * from checkins
where week in (1, 3);
- 'ํจํด, ๋ฌธ์์ด์ ๊ท์น(like)'์ ์กฐ๊ฑด ๊ฑธ์ด๋ณด๊ธฐ
- ๋ค์ด๋ฒ ์ด๋ฉ์ผ ์ฌ์ฉํ๋ ์ ์ ๋ง ๊ฐ์ ธ์์ค.
select * from users
where email like '%naver.com';
- 'a'๋ก ์์ํ๋ ์ด๋ฉ์ผ์ ๊ฐ์ง ์ ์ ๋ง ๊ฐ์ ธ์์ค.
select * from users
where email like 'a%';
- 'a'๋ก ์์ํ๊ณ 'co' ํฌํจํ๋ ์ด๋ฉ์ผ ๊ฐ์ง ์ ์ ๋ง ๊ฐ์ ธ์์ค.
select * from users
where email like 'a%co%';
- 'kr'๋ก ๋๋๋ ์ด๋ฉ์ผ ๊ฐ์ง ์ ์ ๋ง ๊ฐ์ ธ์์ค.
select * from users
where email like '%kr';
5) Limit
- ์ผ๋ถ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์ค๊ธฐ
- kakaopay ๊ฒฐ์ ์๋จ์ธ ์ฃผ๋ฌธ๊ฑด 5๊ฑด๋ง ๊ฐ์ ธ์์ค.
select * from orders
where payment_method = 'kakaopay'
limit 5;
6) Distinct
- ์ค๋ณต ๋ฐ์ดํฐ ์ ์ธ
- ๊ฒฐ์ ์๋จ์ ์ข ๋ฅ๋ง ๊ฐ์ ธ์์ค.
select distinct(payment_method) from orders;
7) Count
- ๊ฐ์ ์ธ๊ธฐ
- ์ฃผ๋ฌธ์ ์ด ๊ฐ์ ์๋ ค์ค.
select count(*) from orders;
- ๊ฒฐ์ ์๋จ์ ์ข ๋ฅ์ ๊ฐ์ ์๋ ค์ค
select count(distinct(payment_method)) from orders;