[TIL] W2D4

stella·2021년 8월 15일
0

DML

select, insert,update,delete 가 있으며 레코드를 조작하는 것이다.

각각의 문법들이 항상 헷갈렸는데 다시 공부해봐서 좋았다..

insert

< 테이블에 필드 순서와 값이 들어가는 순서가 같을때>

insert into (데이터베이스 이름.테이블이름) values(값1,값2,값3..)

<테이블 필드에 맞춰서 입력>

insert into (데이터베이스 이름.테이블이름)(필드1, 필드2, 필드3,...) values(값1,값2,값3..)

pk의 경우 유일성이 보장되어야해서 pk 필드에 같은 값을 넣으려고 하면 오류가 발생한다!!

delete

<모든레코드 삭제>

delete from (테이블 이름)

<조건에 맞는 레코드 삭제>

delete from (테이블 이름) where

delete from vs trucate

둘다 테이블은 남아있고 모든레코드를 삭제 할 수 있지만
trucate은 속도가 빠르지만 트랜잭션시 롤백이 불가하다

내가 찾아본 결과 트랜잭션은 COMMIT이나 ROLLBACK 명령어가 실행되어야 종료가 이루어진다. 따라서 여러개 DML이 하나의 트랜잭션이라서 커밋과 롤백이 가능하고 하나의ddl이 하나의 트랜잭션이므로 autocommit으로 인해 롤백이 불가하고 거기서 작업이 끝남

update

update(테이블 이름)
set weight=92
where(조건)

  • 주로 where 조건에서 pk값으로 레코드를 찾아 update를 시켜준다!!

type

numeric type

돈에 대한거 decimal
double(스토리지가 더 차지, 자세하게)vs float

date,time

timestamp를 보통 많이 씀

String

json

spatial

  • 위도 경도

(지원하지 않은 곳이 많을 수 있다)

JOIN

두개 이상의 테이블들을 공통 필드를 가지고 통합하는 것으로
양쪽의 필드를 모두 가진 테이블이 만들어진다!!
조인에서 헷갈렸던것이 양쪽 테이블이 다 만들어지는점(?)이다

SELECT A.*, B.*
FROM raw_data.table1 A
____(조인 이름 default->inner조인) JOIN raw_data.table2 B ON A.key1 = B.key1 and A.key2 = B.key2
WHERE A.ts >= '2019-01-01';
  • 중복레코드가 있는지 확인해야하고, pk 유일성 보장되어야 한다.
  • 조인하는 테이블들간의 관계를 명확하게 정의(one to one,one to many,manyto one, many to many)

inner join(교집합)

  • 양쪽테이블에서 공통된 레코드들만 return되고 필드가 모두 채워진 상태로 나타난다.

<실습>

SELECT * FROM prod.vital v
JOIN prod.alert a ON v.vital_id = a.vital_id;

left join(왼쪽 테이블 다 적용되어 조인)

  • 왼쪽 테이블은 모든 레코드, 오른쪽 테이블은 공통된 레코드만 return한다.
  • FROM~있는 테이블이 왼쪽테이블이다!

<실습>

SELECT * FROM prod.vital v
LEFT JOIN prod.alert a ON v.vital_id = a.vital_id;

full join

  • 왼쪽테이블과 오른쪽테이블의 모든 레코드들을 return한다.

<실습>

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 join

  • 모든 조합에 대해 출력해준다.
SELECT * FROM prod.vital v CROSS JOIN prod.alert a;

self join

  • 자기 자신과 조인

<실습>

SELECT * FROM prod.vital v1
JOIN prod.vital v2 ON v1.vital_id = v2.vital_id;

profile
뚠뚠뚠..

0개의 댓글