MW211 EXIT

devlog
SQL/FULL JOINの並列と直列
2023年03月29日
┌──┬───────────────────────────────────┐
│並列│SELECT COUNT(*)                                                       │
│    │    FROM 表1                                                          │
│    │        FULL JOIN 表2                                                 │
│    │          ON 表2.キー = 表1.キー                                      │
│    │        FULL JOIN 表3                                                 │
│    │          ON 表3.キー = 表1.キー                                      │
├──┼───────────────────────────────────┤
│直列│SELECT COUNT(*)                                                       │
│    │    FROM 表1                                                          │
│    │        FULL JOIN 表2                                                 │
│    │            FULL JOIN 表3                                             │
│    │              ON 表3.キー = 表2.キー                                  │
│    │          ON 表2.キー = 表1.キー                                      │
└──┴───────────────────────────────────┘
FULL JOINで2つ以上の表を上記のように、
並列につないだ場合と直列につないだ場合の違いについて。

以下のように違ってくる。
┌──┬───────────────────────────────────┐
│並列│WITH [表1] AS (                                                       │
│    │         SELECT *                                                     │
│    │             FROM (                                                   │
│    │                 VALUES (1, 'A'),                                     │
│    │                        (2, 'B')                                      │
│    │             ) AS [表]([キー], [値])                                  │
│    │     ),                                                               │
│    │     [表2] AS (                                                       │
│    │         SELECT *                                                     │
│    │             FROM (                                                   │
│    │                 VALUES (3, 'C'),                                     │
│    │                        (4, 'D')                                      │
│    │             ) AS [表]([キー], [値])                                  │
│    │     ),                                                               │
│    │     [表3] AS (                                                       │
│    │         SELECT *                                                     │
│    │             FROM (                                                   │
│    │                 VALUES (1, 'E'),                                     │
│    │                        (2, 'F')                                      │
│    │             ) AS [表]([キー], [値])                                  │
│    │     )                                                                │
│    │SELECT *                                                              │
│    │    FROM [表1]                                                        │
│    │      FULL JOIN [表2]                                                 │
│    │        ON [表2].[キー] = [表1].[キー]                                │
│    │      FULL JOIN [表3]                                                 │
│    │        ON [表3].[キー] = [表1].[キー]                                │
│    │--→4件                                                               │
├──┼───────────────────────────────────┤
│直列│WITH [表1] AS (                                                       │
│    │         SELECT *                                                     │
│    │             FROM (                                                   │
│    │                 VALUES (1, 'A'),                                     │
│    │                        (2, 'B')                                      │
│    │             ) AS [表]([キー], [値])                                  │
│    │     ),                                                               │
│    │     [表2] AS (                                                       │
│    │         SELECT *                                                     │
│    │             FROM (                                                   │
│    │                 VALUES (3, 'C'),                                     │
│    │                        (4, 'D')                                      │
│    │             ) AS [表]([キー], [値])                                  │
│    │     ),                                                               │
│    │     [表3] AS (                                                       │
│    │         SELECT *                                                     │
│    │             FROM (                                                   │
│    │                 VALUES (1, 'E'),                                     │
│    │                        (2, 'F')                                      │
│    │             ) AS [表]([キー], [値])                                  │
│    │     )                                                                │
│    │SELECT *                                                              │
│    │    FROM [表1]                                                        │
│    │      FULL JOIN [表2]                                                 │
│    │          FULL JOIN [表3]                                             │
│    │            ON [表3].[キー] = [表2].[キー]                            │
│    │        ON [表2].[キー] = [表1].[キー]                                │
│    │--→6件                                                               │
└──┴───────────────────────────────────┘
分類:SQL