前回は、2つのSELECT文からそれぞれの検索結果を足し合わせた結果(和集合)を返してくれる、UNION と UNION ALL について説明しました。今回は、2つのSELECT文のデータの差分が取得できるMINUSについて説明します!
差集合
MINUS |
差集合 最初の検索結果から 次の検索結果と重複する 部分を取り除いたもの |
データ準備
MINUS を試すためにテーブルを作成し、データを追加します。
-- テーブルの作成
-- 商品テーブル1
CREATE TABLE product_info_1 (
product_id NUMBER PRIMARY KEY,
product_name VARCHAR2(100),
description VARCHAR2(200),
price NUMBER
);
-- 商品テーブル2
CREATE TABLE product_info_2 (
product_id NUMBER PRIMARY KEY,
product_name VARCHAR2(100),
description VARCHAR2(200),
price NUMBER
);
-- データの登録
-- 商品テーブル1
INSERT
ALL INTO product_info_1
VALUES
(1, 'コカ・コーラ', '350ml', 135)
INTO
product_info_1
VALUES
(2, 'コカ・コーラ', '500ml', 170)
SELECT
*
FROM
DUAL;
-- 商品テーブル2
INSERT
ALL INTO product_info_2
VALUES
(1, 'コカ・コーラ', '350ml', 135)
INTO
product_info_2
VALUES
(2, 'コカ・コーラ', '500ml', 170)
INTO
product_info_2
VALUES
(3, 'コカ・コーラ', '750ml', 230)
SELECT
*
FROM
DUAL;
商品ID | 商品名 | 商品詳細 | 価格 |
---|---|---|---|
1 | コカ・コーラ | 350ml | 135 |
2 | コカ・コーラ | 500ml | 170 |
商品ID | 商品名 | 商品詳細 | 価格 |
---|---|---|---|
1 | コカ・コーラ | 350ml | 135 |
2 | コカ・コーラ | 500ml | 170 |
3 | コカ・コーラ | 750ml | 230 |
MINUSの使い方
2つのSELECT文のデータの差分を取得する場合はMINUSを使います。MINUS は下記のように記述します。
SELECT 文1
MINUS
SELECT 文2
商品テーブル1 – 商品テーブル2 で差分を取得したいと思います。
SELECT
product_id AS "商品ID",
product_name "商品名",
description AS "商品詳細",
price AS "価格"
FROM
product_info_1
MINUS
SELECT
product_id AS "商品ID",
product_name "商品名",
description AS "商品詳細",
price AS "価格"
FROM
product_info_2
結果は no data found 逆に 商品テーブル2 – 商品テーブル1をすると…
SELECT
product_id AS "商品ID",
product_name "商品名",
description AS "商品詳細",
price AS "価格"
FROM
product_info_2
MINUS
SELECT
product_id AS "商品ID",
product_name "商品名",
description AS "商品詳細",
price AS "価格"
FROM
product_info_1
結果が返ってきました。
商品ID | 商品名 | 商品詳細 | 価格 |
---|---|---|---|
3 | コカ・コーラ | 750ml | 230 |
商品テーブル1には商品テーブル2と同じデータしかなかったので、no data found になり商品テーブル2には商品テーブル1にないレコードが1つあったため結果が返ってきました。
まとめ
異なるテーブルにあるデータの差分を調べるには、MINUSを使うということを覚えておきましょう!
コメント