1. ์ค๋์ ํ์ต
- '๋ฐ์ดํฐ ๋ฆฌํฐ๋ฌ์' ๊ฐ์ ์๊ฐ
- ์ฌ์ ์บ ํ ๋ ๋ชปํ๋ ํ์คํธ>SQL ๊ฑท๊ธฐ๋ฐ 1~5
- SQL ๋ผ์ด๋ธ ์ธ์
- ์ง๋ฌด ์ธ์
2. ํ์ต ๋ด์ฉ ์ ๋ฆฌ
- ๋ฐ์ดํฐ ๋ฆฌํฐ๋ฌ์
1. ๊ฒฐ๊ณผ์ ๊ฒฐ๋ก ์ ์ฐจ์ด
- ๊ฒฐ๊ณผ: ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ๋ถ์, ๋ชจ๋ธ๋ง ํ์ ์ป์ด์ง ๊ตฌ์ฒด์ ์ธ ๋ฐ์ดํฐ์ ์ถ๋ ฅ
์ซ์, ํต๊ณ, ๊ทธ๋ํผ, ์ฐจํธ ๋ฑ์ ํํ
- ๊ฒฐ๋ก : ๋ถ์๋ ๋ฐ์ดํฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก ์ด๋์ด๋ธ ์๋ฏธ๋ ํต์ฐฐ
๋ฐ์ดํฐ์ ๊ธฐ๋ฐํ ํด์, ์ถ๋ก ๋๋ ๊ถ๊ณ ์ฌํญ
*ํ์ ์ด์์ผ๋ก ์์ ์ ํด์์ ์ตํฉํ์ง ์๋๋ก ์ฃผ์
2. ๊ฒฐ๋ก ์ ๋ฆฌ ๋ฐฉ๋ฒ
- ๋ฌธ์ ์ ์, ์งํ ์ค์ ๋น์์ ๊ถ๊ทน์ ๋ชฉ์ ์ ๋ง๊ฒ ์ ๋ฆฌํด์ผ ํจ.
- ๊ฒฐ๋ก ์ ๊ณต์ ํ ๋์, ์ด๋ป๊ฒ ๋ณํํ๊ธธ ์ํ๋์ง ๊ณ ๋ คํด์ผ ํจ.
- ๋จ์ํ๊ณ ์ฝ๊ฒ ์ ๋ฌํด์ผ ํจ.
ใด ํต์ฌ ์งํ ์์ฃผ๋ก, ์งํ๋ฅผ ํด์ํ๋ ๋ฐฉ๋ฒ๋ ์ค๋ช , ์ก์ ์์ดํ ์ ์
- ๋ชจ๋ ๋ด์ฉ์ ๋ด์ง ๋ง๊ณ , ์๋๊ฐ ๊ถ๊ธํด ํ ๋ง ํ ๋ด์ฉ์ ๋ด์์ ํฅ๋ฏธ ์ ๋ฐ (๋ํ ์ผํ ๋ฌธ์๋ ๋ณ๋ ์ค๋น)
- ๋์์(๊ณต์ ๋ฐ๋ ์ฌ๋)์ ํ๋ค์ด ๋ฎ์ ์๊ฐํ ํ์ฉ
3. ๊ฒฐ๋ก ๋ณด๊ณ ์ ํ๋ก์ฐ
1) ์ ์ฒด ๋ด์ฉ์ ํ ๋ฌธ์ฅ์ผ๋ก ์ ๋ฆฌ
2) ํด๋น ๋ณด๊ณ ์์ ๋ฉ์ธ ์ฃผ์
3) ํด๋น ๋ณด๊ณ ์๋ฅผ ์ด ์ด์ ์ ์ํ๋ ๋ณํ
4) ๋ฌธ์ ์ ์ ๋จ๊ณ
5) ํต์ฌ ๋ด์ฉ ์ ๊ฐ
6) ๊ฒฐ๋ก ๋ฐ ์ก์ ์์ดํ
- ์ฌ์ ์บ ํ์ ์๋ SQL ํ์คํธ
1. varchar(n) : ๊ฐ๋ณ ๊ธธ์ด ๋ฌธ์์ด
- ๊ธธ์ด๊ฐ ๋ค์ํ ๊ฐ์ ์ฌ์ฉ
- n ๊ฐ์ด ๋๋ฌด ํฌ๋ฉด ์ค๋ฅ๊ฐ ๋ ์๋ ์์ / ๋๋ฌด ์์ผ๋ฉด ๋ฐ์ดํฐ ์์ค ๊ฐ๋ฅ์ฑ ์์.
- char() : ๊ธธ์ด๊ฐ ๊ณ ์ ๋ ๊ฐ์ ์ฌ์ฉ
<ํ์ฉ>
CREATE TABLE users (
user_id INT,
name VARCHAR(50),
email VARCHAR(100)
);
2. ๋ฐ์ดํฐ ์กฐํ
<์์ฑ ์์>
select ์กฐํํ ์ปฌ๋ผ from ๋ฐ์ดํฐ ๊ฐ์ ธ์ฌ ํ ์ด๋ธ
where : ํน์ ์กฐ๊ฑด์ ๊ฐ ํํฐ๋ง
group by : ๋ฐ์ดํฐ๋ฅผ ๋ฌถ์ด์ ํํํ ๊ธฐ์ค ์ปฌ๋ผ
order by : ๋ถ๋ฌ์จ ๊ฐ ์ ๋ ฌ (defult: ์ฌ๋ฆผ์ฐจ์)
+ desc: ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
limit(n) : ์กฐํํ ๋ฐ์ดํฐ ๊ฐ ์ ํ
- order by์ ํจ๊ป ์ฌ์ฉ๋จ (*๋จ๋ ์ผ๋ก ์ฌ์ฉ์, ๋ฐ์ดํฐ๋ฅผ ๋ ธ์ถํ๋ ๊ธฐ์ค์ ๋ํ ๋ณด์ฅ์ด ์์.)
SELECT
FROM
WHERE
GROUP BY
ORDER BY
LIMIT
3. ๋ฐ์ดํฐ ์ฝ์ (insert into)
: ๋ฐ์ดํฐ ํ ์ด๋ธ์ ์๋ก์ด ํ(row)์ ์ถ๊ฐ
insert into ํ ์ด๋ธ๋ช (์ปฌ๋ผ1, ์ปฌ๋ผ2, ์ปฌ๋ผ3...)
values (๊ฐ1, ๊ฐ2, ๊ฐ3...)
4. ๋ฐ์ดํฐ ๋ณ๊ฒฝ (update)
**where๊ฐ ์์ผ๋ฉด ๋ชจ๋ ํ์ ๊ฐ์ด ๋ณ๊ฒฝ๋จ! ๋์ฐธ์ฌ
UPDATE ํ ์ด๋ธ๋ช
SET ์ปฌ๋ผ1 = ๊ฐ1,
์ปฌ๋ผ2 = ๊ฐ2
WHERE ์กฐ๊ฑด;
5. ๋ฐ์ดํฐ ์ญ์ (delete)
: ๋ฐ์ดํฐ ํ(row)์ ์ญ์
**where๊ฐ ์์ผ๋ฉด ๋ชจ๋ ํ์ ๊ฐ์ด ์ญ์ ๋จ! ๋์ฐธ์ฌ
DELETE FROM ํ ์ด๋ธ๋ช
WHERE ์กฐ๊ฑด;
๊ธฐ๋ณธํค (Primary key)
: ํ ์ด๋ธ ์์์ ๊ฐ ํ์ ์ ์ผํ๊ฒ ์๋ณํ๋ ์ปฌ๋ผ (์ผ๋ จ๋ฒํธ ๊ฐ์!)
- ์ ์ผ์ฑ: ์ค๋ณต๋์ง ์์์ผ ํจ
- not null: ๋น์์ ธ ์์ผ๋ฉด ์ ๋จ
- ์์ ์ฑ: ์ฌ๋งํ๋ฉด ๋ฐ๋์ง ์์์ผ ํจ
primary key ์ปฌ๋ผ
์ธ๋ํค (Foreign key)
: ๋ค๋ฅธ ํ ์ด๋ธ์ ๊ธฐ๋ณธํค๋ฅผ ์ฐธ์กฐํ๋ ์ปฌ๋ผ
FOREIGN KEY (์ปฌ๋ผ๋ช )
REFERENCES ํ ์ด๋ธ(์ปฌ๋ผ)
- SQL ํ์คํธ
// 1. ํ
์ด๋ธ์์ ๋ชจ๋ ์ง์์ ์ด๋ฆ(name)๊ณผ ์ง๊ธ(position)์ ์ ํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์.
// ์ ๋ต
select name,
position
from sparta_employees;
// 2. ํ
์ด๋ธ์์ ์ค๋ณต ์์ด ๋ชจ๋ ์ง๊ธ(position)์ ์ ํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์.
// ์ ๋ต
select distinct position
from sparta_employees;
// 3. ํ
์ด๋ธ์์ ์ฐ๋ด(salary)์ด 40000๊ณผ 60000 ์ฌ์ด์ธ ์ง์๋ค์ ์ ํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์.
// ์ ๋ต
select *
from sparta_employees
where selary between 40000 and 60000;
// 4. ํ
์ด๋ธ์์ ์
์ฌ์ผ(hire_date)์ด 2023๋
1์ 1์ผ ์ด์ ์ธ ๋ชจ๋ ์ง์๋ค์ ์ ํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์.
// ์ ๋ต
select *
from sparta_employees
where hire_date < '2023-01-01';
// 5. products ํ
์ด๋ธ์์ ์ ํ ์ด๋ฆ(product_name)๊ณผ ๊ฐ๊ฒฉ(price)๋ง์ ์ ํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์.
// ์ ๋ต
select produst_name, price
from products;
// 6. products ํ
์ด๋ธ์์ ์ ํ ์ด๋ฆ์ 'ํ๋ก'๊ฐ ํฌํจ๋ ๋ชจ๋ ์ ํ์ ์ ํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์.
// ์ ๋ต
select *
from products
where product_name like '%ํ๋ก%';
// 7. products ํ
์ด๋ธ์์ ์ ํ ์ด๋ฆ์ด '๊ฐค'๋ก ์์ํ๋ ๋ชจ๋ ์ ํ์ ์ ํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์.
// ์ ๋ต
select *
from products
where product_name like '๊ฐค%';
// 8. products ํ
์ด๋ธ์์ ๋ชจ๋ ์ ํ์ ๊ตฌ๋งคํ๊ธฐ ์ํด ํ์ํ ๋์ ๊ณ์ฐํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์.
// ์ ๋ต
select sum(price)
from products;
// 9. orders ํ
์ด๋ธ์์ ์ฃผ๋ฌธ ์๋(amount)์ด 2๊ฐ ์ด์์ธ ์ฃผ๋ฌธ์ ์งํํ ์๋น์์ ID(customer_id)๋ง ์ ํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์!
// ์ ๋ต
select customer_id
from orders
where amount >= 2;
// 10. orders ํ
์ด๋ธ์์ 2023๋
11์ 2์ผ ์ดํ์ ์ฃผ๋ฌธ๋ ์ฃผ๋ฌธ ์๋(amount)์ด 2๊ฐ ์ด์์ธ ์ฃผ๋ฌธ์ ์ ํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์!
// ์ ๋ต
select *
from orders
where order_date > '2023-11-02' and amount >= 2;
// 11. orders ํ
์ด๋ธ์์ ์ฃผ๋ฌธ ์๋์ด 3๊ฐ ๋ฏธ๋ง์ด๋ฉด์ ๋ฐฐ์ก๋น(shipping_fee)๊ฐ 15000์๋ณด๋ค ๋น์ผ ์ฃผ๋ฌธ์ ์ ํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์!
// ์ ๋ต
select *
from orders
where amount<3 and shipping_fee>15000;
// 12. orders ํ
์ด๋ธ์์ ๋ฐฐ์ก๋น๊ฐ ๋์ ๊ธ์ก ์์ผ๋ก ์ ๋ ฌํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์!
// ์ ๋ต
select *
from orders
order by shipping_fee desc;
// 13. sparta_students ํ
์ด๋ธ์์ ๋ชจ๋ ํ์์ ์ด๋ฆ(name)๊ณผ ํธ๋(track)์ ์ ํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์!
// ์ ๋ต
select name, track
from sparta_students;
// 14. sparta_students ํ
์ด๋ธ์์ Unity ํธ๋ ์์์ด ์๋ ํ์๋ค์ ์ ํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์!
//๐์ค๋ต
select *
from sparta_students
where track <> 'Unity'; --๋ฌธ์์ด์ ''
// 15. sparta_students ํ
์ด๋ธ์์ ์
ํ๋
๋(enrollment_year)๊ฐ 2021๋
์ธ ํ์๊ณผ 2023๋
์ธ ํ์์ ์ ํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์!
// ์ ๋ต
select *
from sparta_students
where enrollment_year in (2021, 2023);
// 16. sparta_students ํ
์ด๋ธ์์ Node.js ํธ๋ ์์์ด๊ณ ํ์ ์ด ‘A’์ธ ํ์์ ์
ํ๋
๋๋ฅผ ์ ํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์!
//๐์ค๋ต
select enrollment_year
from sparta_students
where track='Node.js' and grade='A'; --๋ฌธ์์ด์ ''
//17.team_projects ํ
์ด๋ธ์์ AWS ์์ฐ(aws_cost)์ด 40000 ์ด์ ๋ค์ด๊ฐ ํ๋ก์ ํธ๋ค์ ์ด๋ฆ์ ์ ํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์!
// ์ ๋ต
select name
from team_projects
where aws_cost >= 40000;
//18.team_projects ํ
์ด๋ธ์์ 2022๋
์ ์์๋ ํ๋ก์ ํธ๋ฅผ ์ ํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์! ๋จ, start_date < ‘2023-01-01’ ์กฐ๊ฑด์ ์ฌ์ฉํ์ง ๋ง๊ณ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์!
//๐์ค๋ต
select *
from team_projects
where int(date(start_date, '%y')) = 2022;
//๐กํด์ค
select *
from team_projects
where year(start_date) = 2022; --year() ๊ฒฐ๊ณผ ํ์
: int
//19.team_projects ํ
์ด๋ธ์์ ํ์ฌ ์งํ์ค์ธ ํ๋ก์ ํธ๋ฅผ ์ ํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์. ๋จ, ์ง๊ธ ์์ ์ ๋ ์ง๋ฅผ ํ๋์ฝ๋ฉํด์ ์ฟผ๋ฆฌํ์ง ๋ง์์ฃผ์ธ์!
//๐์ค๋ต
//๐กํด์ค
select *
from team_projects
where curdate() between start_date and end_date; --curdate(): ํ์ฌ ๋ ์ง ๋ฐํ
//20.team_projects ํ
์ด๋ธ์์ ๊ฐ ํ๋ก์ ํธ์ ์ง์ ๊ธฐ๊ฐ์ ์ผ ์๋ก ๊ณ์ฐํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์!
//๐์ค๋ต
select date((int(end_date)-int(start_date)) + 1), '%d') as "ํ๋ก์ ํธ ์ง์ ๊ธฐ๊ฐ"
from team_projects
//๐กํด์ค
select name,
datediff(day, start_date, end_date) as working_days --๋ ์ง(์ผ) ์ฐจ์ด ๊ณ์ฐ ํจ์
from team_projects;
<์ค๋ต๋ ธํธ>
8. ์ง๊ณํจ์ ์ฌ์ฉ ์, ์ปฌ๋ผ ์ด๋ฆ์ด ํจ์๋ก ์ถ์ถ -> as ์ฌ์ฉํ๋ฉด ์ข์
14. ๋ฌธ์ ์ฌ์ฉ ์ ์์๋ฐ์ดํ('') ์ฌ์ฉํด์ผ ํจ. ๋์น์ง ๋ง๊ธฐ!
18. date_format('๋ ์ง๊ฐ(๋ฌธ์์ด)' or ์ปฌ๋ผ, '๋ ์ง ์ถ๋ ฅ ํฌ๋งท(๋ฌธ์์ด)') [๊ฒฐ๊ณผ ํ์ : ๋ฌธ์์ด]
*date(): ๋ ์ง/์๊ฐ ๊ฐ์์ ๋ ์ง ๋ฐ์ดํฐ๋ง ์ถ์ถ => ๊ฒฐ๊ณผ ํ์ : date
year('๋ ์ง๊ฐ(๋ฌธ์์ด)' or ์ปฌ๋ผ) [๊ฒฐ๊ณผํ์ : INT]
19. curdate(): ํ์ฌ ๋ ์ง ์ถ๋ ฅ [๊ฒฐ๊ณผ ํ์ : DATE]
now(): ํ์ฌ ๋ ์ฐ/์๊ฐ ์ถ๋ ฅ [๊ฒฐ๊ณผ ํ์ : DATETIME]
20. datediff(datepart, start date, end date) [๊ฒฐ๊ณผ ํ์ : INT]
: dateapart์ ๋ฐ๋ฅธ ์ผ์ ์ฐจ์ด๋ฅผ ๋ฐํ
<ํท๊ฐ๋ ธ๋ ๊ฒ>
- where ์กฐ๊ฑด1 and ์กฐ๊ฑด2
์กฐ๊ฑด ์ฌ๋ฌ ๊ฐ ์ฌ์ฉ ์, and ์ฌ์ฉ
- in(ํฌํจ1, ํฌํจ2)
in์ผ๋ก ํฌํจํ๋ ๊ฐ ์กฐ๊ฑด ๋ฌ ๋ ๊ดํธ๋ก ์ฌ์ฉํด์ผ ํจ.
3. ๋ด์ผ์ ํ์ต
- 10:00 ~ 12:00 SQL ๋ผ์ด๋ธ ์ธ์
- 15:00 ~ 18:00 ์ง๋ฌด ์ธ์
- SQL ๊ฑท๊ธฐ๋ฐ ํ์คํธ ์ด์ด์ ํ๊ธฐ
- ์ํฐํด: ๋ทํ๋ฆญ์ค์ ์๋ง์กด์ ๋ฐ์ดํฐ ๋ถ์์ ์ด๋ป๊ฒ ํ ๊น์?
4. ํํฐ๋ pick | ๋ฐ์ดํฐ ๋ฆฌํฐ๋ฌ์ ๊ด๋ จ ์ฑ ์ถ์ฒ
- ๋น ๋ฐ์ดํฐ ์๋, ์ฑ๊ณผ๋ฅผ ์ด๋์ด ๋ด๋ ๋ฐ์ดํฐ ๋ฌธํด๋ ฅ / ์นด์์๊ธฐ ์์ํค
- ๋ก์ง์ปฌ ์ฝํน / ๋ฐ๋ฃจ์ผ ํ๋์ฝ, ์ค์นด๋ค ๊ฒ์ด์ฝ

