プログラ生活

プログラム初学者のためのポイントを書いていこうと思います。たまに脇道それた記事もありますが、息抜きだとおもって気長にお付き合いください。

【SQL Server(連載)】UNION -41-

www.pon-x.jp

今回はUNIONを紹介します。

UNION

簡単に言うと、行結合です。
2つのテーブルを行方向に結合してあげるためにUNIONを使います。

ためしに、Person.PersonテーブルのLastNameを結合してみます。
ただし、WHERE句でPersonTypeを抽出条件として指定しています。

SELECT LastName FROM Person.Person WHERE PersonType = 'EM'

UNION

SELECT LastName FROM Person.Person WHERE PersonType = 'IN'

f:id:hanabusa-snow:20210102202144p:plain
570件のデータが確認されます。
実は、UNION とだけ指定すると、重複する行は削除されてユニークな値のみが出力されるのです。

UNION ALL

では、重複削除を行わず単純にテーブルを行結合するにはどうすればよいかというと、UNIONのあとにALLを付けます。
こんなかんじです。

SELECT LastName FROM Person.Person WHERE PersonType = 'EM'

UNION ALL

SELECT LastName FROM Person.Person WHERE PersonType = 'IN'

f:id:hanabusa-snow:20210102202654p:plain
18757件と結果が全然違います。

注意

テーブル同士を行結合するのですから、カラム数は一致していなくてはなりません。 例えばこれはエラーになります。

SELECT LastName FROM Person.Person WHERE PersonType = 'EM'

UNION ALL

SELECT LastName,FirstName FROM Person.Person WHERE PersonType = 'IN'

こんなかんじです。
f:id:hanabusa-snow:20210102202741p:plain



データ型の違いもダメです。

SELECT LastName FROM Person.Person WHERE PersonType = 'EM'

UNION ALL

SELECT BusinessEntityID FROM Person.Person WHERE PersonType = 'IN'

エラーになります。
f:id:hanabusa-snow:20210102202851p:plain







以上、今回はここまで。