sql >> データベース >  >> RDS >> Sqlserver

マージとマージ結合はSQLServerで同じですか?

    マージ はDMLステートメント(データ操作言語)です。
    UPSERT(更新-挿入)とも呼ばれます。
    ソース(テーブル/ビュー/クエリ)をターゲット(テーブル/更新可能なビュー)に一致させようとします。定義した条件を設定し、一致した結果に基づいて、ターゲットテーブルに/中/の行を挿入/更新/削除します。
    MERGE(Transact-SQL)

    create table src (i int, j int);
    create table trg (i int, j int);
    
    insert into src values (1,1),(2,2),(3,3);
    insert into trg values (2,20),(3,30),(4,40);
    
    merge into  trg
    using       src
    on          src.i = trg.i
    when not matched by target then insert (i,j) values (src.i,src.j)
    when not matched by source then update set trg.j = -1
    when matched then update set trg.j = trg.j + src.j
    ;
    
    select * from trg order by i
    
    +---+----+
    | i | j  |
    +---+----+
    | 1 | 1  |
    +---+----+
    | 2 | 22 |
    +---+----+
    | 3 | 33 |
    +---+----+
    | 4 | -1 |
    +---+----+
    

    MERGE JOIN は結合アルゴリズム(HASHJOINやNESTEDLOOPSなど)です。
    これは、最初に結合条件に従って両方のデータセットを並べ替え(インデックスが存在するためにすでに並べ替えられている可能性があります)、次に並べ替えられたデータセットをトラバースして一致を見つけることに基づいています。

    create table t1 (i int)
    create table t2 (i int)
    
    select * from t1 join t2 on t1.i = t2.i option (merge join)
    

    create table t1 (i int primary key)
    create table t2 (i int primary key)
    
    select * from t1 join t2 on t1.i = t2.i option (merge join)
    

    SQL Serverでは、主キーはクラスター化インデックス構造を意味します。これは、テーブルが主キーで並べ替えられたBツリーとして格納されることを意味します。

    マージ結合について




    1. ORA-00904 ::無効な識別子Oraclesql

    2. Oracleストアドプロシージャのテーブル変数

    3. MySQLのSELECTが機能しない

    4. PGエラーはサーバーに接続できませんでした:接続が拒否されましたサーバーはポート5432で実行されていますか?