2021.03.31
【SQL基礎】積集合
本項は積集合ついて説明していきます。
INTERSECT演算子
標準SQLでは、集合演算子のINTERSECTを使用すると、ある検索結果とある検索結果の重複する部分を求めることができます。
差集合と同じく、MySQLではサポートされていません。
書式は下記になります。
SELECT文 INTERSECT SELECT文
MySQLで積集合を求める
MySQLではINTERSECTがサポートされていないので、少し工夫をして上げる必要があります。
方法は以下のようなものがあります。
使用するテーブルは以下のようなteachersテーブルを使用します。
1.INを使用する
以下のように、INを使用するとINTERSECTと同じ結果が得られます。
SELECT t1.* FROM teachers t1 WHERE t1.address = "東京都" AND t1.id IN ( SELECT t2.id FROM teachers t2 WHERE t2.age < 30 );
2.EXISTSを使用する
以下のように、EXISTSを使用すると同じくINTERSECTと同じ結果が得られます。
SELECT t1.* FROM teachers t1 WHERE t1.address = "東京都" AND EXISTS ( SELECT t2.* FROM teachers t2 WHERE t2.age < 30 AND t1.id = t2.id );
3.INNER JOIN を使用する
以下のように、LEFT JOINを使用しても同じくINTERSECTと同じ結果が得られます。
SELECT t2.* FROM (SELECT t1.* FROM teachers t1 WHERE t1.address = "東京都") t2 INNER JOIN (SELECT * FROM teachers t3 WHERE t3.age < 30) t4 ON t2.id = t4.id;
今回の学習ポイント
・MySQLでは、INTERSECTはサポートしていない。
・内部結合など別の手段で積集合を求めることができる
練習問題
問題として使用するデータは「SQL練習問題」のものを使用しています。
以下からダウンロード可能です。
また、ダウンロードしたら以下のようにしてworldcup2014データベースを作成し、インポートしてください。
※worldcup2014.zip解凍してできるworldcup2014.sqlファイルをCドライブ直下に配置した場合。 [sql] CREATE DATABASE worldcup2014;
以下からダウンロード可能です。
また、ダウンロードしたら以下のようにしてworldcup2014データベースを作成し、インポートしてください。
※worldcup2014.zip解凍してできるworldcup2014.sqlファイルをCドライブ直下に配置した場合。 [sql] CREATE DATABASE worldcup2014;
use worldcup2014
source C:\worldcup2014.sql
[/sql]