集合演算子とは
集合演算子とは、2つ以上の問い合わせ(SELECT文)の結果(集合)を比較し、比較した結果(集合)を表示する演算子である。
使い方
SELECT 〜 FROM ・・・
集合演算子
SELECT 〜 FROM ・・・
※1つ目のSELECT文の結果と2つ目のSELECT文を比較して、その結果を返す。
比較演算子の種類
| 演算子 | ベン図 | 説明 |
| UNION |
 |
2つの集合を連結し、重複行を省いた結果を返す |
| UNION ALL |
 |
2つの集合を連結した結果を返す。重複行も含まれる |
| INTERSECT |
 |
2つの集合を比較し、重複行のみを返すく |
| MINUS |
 |
1つ目の集合から、2つ目の集合と一致する行を削除した結果を返す |
用意するテーブル
【TBL1 : 7件】
| ID | NAME |
| 1 | あんどう |
| 2 | いのうえ |
| 3 | うえすぎ |
| 4 | えとう |
| 5 | おぐり |
| 6 | かめい |
| 7 | きたやま |
|
【TBL2 : 5件】
| ID | NAME |
| 6 | かめい |
| 7 | きたやま |
| 8 | くりもと |
| 9 | けむし |
| 10 | こだま |
|
CREATE TABLE tbl1 (id NUMBER, name VARCHAR2(20));
CREATE TABLE tbl2 (id NUMBER, name VARCHAR2(20));
INSERT INTO tbl1 VALUES (1, 'あんどう');
INSERT INTO tbl1 VALUES (2, 'いのうえ');
INSERT INTO tbl1 VALUES (3, 'うえすぎ');
INSERT INTO tbl1 VALUES (4, 'えとう');
INSERT INTO tbl1 VALUES (5, 'おぐり');
INSERT INTO tbl1 VALUES (6, 'かめい');
INSERT INTO tbl1 VALUES (7, 'きたやま');
INSERT INTO tbl2 VALUES (6, 'かめい');
INSERT INTO tbl2 VALUES (7, 'きたやま');
INSERT INTO tbl2 VALUES (8, 'くりもと');
INSERT INTO tbl2 VALUES (9, 'けむし');
INSERT INTO tbl2 VALUES (10, 'こだま');
UNIONの例
SELECT * FROM tbl1
UNION
SELECT * FROM tbl2
【TBL1+TBL2 : 10件】
| ID | NAME |
| 1 | あんどう |
| 2 | いのうえ |
| 3 | うえすぎ |
| 4 | えとう |
| 5 | おぐり |
| 6 | かめい |
| 7 | きたやま |
| 8 | くりもと |
| 9 | けむし |
| 10 | こだま |
※id6と7が重複するが、ALLが付いていないので重複無しで表示される
UNION ALLの例
SELECT * FROM tbl1
UNION ALL
SELECT * FROM tbl2
【TBL1+TBL2 : 12件】
| ID | NAME |
| 1 | あんどう |
| 2 | いのうえ |
| 3 | うえすぎ |
| 4 | えとう |
| 5 | おぐり |
| 6 | かめい |
| 7 | きたやま |
| 6 | かめい |
| 7 | きたやま |
| 8 | くりもと |
| 9 | けむし |
| 10 | こだま |
※重複があろうとなかろうと、問答無用で結合
INTERSECTの例
SELECT * FROM tbl1
INTERSECT
SELECT * FROM tbl2
【TBL1 AND TBL2 : 2件】
| ID | NAME |
| 6 | かめい |
| 7 | きたやま |
※id6と7が重複するため、その結果だけが表示される。id6が2件、id7が2件の合計4件が表示されるわけではないことに注意!
MINUSの例
SELECT * FROM tbl1
MINUS
SELECT * FROM tbl2
【TBL1−TBL2 : 5件】
| ID | NAME |
| 1 | あんどう |
| 2 | いのうえ |
| 3 | うえすぎ |
| 4 | えとう |
| 5 | おぐり |
※id6と7が重複するので、1つ目のSELECT文から重複部分が削除されて表示される