[TIL] W2D4


DML


select、insert、update、deleteがあり、レコードを操作します.
どの文法もいつも混同されていて、また勉強し直してくれて嬉しいです.

insert


<フィールドの順序がテーブル内の値の順序と同じである場合>
INSERT INTO(データベース名.テーブル名)値(値1、値2、値3...)
<表フィールドに従って入力>
INSERT INTO(データベース名.テーブル名)(フィールド1、フィールド2、フィールド3、...)値(値1、値2、値3...)
pkの場合、一意性を保証する必要があるため、pkフィールドに同じ値を入れようとするとエラーが発生します!!

delete


<すべてのレコードを削除>
delete from(テーブル名)
<該当レコードの削除>
delete from(テーブル名)where

delete from vs trucate


両方のテーブルは保持され、すべてのレコードを削除できます.
trucateは高速ですが、トランザクション時にロールバックできません.
調べてみると、トランザクションはCOMMITまたはROLLBACKコマンドの下でのみ実行できます.したがって、複数のDMLはトランザクションであり、コミットおよびロールバックが可能であり、1つのddlはトランザクションであるため、autocommitはロールバックできず、操作を終了します.

update


update(テーブル名)
set weight=92
where(条件)
  • 週間、ここではpk値でレコードを検索して更新します!
  • type


    numeric type


    しょうすう
    double(より高い、より詳細)vs float

    date,time


    タイムスタンプは通常多く使用されます

    String


    json


    spatial

  • 緯度経度
  • (サポートされていないところが多いかもしれません)

    JOIN


    2つ以上のテーブルを1つの共通フィールドに結合します.
    2つのフィールドを持つテーブルが作成されます!!
    連結で紛らわしいのは、両方のテーブルができていること(?)はい.
    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の一意性を保証します.
  • 接続
  • のテーブル間の関係(一対一、一対多、manyto一、多対多)
  • を明確に定義する.

    inner join(交差)

  • の2つのテーブルでは、共通レコードのみが返され、フィールドが入力されています.
  • <実習>
    SELECT * FROM prod.vital v
    JOIN prod.alert a ON v.vital_id = a.vital_id;

    left join(左のテーブルは適用され結合されています)

  • 左のテーブルはすべてのレコードを返し、右のテーブルは共通のレコードのみを返します.
  • FROM~があるテーブルは左のテーブル!
  • <実習>
    SELECT * FROM prod.vital v
    LEFT JOIN prod.alert a ON v.vital_id = a.vital_id;

    full join


    は、
  • の左テーブルと右テーブルのすべてのレコードを返します.
  • <実習>
    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;