【SQL】SQL ~ INTERSECT ~

■ はじめに

https://dk521123.hatenablog.com/entry/2023/01/16/000000
https://dk521123.hatenablog.com/entry/2024/09/12/003814

で、SQLの集合演算の中で
積集合(共通部分の算出)する際の INTERSECT を行うのだが
一度もちゃんと取り上げていなかったので、メモしておく

目次

【1】INTERSECT
【2】サポートDB
【3】サンプル
 1)補足:SQL Fiddle

【1】INTERSECT

* 2つのテーブルで共通するレコードを抽出
 => 集合の2つの円が重なるところ(積集合)

cf. INTERSECT = 交差する

【2】サポートDB

* PostgreSQL
* MySQL (昔はできなかったとか、、、)
* SQL Server
* Oracle
* Snowflake

etc...

【3】サンプル

準備

CREATE TABLE user_20240914 (
id       INT,
name     VARCHAR(50),
class    VARCHAR(50)
);

CREATE TABLE user_20240915 (
id       INT,
name     VARCHAR(50),
class    VARCHAR(50)
);

-- INSERT user_20240914
INSERT INTO user_20240914 (id,name,class) VALUES (1,'Mike','bronze'); --★共通
INSERT INTO user_20240914 (id,name,class) VALUES (2,'Tom','gold');
INSERT INTO user_20240914 (id,name,class) VALUES (3,'Smith','silver'); --★共通
INSERT INTO user_20240914 (id,name,class) VALUES (4,'Ken','gold');
-- INSERT user_20240915
INSERT INTO user_20240915 (id,name,class) VALUES (1,'Mike','bronze'); --★共通
INSERT INTO user_20240915 (id,name,class) VALUES (5,'Sam','bronze');
INSERT INTO user_20240915 (id,name,class) VALUES (3,'Smith','silver'); --★共通
INSERT INTO user_20240915 (id,name,class) VALUES (6,'Tom','silver');

サンプル

SELECT id,name,class FROM user_20240914 AS old
INTERSECT
SELECT id,name,class FROM user_20240915 AS new;
id name class
1 Mike bronze
3 Smith silver

1)補足:SQL Fiddle

* SQL を実行するのに、Webブラウザ上からできるサイトが
 あることを知ったので、ご紹介、、、
 => 最近、PCが重すぎて軽くするために
  DBをアンインストールしたので助かる。。。

https://www.db-fiddle.com/

関連記事

SQL ~ 関係演算 / 集合論
https://dk521123.hatenablog.com/entry/2023/01/16/000000
Snowflake ~ 関係演算 / 集合論
https://dk521123.hatenablog.com/entry/2024/09/12/003814
テーブルの結合 ~完全結合・Union / Union All ~
https://dk521123.hatenablog.com/entry/2010/03/28/162247
差集合 ~ EXCEPT / MINUS etc ~
https://dk521123.hatenablog.com/entry/2021/05/26/142059