INSERT INTO ๋ฌธ์ ์ฌ์ฉํ์ฌ ํ ์ด๋ธ์ ์๋ก์ด ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
-- 1. ํ๋ ์ด๋ฆ์ ๋ฃ์ด์ค๋ค.
INSERT INTO ํ
์ด๋ธ์ด๋ฆ(ํ๋์ด๋ฆ1, ํ๋์ด๋ฆ2, ํ๋์ด๋ฆ3, ...) VALUES (๋ฐ์ดํฐ๊ฐ1, ๋ฐ์ดํฐ๊ฐ2, ๋ฐ์ดํฐ๊ฐ3, ...)
-- 2. ํ๋ ์ด๋ฆ์ ์๋ต.
INSERT INTO ํ
์ด๋ธ์ด๋ฆ
VALUES (๋ฐ์ดํฐ๊ฐ1, ๋ฐ์ดํฐ๊ฐ2, ๋ฐ์ดํฐ๊ฐ3, ...)
-- ํ๋์ ์ด๋ฆ์ ์๋ตํ ์ ์์ผ๋ฉฐ, ์ด ๊ฒฝ์ฐ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์คํค๋ง์ ๊ฐ์ ์์๋๋ก ํ๋์ ๊ฐ์ด ์๋ ๋์
2์ ๋ฐฉ๋ฒ์ ๊ฒฝ์ฐ ์๋ตํ ์ ์๋ ํ๋๋ 3๊ฐ์ง๊ฐ ์๋ค.
- NULL์ ์ ์ฅํ ์ ์๋๋ก ์ค์ ๋ ํ๋
- DEFAULT ์ ์ฝ ์กฐ๊ฑด์ด ์ค์ ๋ ํ๋
- AUTO_INCREMENT ํค์๋๊ฐ ์ค์ ๋ ํ๋
-- prod.vital ์์ฑ
create table prod.vital(
user_id int not null,
vital_id int primary key,
date timestamp,
weight int not null
);
-- prod.alert ์์ฑ
create table prod.alert(
alert_id int primary key,
vital_id int,
alert_type varchar(32),
date timestamp,
user_id int
);
-- INSERT ์์
insert into prod.vital(user_id,vital_id,date,weight) values(100,4,'2021-01-01',100);
INSERT INTO prod.alert VALUES(1, 4, 'WeightIncrease', '2020-01-02', 101);
INSERT INTO prod.alert VALUES(2, NULL, 'MissingVital', '2020-01-04', 100);
INSERT INTO prod.alert VALUES(3, NULL, 'MissingVital', '2020-01-04', 101);
SELECT * FROM prod.alert WHERE vital_id = NULL; -- = ์ผ๋ก ๋น๊ตํ๋ฉด ์ฐพ์ ์๊ฐ ์๋ค.
SELECT * FROM prod.alert WHERE vital_id IS NULL; -- is NULL ๋ก ๋น๊ตํด์ผ ์ฐพ์ ์ ์๋ค.
SELECT * FROM prod.alert WHERE vital_id != NULL; -- != ๋ null ๋ก ๋น๊ต๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
SELECT * FROM prod.alert WHERE vital_id IS NOT NULL;
์กฐ๊ฑด์ ๊ธฐ๋ฐ์ผ๋ก ํ ์ด๋ธ์์ ๋ ์ฝ๋ ์ญ์ ํน์ ๋ชจ๋ ๋ ์ฝ๋ ์ญ์ ํ๋ค.
-- WHERE ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ ์ฝ๋๋ง์ ์ญ์
DELETE FROM ํ
์ด๋ธ์ด๋ฆ
WHERE ํ๋์ด๋ฆ=๋ฐ์ดํฐ๊ฐ;
-- ํด๋น ํ
์ด๋ธ์ ์ ์ฅ๋ ๋ชจ๋ ๋ฐ์ดํฐ ์ญ์
DELETE FROM ํ
์ด๋ธ์ด๋ฆ;
-- DELETE ์์
SELECT * FROM prod.vital;
DELETE FROM prod.vital WHERE weight <= 0;
DELETE FROM prod.vital WHERE vital_id = 5;
SELECT * FROM prod.vital;
DELETE FROM prod.vital;
SELECT * FROM prod.vital;
์กฐ๊ฑด์ ๊ธฐ๋ฐ์ผ๋ก ํ ์ด๋ธ์์ ํน์ ๋ ์ฝ๋(๋ค)์ ํ๋ ๊ฐ ์์ ๊ฐ๋ฅํ๋ค.
UPDATE ํ
์ด๋ธ์ด๋ฆ
SET ํ๋์ด๋ฆ1=๋ฐ์ดํฐ๊ฐ1, ํ๋์ด๋ฆ2=๋ฐ์ดํฐ๊ฐ2, ...
WHERE ํ๋์ด๋ฆ=๋ฐ์ดํฐ๊ฐ
-- UPDATE ์์
update prod.vital set weight=1000 where vital_id = 4;
-- vital_id๊ฐ 4์ธ ๊ฐ์ weight ๊ฐ์ ์์ ํ๋ค.
JOIN์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ ์ฌ๋ฌ ํ ์ด๋ธ์์ ๊ฐ์ ธ์จ ๋ ์ฝ๋๋ฅผ ์กฐํฉํ์ฌ ํ๋์ ํ ์ด๋ธ์ด๋ ๊ฒฐ๊ณผ ์งํฉ์ผ๋ก ํํํด ์ค๋ค.
์ฃผ๋ก SELECT๋ฌธ๊ณผ ํจ๊ป ์ฐ์ธ๋ค.

INNER JOIN์ ON ์ ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ, ON ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฐ์ดํฐ๋ง์ ๊ฐ์ ธ์ต๋๋ค.
์์ชฝ ํ ์ด๋ธ์์ ๋งค์น๊ฐ ๋๋ ๋ ์ฝ๋๋ค๋ง ๋ฆฌํดํ๋ค.
์์ชฝ ํ ์ด๋ธ์ ํ๋๊ฐ ๋ชจ๋ ์ฑ์์ง ์ํ๋ก ๋ฆฌํด๋๋ค.
FROM ์ฒซ๋ฒ์งธ ํ
์ด๋ธ์ด๋ฆ
INNER JOIN ๋๋ฒ์งธํ
์ด๋ธ์ด๋ฆ
ON ์กฐ๊ฑด
FROM ์ฒซ๋ฒ์งธ ํ
์ด๋ธ์ด๋ฆ
JOIN ๋๋ฒ์งธํ
์ด๋ธ์ด๋ฆ
ON ์กฐ๊ฑด
-- inner join
select * from prod.vital v
join prod.alert a on a.vital_id = v.vital_id;
-- ๊ฐ์ด ์๋ ๊ฒ๋ค๋ง์ ์ถ๋ ฅํ๋ค. (๊ณตํต๋ ๋ถ๋ถ)
LEFT JOIN์ ์ฒซ ๋ฒ์งธ ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก, ๋ ๋ฒ์งธ ํ ์ด๋ธ์ ์กฐํฉํ๋ JOIN์ด๋ค.
์ผ์ชฝ ํ ์ด๋ธ(Base)์ ๋ชจ๋ ๋ ์ฝ๋๋ค์ ๋ฆฌํดํ๋ค.
์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ํ๋๋ ์ผ์ชฝ ๋ ์ฝ๋์ ๋งค์นญ๋๋ ๊ฒฝ์ฐ์๋ง ์ฑ์์ง ์ํ๋ก ๋ฆฌํด๋๋ค.
FROM ์ฒซ๋ฒ์งธํ
์ด๋ธ์ด๋ฆ
LEFT JOIN ๋๋ฒ์งธํ
์ด๋ธ์ด๋ฆ
ON ์กฐ๊ฑด
-- left join
select * from prod.vital v
left join prod.alert a on a.vital_id = v.vital_id; -- inner์์ ์ฐจ์ด์ ์ ์ค๋ฅธ์ชฝ์ ํด๋นํ๋ ์ชฝ๋ค์ null ๊ฐ์ผ๋ก ์ฑ์์ ธ์ ๋์จ๋ค.
์ผ์ชฝ ํ ์ด๋ธ๊ณผ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ๋ ์ฝ๋๋ค์ ๋ฆฌํดํจ
๋งค์นญ๋๋ ๊ฒฝ์ฐ์๋ง ์์ชฝ ํ ์ด๋ธ๋ค์ ๋ชจ๋ ํ๋๋ค์ด ์ฑ์์ง ์ํ๋ก ๋ฆฌํด๋๋ค.
-- outter join => ์ด 6๊ฐ์ ๊ฐ์ return ํ๋ค.
select * from prod.vital v
left join prod.alert a on a.vital_id = v.vital_id
union -- union all ์ ํ๊ฒ๋๋ฉด ์ค๋ณต๋๋๊ฒ ๊น์ง ๊ฐ์ด ์ถ๋ ฅํ๋ค.
select * from prod.vital v
right join prod.alert a on a.vital_id = v.vital_id;

์ผ์ชฝ ํ ์ด๋ธ๊ณผ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ๋ ์ฝ๋๋ค์ ์กฐํฉ์ ๋ฆฌํดํจ
-- cross join => ๊ฐ๊ฐ 3, 4๊ฐ์ ๋ ์ฝ๋๋ฅผ ๊ฐ์ง๊ณ ์๋๋ฐ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์กฐํฉํ์ฌ ์ถ๋ ฅํ๋ค. (3*4 = 12 ๊ฐ)
select * from prod.vital v cross join prod.alert a;
๋์ผํ ํ ์ด๋ธ์ alias(๋ณ๋ช )๋ฅผ ๋ฌ๋ฆฌํด์ ์๊ธฐ ์์ ๊ณผ ์กฐ์ธํ๋ค.
-- self join
select * from prod.vital v
join prod.vital v2 on v.vital_id = v2.vital_id;