■ はじめに
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をアンインストールしたので助かる。。。
関連記事
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