ใ ์คํ๋ฅดํ์ฝ๋ฉํด๋ฝ SQL โ1์ฃผ์ฐจโ ใ
[ DB(๋ฐ์ดํฐ๋ฒ ์ด์ค)์ ๊ฐ๋ ]
- ์ฌ๋ฌ ์ฌ๋์ด ๊ณต์ ํ๊ณ ์ฌ์ฉํ ๋ชฉ์ ์ผ๋ก ํตํฉ ๊ด๋ฆฌ๋๋ ์ ๋ณด์ ์งํฉ
- ๋ ผ๋ฆฌ์ ์ผ๋ก ์ฐ๊ด๋ ํ๋ ์ด์์ ์๋ฃ์ ๋ชจ์์ผ๋ก ๋ด์ฉ์ ๊ตฌ์กฐํ ํ ๊ฒ
- ๊ณต๋ ์๋ฃ๋ก์ ๊ฐ ์ฌ์ฉ์๋ ๊ฐ์ ๋ฐ์ดํฐ๋ผ ํ ์ง๋ผ๋ ๊ฐ์์ ์์ฉ ๋ชฉ์ ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ
[ DB์ ํน์ง ]
- ์ค์๊ฐ ์ ๊ทผ์ฑ
- ์ง์์ ์ธ ๋ณํ
- ๋์ ๊ณต์
- ๋ด์ฉ์ ๋ํ ์ฐธ์กฐ
- ๋ฐ์ดํฐ ๋ ผ๋ฆฌ์ ๋ ๋ฆฝ์ฑ
[ RDBMS ๊ฐ๋ ]
- ๊ด๊ณํ ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ DataBaseManagementSystem ์ ํ
- RDB๋ ํค(key)์ ๊ฐ(value)๋ค์ ๊ฐ๋จํ ๊ด๊ณ๋ฅผ ํ ์ด๋ธํ ์ํจ ๊ฐ๋จํ ์์น์ ์ ์ฐ์ ๋ณด DB๋ฅผ ๋งํจ
- RDBMS๋ ๋ฐ์ดํฐ๋ฅผ ํ(row)๊ณผ ์ด(column)์ ์ด๋ฃจ๋ ํ๋ ์ด์์ ํ ์ด๋ธ(๋๋ ๊ด๊ณ)๋ก ์ ๋ฆฌํ๋ฉฐ ๊ณ ์ ํค(Prmary key)๊ฐ ๊ฐ ํ์ ์๋ณ
- ์ผ๋ฐ์ ์ผ๋ก ๊ฐ ํ ์ด๋ธ/๊ด๊ณ๋ ํ๋์ ์ํฐํฐํ์ ์ ๋ํํ๋ค.
[ RDBMS ์ ํ ]
- ๋ฏธ๊ตญ์ ์ค๋ผํด(Oracle)
- ๋ง์ดํฌ๋ก์ํํธ์ MS SQL SERVER
- ๋ฏธ๊ตญ์ MySQL
- MariaDB
[ SQL ๊ฐ๋ ]
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ (RDBMS)์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ค๊ณ๋ ํน์ ๋ชฉ์ ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
- ์๋ฃ์ CRUD ๊ธฐ๋ฅ ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด ์ ๊ทผ ์กฐ์ ๊ด๋ฆฌ๋ฅผ ์ํด ๊ณ ์ ๋์์
- ๋ค๋ง ์ต๊ทผ NoSQL ๊ณ์ด์ DBMS์์๋ ์ฌ์ฉ๋์ง ์์
[ SQL ์ฌ์ฉ ์ด์ ]
- ํ๋ก๊ทธ๋๋ฐ ์ฌ์ดํธ ์ ์ ์์ ์ ์ ์จ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ต๊ทผ๊น์ง ์ ์ ๋ ์ ๋๋ก ์ฌ์ฉ ์ ๋๊ฐ ์ฆ์
- ๋ง์ ์์ DBMS๋ค์ด SQL์ ํ์ค์ผ๋ก ์ฑํํ๊ณ ์์
- ๋ฐ์ดํฐ์ CRUD ๊ธฐ๋ฅ์ ์ง๊ด์ฑ ์๊ณ ๊ฐ๋จํ๊ฒ ์ง์
[ DB์ CRUD ๊ธฐ๋ฅ ]
- CRUD๋ ์ํํธ์จ์ด๊ฐ ๊ฐ์ง๋ ์ต์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ์๋ฏธํจ
์ด๋ฆ | ์กฐ์ | SQL๋ฌธ |
Create | ์์ฑ | INSERT |
Read or Retrieve | ์ฝ๊ธฐ(์ธ์ถ) | SELECT |
Update | ๊ฐฑ์ | UPDATE |
Delete or Destroy | ์ญ์ (ํ๊ดด) | DELETE |
[ ์ฟผ๋ฆฌ๋ฌธ ]
- ์ฟผ๋ฆฌ(Query)๋ฌธ์ด๋ ์ง์๋ฅผ ์๋ฏธํ๋ฉฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ช ๋ น์ ๋ด๋ฆฌ๋ ๊ฒ์ ์๋ฏธ(์ง์๋ฌธ)
[ SELECT ์ฟผ๋ฆฌ๋ฌธ ]
- ์ด๋ค ํ ์ด๋ธ์์ ์ด๋ค ํ๋์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ์ง๋ฅผ ๋ช ๋ น
- ์๋์ ์ฝ๋์ ๊ฐ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง
# The SQL SELECT Statement
select (๊ฐ์ ธ์ฌ ํ๋ ๋ฒ์) from (๊ฐ์ ธ์ฌ ํ
์ด๋ธ๋ช
)
[ WHERE ์ฟผ๋ฆฌ๋ฌธ ]
- SELECT ์ฟผ๋ฆฌ๋ฌธ์ผ๋ก ๊ฐ์ ธ์ฌ ๋ฐ์ดํฐ์ ์กฐ๊ฑด์ ๋ถ์ฌ
- ์๋์ ์ฝ๋์ ๊ฐ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง
# The SQL WHERE Statement
SELECT * from table
WHERE ์กฐ๊ฑด
[ WHERE ์ ๊ณผ ํจ๊ป ์์ฃผ ์ฐ์ด๋ ์กฐ๊ฑด ]
์๋ฏธ | SQL ๋ฌธ |
๋ฒ์ ์ค์ | BETWEEN |
๊ฐ์ง ์์ | != |
ํฌํจ | IN |
ํจํด(๋ฌธ์์ด ๊ท์น) | LIKE |
[ ์ฟผ๋ฆฌ๋ฌธ ๊ธฐ๋ณธ ์์ ]
โ ํฌ์ธํธ๊ฐ 20,000์ ์ด๊ณผ์ธ ์ ์ ๋ง ๋ฝ์์ค๊ธฐ
select *from point_users
where point > 20000
โก ์น๊ฐ๋ฐ ์ข ํฉ๋ฐ์ด๋ฉด์ ๊ฒฐ์ ์๋จ์ด CARD์ธ ์ฃผ๋ฌธ๊ฑด๋ง ๋ฝ์๋ณด๊ธฐ
select * from orders
where
course_title = '์น๊ฐ๋ฐ ์ข
ํฉ๋ฐ' and payment_method = 'CARD'
โข 2020-07-13 ~ 2020-07-14์ผ์ ์ฃผ๋ฌธ ๋ฐ์ดํฐ๋ง ํ์ธ [๋ฒ์ ์กฐ๊ฑด ๊ฑธ๊ธฐ]
select * from orders
where created_at between '2020-07-13' and '2020-07-15'
โฃ ํ์ต ํ๊ฐ ๋ฐ์ดํฐ์์ 1, 3์ฃผ์ฐจ์ ๋ฐ์ดํฐ๋ง ํ์ธํ๊ณ ์ถ์ ๊ฒฝ์ฐ [ํฌํจ ์กฐ๊ฑด ๊ฑธ๊ธฐ]
select * from checkins
where week in (1,3)
โค ์ด๋ฉ์ผ์ด s๋ก ์์ํ๊ณ com์ผ๋ก ๋๋๋ฉด์ ์ฑ์ด ์ด์จ์ธ ์ ์ ๋ง ์ถ์ถ
select * from users
where email like 's%com' and name like '์ด%'
โฅ ์ผ๋ถ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์ค๊ธฐ : LIMIT
select * from users
limit 5
โฆ ์ ์ ์ ๋ณด ๋ฐ์ดํฐ์์ ๋ช ๊ฐ ์ฑ์จ์ ์ ์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋์ง ํ์ธ : COUNT() & DISTINCT()
# ์ค๋ณต ๋ฐ์ดํฐ๋ฅผ ์ ์ธํ ๋ฐ์ดํฐ ์ถ์ถ ํจ์ : DISTINCT()
# ๋ฐ์ดํฐ์ ์๋์ ๋ฐํํ๋ ํจ์ : COUNT()
select count(distinct(name)) from users
โง Gmail์ ์ฌ์ฉํ๋ 2020/07/12 ~ 13์ ๊ฐ์ ํ ์ ์ ์ ์๋ฅผ ์ธ๊ธฐ
select count(*) from users
where
email like '%gmail.com' and created_at BETWEEN '2020-07-12' and '2020-07-14'
โจ naver ์ด๋ฉ์ผ์ ์ฌ์ฉํ๋ฉด์, ์น๊ฐ๋ฐ ์ข ํฉ๋ฐ์ ์ ์ฒญํ๊ณ ๊ฒฐ์ ๋ kakaopay๋ก ์ด๋ค์ง ์ฃผ๋ฌธ๋ฐ์ดํฐ ์ถ์ถ
select * from orders
where
email like '%naver.com'
and course_title = '์น๊ฐ๋ฐ ์ข
ํฉ๋ฐ'
and payment_method = 'kakaopay'
[ ๐ 1์ฃผ์ฐจ ์๊ฐ ]
์ฌ์ค ์ด์ ์ ํ๊ต๋ฅผ ํตํด ์ค๋ผํด RDBMS๋ฅผ ์ฌ์ฉํ DB ๊ด๋ฆฌ๋ฅผ ๋ฐฐ์ด์ ์ด ์๋ค.
๋ฌผ๋ก ๊ทธ๋๋ ์ ๋ง ๊ฐ๋ ์ ์ธ ๋ถ๋ถ์ 1๋ ๋ชฐ๋๋ ํฐ๋ผ ์๋ก์ด ์ฉ์ด์ ๊ฐ๋ ๋ค์ ๋ง์ด ๋ํดํ๋ ๊ฒ ๊ฐ๋ค.
๋น์์ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง ERD ์ ์ ๋ฑ์ ๊ต๊ณผ๊ณผ์ ์ ๋ง์ถฐ ๋ฐฐ์ฐ๋ค ๋ณด๋ ๊ฐ๋ ์ด ๊ต์ฅํ ๋ถ์กฑํ๋ ๊ธฐ์ต์ด ๋จ๋๋ค.
์๋ฒ ์๊ฐ ๊ณผ์ ์์๋ DBeaver๋ฅผ ์ฌ์ฉํ๋๋ฐ ์ฐ์ ํ๋ก๊ทธ๋จ ์์ด์ฝ์ด ๊ต์ฅํ ๊ท์ฝ๋ค(!)ใ ใ
๋ค์๊ธ ๋ณต์ตํ๋ ๋ถ๋ถ์ผ๋ก ๊ฐ์ข๋ฅผ ๋ค์๋๋ฐ ์๋กญ๊ฒ ์๊ฒ๋ ๋ถ๋ถ๋ ์์๋ค.
๋ฌด์๋ณด๋ค ๊ฐ์ข์์ ์ด๋ก ์์ฃผ์ ๊ฐ๋ ๋ ๋ค๋ฃจ์ง๋ง ์ค๋ฌด์ ์ธ ๋ถ๋ถ์ ๊ธฐ๋ฅ์ ์ฐ์ ์ ์ผ๋ก ๊ฐ์กฐํ์ฌ
์๋ ค์ฃผ๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ์ ๋ค์ด ๋ถ๋ช ๋์์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐ์ด๋ ๋ค.