頻馬主義

競馬のデータをいろいろ見ていきます

【馬王Z SQL講座】 2つの条件での抽出

1つの条件での抽出に関する記事はこちら

【馬王Z SQL講座】 条件抽出 - 頻馬主義

2つの条件

データを抽出するときに、複数の条件を使いたいことがあります。

ここで、2つの条件でデータを抽出することを考えてみましょう。

抽出対象としたいデータはどちらか片方の条件を満たしていればいいのか、それとも両方の条件を満たしていなければならないのかなどを区別する必要があります。

ここでは2つの条件として

  • 馬名がリジェネレーション
  • 競走コードが 21210070805

を使いたいと思います。

出走馬T テーブルからそれぞれの条件でデータ抽出したときのクエリと実行結果は以下のようになります。(出力対象のカラムは 年月日、競走コード、馬名 としています。)

馬名がリジェネレーション
クエリ
SELECT
    年月日,
    競走コード,
    馬名
FROM
    出走馬T
WHERE
    馬名 = "リジェネレーション"
;
実行結果

f:id:mare_ism:20210325033156p:plain

競走コードが 21210070805
クエリ
SELECT
    年月日,
    競走コード,
    馬名
FROM
    出走馬T
WHERE
    競走コード = 21210070805
;
実行結果

f:id:mare_ism:20210325033215p:plain

両方の実行結果に、馬名がリジェネレーション かつ 競走コードが 21210070805 のレコードが1件含まれていますね。

論理演算

2つの条件(条件Aと条件B)を使った基本的な構文は下記の通りです。

SELECT
    [カラム名]
FROM
    [テーブル名]
WHERE
    [条件式A] [論理演算子]
    [条件式B]
;

このように2つの条件式の間に論理演算子を記述します。

では、論理演算子にはどんな種類があるんでしょうか?

AND:論理積

2つの条件の両方を満たしているレコードを抽出対象としたい場合には AND(論理積) を使います。

SELECT
    年月日,
    競走コード,
    馬名
FROM
    出走馬T
WHERE
    馬名 = "リジェネレーション" AND
    競走コード = 21210070805
;

このクエリを実行すると、下図のような結果が得られます。

f:id:mare_ism:20210325040021p:plain

OR:論理和

2つの条件の片方を満たしているレコードを抽出対象としたい場合には OR(論理和) を使います。

両方の条件を満たしているレコードも抽出対象となります。

SELECT
    年月日,
    競走コード,
    馬名
FROM
    出走馬T
WHERE
    馬名 = "リジェネレーション" OR
    競走コード = 21210070805
;

このクエリを実行すると、下図のような結果が得られます。

f:id:mare_ism:20210325040035p:plain

XOR:排他的論理和

2つの条件の片方だけを満たしているレコードを抽出対象としたい場合には XOR(排他的論理和) を使います。

両方の条件を満たしているレコードは抽出対象外となります。

SELECT
    年月日,
    競走コード,
    馬名
FROM
    出走馬T
WHERE
    馬名 = "リジェネレーション" XOR
    競走コード = 21210070805
;

このクエリを実行すると、下図のような結果が得られます。

f:id:mare_ism:20210325040045p:plain

OR を使った実行結果と違って 馬名がリジェネレーション かつ 競走コードが 21210070805 のレコードは抽出されていないことに注意して下さい。