【馬王Z SQL講座】 2つの条件での抽出
1つの条件での抽出に関する記事はこちら
2つの条件
データを抽出するときに、複数の条件を使いたいことがあります。
ここで、2つの条件でデータを抽出することを考えてみましょう。
抽出対象としたいデータはどちらか片方の条件を満たしていればいいのか、それとも両方の条件を満たしていなければならないのかなどを区別する必要があります。
ここでは2つの条件として
- 馬名がリジェネレーション
- 競走コードが 21210070805
を使いたいと思います。
出走馬T テーブルからそれぞれの条件でデータ抽出したときのクエリと実行結果は以下のようになります。(出力対象のカラムは 年月日、競走コード、馬名 としています。)
馬名がリジェネレーション
クエリ
SELECT 年月日, 競走コード, 馬名 FROM 出走馬T WHERE 馬名 = "リジェネレーション" ;
実行結果
競走コードが 21210070805
クエリ
SELECT 年月日, 競走コード, 馬名 FROM 出走馬T WHERE 競走コード = 21210070805 ;
実行結果
両方の実行結果に、馬名がリジェネレーション かつ 競走コードが 21210070805 のレコードが1件含まれていますね。
論理演算
2つの条件(条件Aと条件B)を使った基本的な構文は下記の通りです。
SELECT [カラム名] FROM [テーブル名] WHERE [条件式A] [論理演算子] [条件式B] ;
このように2つの条件式の間に論理演算子を記述します。
では、論理演算子にはどんな種類があるんでしょうか?
AND:論理積
2つの条件の両方を満たしているレコードを抽出対象としたい場合には AND(論理積) を使います。
SELECT 年月日, 競走コード, 馬名 FROM 出走馬T WHERE 馬名 = "リジェネレーション" AND 競走コード = 21210070805 ;
このクエリを実行すると、下図のような結果が得られます。
OR:論理和
2つの条件の片方を満たしているレコードを抽出対象としたい場合には OR(論理和) を使います。
両方の条件を満たしているレコードも抽出対象となります。
SELECT 年月日, 競走コード, 馬名 FROM 出走馬T WHERE 馬名 = "リジェネレーション" OR 競走コード = 21210070805 ;
このクエリを実行すると、下図のような結果が得られます。
XOR:排他的論理和
2つの条件の片方だけを満たしているレコードを抽出対象としたい場合には XOR(排他的論理和) を使います。
両方の条件を満たしているレコードは抽出対象外となります。
SELECT 年月日, 競走コード, 馬名 FROM 出走馬T WHERE 馬名 = "リジェネレーション" XOR 競走コード = 21210070805 ;
このクエリを実行すると、下図のような結果が得られます。
OR を使った実行結果と違って 馬名がリジェネレーション かつ 競走コードが 21210070805 のレコードは抽出されていないことに注意して下さい。