INERT / UPDATE / DELETE MYSQL์์ ์ง์ํ๋ ์ปฌ๋ผ ํ์
(1) Numeric Type INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT Data and Time type DATE, DATETIME< TIMESTAMP, TIME, YEAR String Type CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM, SET JSON type ๋ค์ํ JSON ์กฐ์ํจ์๋ฅผ ์ ๊ณตํจ Spatial type ์๋์ ๊ฒฝ๋๋ฅผ ์ค์ฌ์ผ๋กํ ์์น ๊ด๋ จ ํ์
INSERT create table prod.vital(
user_id int not null ,
vital_id int primary key ,
date timestamp not null ,
weight int not null
);
create table prod.alert (
alert_id int primary key ,
vital_id int,
alert_type varchar(32),
date timestamp,
user_id int
);
๋ ์ฝ๋ ์ถ๊ฐํด๋ณด๊ธฐ insert into prod.vital(user_id, vital_id, date, weight) values(100, 1, '2020-01-01',75);
...
DELETE ์กฐ๊ฑด์ ๊ธฐ๋ฐ์ผ๋ก ํ
์ด๋ธ์์ ๋ ์ฝ๋ ์ญ์ ํน์ ๋ชจ๋ ๋ ์ฝ๋ ์ญ์ ํ์์ ๊ฒฝ์ฐ์๋ ํ
์ด๋ธ์ ๊ณ์ ์กด์ฌํ๋ค. DELETE FROM vs TRUNCATE ์ฐจ์ด์ ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํ๋ค TRUNCATE๋ ์กฐ๊ฑด ์์ด ๋ชจ๋ ๋ ์ฝ๋ ์ญ์ / ์๋๊ฐ ๋น ๋ฅธ ๋์ ํธ๋์ญ์
์ฌ์ฉ์ ๋กค๋ฐฑ ๋ถ๊ฐ DELETE FROM prod.vital where weight <= 0;
DELETE FROM prod.vital
UPDATE ์กฐ๊ฑด์ ๊ธฐ๋ฐ์ผ๋ก ํ
์ด๋ธ์์ ํน์ ๋ ์ฝ๋์ ํ๋ ๊ฐ ์์ ๊ฐ๋ฅ JOIN ์ด๋? SQL ์กฐ์ธ์ ๋ ๊ฐ ์ด์์ ํ
์ด๋ธ๋ค์ ๊ณตํต ํ๋๋ฅผ ๊ฐ์ง๊ณ ํตํฉ ์คํ ์คํค๋ง๋ก ๊ตฌ์ฑ๋ ํ
์ด๋ธ๋ค๋ก ๋ถ์ฐ๋์ด ์๋ ์ ๋ณด๋ฅผ ํตํฉํ๋๋ฐ ์ฌ์ฉ JOIN์ ๊ฒฐ๊ณผ๋ก ์์ชฝ์ ํ๋๋ฅผ ๋ชจ๋ ๊ฐ์ง ์๋ก์ด ํ
์ด๋ธ์ด ๋ง๋ค์ด์ง ์กฐ์ธ์ ๋ฐฉ์์ ๋ฐ๋ผ ๋๊ฐ์ง๊ฐ ๋ฌ๋ผ์ง๋ค. ์ด๋ค ๋ ์ฝ๋๋ค์ด ์ ํ๋๋์ง? ์ด๋ค ํ๋๋ค์ด ์ฑ์์ง๋์ง? JOIN ๋ฌธ๋ฒ SELECT A.*, B.*
FROM raw_data table A
__ JOIN raw_data.table2 B ON A.key1 = B.key1 and A.key2 = B.key2
where A.ts >= '2019-01-01';
JOIN์ ๊ณ ๋ คํด์ผ ํ ์ ๋จผ์ ์ค๋ณต ๋ ์ฝ๋๊ฐ ์๊ณ ๊ธฐ๋ณธํค์ ์ ์ผ์ฑ์ด ๋ณด์ฅ๋จ์ ์ฒดํฌํด์ผํ๋ค ์กฐ์ธํ๋ ํ
์ด๋ธ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ช
ํํ๊ฒ ์ ์ One to One ์์ ํ one to one : session & session_channel ํ์ชฝ์ด ๋ถ๋ถ์งํฉ์ด ๋๋ one to one Ont to Many(order vs order_items) ํ๋์ ์ฃผ๋ฌธ์๋ ์ฌ๋ฌ๊ฐ์ ์ํ ์ด ๊ฒฝ์ฐ ์ค๋ณต์ด ๋ ํฐ ๋ฌธ์ ๊ฐ๋จ -> ์ฆํญ! Many to One ๋ฐฉํฅ๋ง ๋ฐ๊พธ๋ง one to many๋ก ๋ณด๋๊ฒ๊ณผ ์ฌ์ค์ ๋์ผ Many to many ์ด๋ ํ
์ด๋ธ์ ๋ฒ ์ด์ค๋ก ์ก์์ง ๊ฒฐ์ ํด์ผํจ JOIN์ ์ข
๋ฅ FULL OUTER ์กฐ์ธ > mysql์ ์ด๋ฅผ ์ง์ํ์ง ์์ INNER ์กฐ์ธ ์์ชฝ ํ
์ด๋ธ์์ ๋งค์น๊ฐ ๋๋ ๋ ์ฝ๋๋ค๋ง ๋ฆฌํดํจ ์์ชฝ ํ
์ด๋ธ์ ํ๋๊ฐ ๋ชจ๋ ์ฑ์์ง ์ํ๋ก ๋ฆฌํด๋จ select * from prod.vital v
join prod.alert a on v.vital_id = a.vital_id;
FULL ์กฐ์ธ ์ผ์ชฝ ํ
์ด๋ธ๊ณผ ์ค๋ฅธ์ชฝ ํ
์ด๋ธ์ ๋ชจ๋ ๋ ์ฝ๋๋ค์ ๋ฆฌํดํจ ๋งค์นญ๋๋ ๊ฒฝ์ฐ์๋ง ์์ชฝ ํ
์ด๋ธ๋ค์ ๋ชจ๋ ํ๋๋ค์ด ์ฑ์์ง ์ํ๋ก ๋ฆฌํด๋จ select * from prod.vital v
LEFT join prod.alert a on v.vital_id = a.vital_id;
UNION
select * from prod.vital v
RIGHT join prod.alert a on v.vital_id = a.vital_id;
CROSS ์กฐ์ธ ์ผ์ชฝ ํ
์ด๋ธ๊ณผ ์ค๋ฅธ์ชฝ ํ
์ด๋ธ์ ๋ชจ๋ ๋ ์ฝ๋๋ค์ ์กฐํฉ์ ๋ฆฌํดํจ select * from prod.vital v cross join prod.alert a
self ์กฐ์ธ ๋์ผํ ํ
์ด๋ธ์ alias๋ฅผ ๋ฌ๋ฆฌํด์ ์๊ธฐ ์์ ๊ณผ ์กฐ์ธ select * from prod.vital v1
join prod.vital v2 on v1.vital_id = v2.vital_id;