HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🛁
공부기록
/
🧑🏻‍💻
TIL
/
TIL - 7

TIL - 7

태그
DB
날짜
Mar 31, 2022
속성

INERT / UPDATE / DELETE

MYSQL에서 지원하는 컬럼 타입 (1)

Numeric Type

  • INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT
  • DECIMAL, NUMBERIC
  • FLOAT, DOUBLE, BIT

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의 종류

  • 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;