【EXCEPT演算子】2つのテーブルのレコード(集合)を使用して引き算を行い、新たな集合(引き算の結果)を取得する

EXCEPT演算子を使用することで、
テーブルのレコード(集合)を使用した引き算(減算)をすることが
できます!

以下のようなプログラムのテストで役に立ちます!
・テーブルAのデータをテーブルBへ登録するプログラム
・テーブルAのデータがテーブルBへ登録されたことを確認する
 ➡テーブルAとテーブルBのデータが同じであることを確認する

EXCEPT演算子とは

標準SQLに含まれているモノです。
よってSQL Serverを含む全てのRDBMSで使用可能です。

EXCEPT演算子を使用することで、レコード(集合)を使用した引き算(減算)を
することができます。

上記の公式ページに記載されている通り、引き算(減算)した結果から重複を除去した上で、
結果を返します。

準備

以下のSQLを実行し、テーブルの作成/データの登録をします。

--テーブル①の作成
CREATE TABLE employee(
	id      CHAR(5)      PRIMARY KEY,
	name    VARCHAR(10),
	sex     CHAR(2),
	section VARCHAR(10)
)

--テーブル①へデータの登録
INSERT employee (id, name, sex, section) VALUES ('00001', '鈴木一郎', '男', '営業課')
INSERT employee (id, name, sex, section) VALUES ('00002', '田中二郎', '男', '総務課')
INSERT employee (id, name, sex, section) VALUES ('00003', '佐藤三郎', '男', '経理課')

--テーブル①のデータをテーブル②へ登録
SELECT * INTO employee_20200827
FROM employee

SQL実行

以下2つを実現するSQLを実行します。
・『テーブル①』 から『テーブル②』を減算(引き算)する
・『テーブル②』 から『テーブル①』を減算(引き算)する

--『テーブル①』 から『テーブル②』を減算(引き算)する
SELECT * FROM employee
EXCEPT --減算(引き算)する
SELECT * FROM employee_20200827

--『テーブル②』 から『テーブル①』を減算(引き算)する
SELECT * FROM employee_20200827
EXCEPT --減算(引き算)する
SELECT * FROM employee

結果

どちらのSQLもレコードが出力されませんでした。
よって2つのテーブルのレコード(集合)は、同じであると言えます。

SQLは集合指向言語と言われています!

集合を使用した演算は、他のプログラミング言語には無い
SQLの特徴であり長所です!

EXCEPT演算子などの集合演算子は非常に便利です!
積極的に使用しましょう!

タイトルとURLをコピーしました