前回は、2つのSELECT文のデータの差分が取得できるMINUSについて説明しました。今回は、2つのSELECT文の重複データが取得できるINTERSECTについて説明します!
積集合
INTERSECT |
積集合 2つの検索結果で 重複するもの |
データ準備
INTERSECTを試すためにテーブルを作成し、データを追加します。
-- テーブルの作成
-- 従業員テーブル1
CREATE TABLE employees1 (
employee_id NUMBER PRIMARY KEY,
first_name VARCHAR2(50),
last_name VARCHAR2(50),
hometown VARCHAR2(100),
department_id NUMBER
);
-- 従業員テーブル2
CREATE TABLE employees2 (
employee_id NUMBER PRIMARY KEY,
first_name VARCHAR2(50),
last_name VARCHAR2(50),
hometown VARCHAR2(100),
department_id NUMBER
);
-- データの登録
-- 従業員テーブル1
INSERT
ALL INTO employees1
VALUES
(1, '太郎', '佐藤', '東京', 101)
INTO
employees1
VALUES
(2, '次郎', '鈴木', '大阪', 102)
INTO
employees1
VALUES
(3, '三郎', '田中', '京都', 101)
INTO
employees1
VALUES
(4, '四郎', '山田', '福岡', 103)
INTO
employees1
VALUES
(5, '五郎', '斉藤', '札幌', 102)
SELECT
*
FROM
DUAL;
-- 従業員テーブル2
INSERT
ALL INTO employees2
VALUES
(6, '六郎', '佐藤', '東京', 101)
INTO
employees2
VALUES
(7, '七郎', '鈴木', '大阪', 102)
INTO
employees2
VALUES
(8, '八郎', '山本', '名古屋', 104)
INTO
employees2
VALUES
(9, '九郎', '中村', '神戸', 103)
INTO
employees2
VALUES
(10, '十郎', '小林', '札幌', 102)
SELECT
*
FROM
DUAL;
従業員ID | 名 | 性 | 出身地 | 部門ID |
---|---|---|---|---|
1 | 太郎 | 佐藤 | 東京 | 101 |
2 | 次郎 | 鈴木 | 大阪 | 102 |
3 | 三郎 | 田中 | 京都 | 101 |
4 | 四郎 | 山田 | 福岡 | 103 |
5 | 五郎 | 斉藤 | 札幌 | 102 |
従業員ID | 名 | 性 | 出身地 | 部門ID |
---|---|---|---|---|
6 | 六郎 | 佐藤 | 東京 | 101 |
7 | 七郎 | 鈴木 | 大阪 | 102 |
8 | 八郎 | 山本 | 名古屋 | 104 |
9 | 九郎 | 中村 | 神戸 | 103 |
10 | 十郎 | 小林 | 札幌 | 102 |
INTERSECTの使い方
2つのSELECT文の重複データを取得する場合INTERSECTを使います。INTERSECTは下記のように記述します。
SELECT 文1
INTERSECT
SELECT 文2
試しに、従業員テーブル1と従業員テーブル2の出身地で重複しているデータを取得してみます。
SELECT
hometown AS "出身地"
FROM
employees1
INTERSECT
SELECT
hometown AS "出身地"
FROM
employees2
ちゃんと重複しているデータが取得できました。
出身地 |
---|
東京 |
大阪 |
京都 |
福岡 |
札幌 |
東京 |
大阪 |
名古屋 |
神戸 |
札幌 |
出身地 |
---|
大阪 |
札幌 |
東京 |
左の表は従業員テーブル1と従業員テーブル2を合わせて取得したもので、上記の表はそこから重複しているデータのみ取得しています。
部門IDや性も重複しているデータが存在します。
ぜひ、手を動かして INTERSECT を使ってみてください。
まとめ
異なるテーブルから重複しているデータを取得する時は、INTERSECTを使う!ということを覚えておきましょう。
コメント