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의 종류
INNER 조인
LEFT 조인
RIGHT 조인
FULL OUTER 조인 > mysql은 이를 지원하지 않음
SELF 조인
CROSS 조인
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;