2022년 3월 31일 TIL

1978 단어 mysqlTILsqlDMLDML

MySQL 컬럼 타입

Numeric Type

정수형: DECIMAL, NUMERIC
실수형: FLOAT, DOUBLE, BIT(DOUBLE이 표현할 수 있는 범위가 넓다)

String Type

CHAR, VARCHAR: 크기 제한이 있다.
TEXT: 정말 큰 문자열의 경우에 사용

INSERT

INSERT INTO prod.vital(user_id, vital_id, date, weight) VALUES(100, 1, '2020-01-01', 75);
INSERT INTO prod.vital VALUES(100, 1, '2020-01-01', 75);
  • 위의 두 표현 모두 동일한 표현이다. 만약 설정된 필드 순서대로 입력할 경우 insert문에서 필드 명시 부분은 생략할 수 있다.
  • 만약 primary key가 겹치는 insert문의 경우 데이터가 입력되지 않는다.

DELETE

  • 조건을 기반으로 데이터를 삭제한다.
  • 참고) MySQL workbench의 경우 safe update모드가 설정되어 있어 PK를 이용하지 않는 삭제를 막고 있다.

TRUNCATE

  • 조건 없이 모든 레코드를 삭제한다.
  • 속도가 빠르지만 롤백을 할 수 없다.

UPDATE

UPDATE prod.vital SET weight = 92 WHERE vital_id = 4;

조건에 따라 컬럼의 값을 업데이트 한다.

JOIN

  • 두 개 이상의 테이블들의 공통 필드를 가지고 통합한다. JOIN의 결과 양쪽의 필드를 모두 가진 새로운 테이블을 만든다.
  • PK의 유일성이 보장되는지 확인하고 테이블 관계에 따른 중복 데이터를 주의하라!

(INNER) JOIN

  • 양쪽 테이블에서 매치가 되는 레코드들만 리턴한다.
  • 양쪽 테이블의 필드가 모두 채워진 상태로 리턴된다.

LEFT JOIN, RIGHT JOIN

  • 기준은 from을 이용해서 잡는다.
  • 기준 테이블의 모든 레코드들을 리턴한다.
  • 기준이 아닌 테이블의 필드는 기준 테이블의 레코드와 매칭되는 경우에만 채워진 상태로 리턴된다.

FULL JOIN

  • 합집합으로 생각하자.
  • MySQL에서는 FULL JOIN을 지원하지 않는다.
  • 따라서 LEFT JOIN과 RIGHT JOIN을 UNION 한다.
(LEFT JOIN)

UNION

(RIGHT JOIN);

UNION, UNION ALL

UNION: 중복을 제거한다.
UNION ALL: 중복을 제거하지 않는다.

CROSS JOIN

SELECT * FROM vital v CROSS JOIN alert a;

테이블들의 모든 레코드들의 조합을 반환한다.

A 테이블의 레코드 a개, B 테이블의 레코드 b개
A 테이블과 B 테이블을 CROSS JOIN 하면 a*b개의 레코드 반환

SELF JOIN

alias를 달리해서 자기 자신과 join한다.

좋은 웹페이지 즐겨찾기