ChatGPT4でも教えてくれない?Power Queryのクエリの追加とSQLのUnionの違い
PowerQueryのクエリーの追加機能
PowerQueryって便利で色々活用できているのですが、ふと『クエリの追加』ってSQLで言う何だったっけ?が気になりまして色々調べてみました。
挙動としては、2つ以上のテーブル(PowerQueryではクエリ)を縦に結合するのでUNIONかなと言うイメージなのですが、微妙に細かい差分があるので厄介です。
Power query クエリの追加 SQL UNION 違い
ここはGoogle先生に "Power query クエリの追加 SQL UNION 違い"を教えをご依頼してみましたが、なんと!まともな答えが返ってこない。多分、query とクエリと言う検索フレーズがごちゃごちゃしてしまう事が原因なのかもしれません。
BING Searchで検索してみたのですが、こちらもBINGOな答えは返ってきません。
GPT4だったら何とかなるはず!
と思って、Bing Search チャット機能を使いましたが…
Microsoft製品のQAなんだから、ちゃんとしっかり回答してくれ!と思ったのですが、意外に回答してくれません。詳しくないのか、誰も興味を持たないのか…
Power Queryにおけるクエリの追加の挙動
仕方がないので、自分でデータを作って挙動をテストしてみました。
結論的としては、
- 2つ(以上)のシートを上下に並べる
- 重複行があっても気にせず並べる
- 同名の列が存在しない場合は、null(値無し)になるが結合する事が出来る
と言うイメージになりそうです。
SQLのUNION
SQLのUNIONは2つのクエリ結果を縦に結合する事が出来ます。
例えば、SQL Serverで、adventureworskのDBを使って、下のような2つのクエリ
SELECT [ProductID]
,[Name]
,[ProductNumber]
,[StandardCost]
,[ListPrice]
,[Size]
FROM [AdventureWorks2019].[Production].[Product]
Where [Size]='42'
と
SELECT [ProductID]
,[Name]
,[ProductNumber]
,[StandardCost]
,[ListPrice]
,[Size]
FROM [AdventureWorks2019].[Production].[Product]
Where [Size]='48'
をUNIONして、下のような感じで2つのクエリ結果を縦に結合する事ができます
また、片方のクエリ内の一部の列を削除してしまうと下のようにエラーを返します。
UNION 演算子、INTERSECT 演算子または EXCEPT 演算子を使用して組み合わされたすべてのクエリには、クエリの対象となるリスト内の式と同じ数の式を含める必要があります。
また、この演算子には、UNION/UNION ALLと言う物があり、UNIONだけだと重複行をマージしてしまいます。(これはこれで便利なのですが)
まとめ
- Power Queryにおけるクエリのマージは複数のシートを上下に並べる(結合する)機能
- SQLのUNION ALLに似た挙動を取る
- 列名が一致しなくてもSQLのようにエラーにならない、その代わり、NULLになった状態で結合される
事が分かりました。