SQLのSELECT文で取得するレコード(データ)の条件を指定して検索(抽出)する WHERE

以前に以下の記事で、SQLでデータ(レコード)を取得する基本的な命令であるSELECT文についてご紹介しました。

SQLのSELECT文でデータ(レコード)を取得(抽出)する
SQLを使用すると、データベースに対して様々な命令を与えることができます。データ(レコード)を抽出したり、データを追加・変更・削除したり、デ...

上記の記事では、テーブルのすべての行(レコード)を取得しています。
しかし、テーブルに登録されているすべてのデータを取得するのではなく、特定の行のみ抜き出して取得したい場合もあります。
例えば、A、B、Cの3つのレコードがテーブルにある中で、Bのレコードのみに限定したい場合などです。

そこで今回は、テーブルに登録(格納)されているデータ(レコード)のうち、特定の行のみに絞り込んで抽出(フィルタリング)する方法について紹介します。

データの取得に使用するサンプルテーブル

本記事では、データを取得するためのサンプルテーブルとして、以下のテーブルを使用します。

テーブル定義

テーブル名は「ユーザー」とします。ユーザー情報を管理する想定のテーブルになります。

テーブルの列には、主キー(プライマリーキー)となる「ID」、氏名を管理するための「氏名」、性別を「1: 男性」「2: 女性」「3: その他」で管理する性別、Eメールアドレスを管理するための「Eメール」の4つの列を作成します。

列名 データ型 主キー
ID int
氏名 varchar(50)
性別 int
Eメール varchar(100)

テーブルを作成するCREATE文のSQL

サンプルとして使用するユーザーテーブルを作成するSQLは次のようになります。

上記のSQLを実行するとテーブルが作成されます。

テーブルにレコードを挿入するINSERT文のSQL

上記のSQLを実行するとテーブルにデータ(レコード)が挿入(登録)されます。

ユーザーテーブルへのデータのインサートは、複数のレコードを1回のSQLで一括挿入する形式で記述しています。
1回のINSERTで複数行のレコードをテーブルに一括で挿入する方法については、以下の記事を参照してください。

1回のINSERT(インサートSQL)で複数行のレコードを一括挿入(追加)する
SQLServerやMySQLなどのデータベースで、テーブルにレコードをINSERT文使用して追加するには、通常は以下のように記述します。 ...

基準となるSELECT~FROM句のSQL

本記事では、データを取得する基本のSQLとして、以下のSELECT文を使用します。

上記のSQLを実行した結果は以下のようになります。

No. ID 氏名 性別 Eメール
1 100 山田 太郎 1 yamada@excample.com
2 200 田中 花子 2 tanaka@excample.com
3 300 鈴木 一郎 1 suzuki@excample.com
4 400 佐藤 さくら 2 sato@excample.com
5 500 白鳥 未来 2 shiratori@excample.com
6 600 二階堂 彦摩呂 1 nikaido@excample.com

抽出条件を指定するWHERE

テーブルから特定のデータ(レコード)のみを抽出する場合は、WHEREキーワードを使用します。
WHERE句では、条件となる値を照合する列(参照先)に対して、照合する値(参照値)を指定します。

例えば、ユーザーテーブルのIDが200のデータを抽出したい場合は、以下のように記述することができます。

WHERE句は改行することで見やすくなります。

照合したい列(条件を指定する列)が複数ある場合は、ANDキーワードを使うことで可能になります。

SELECT~FROM句と連結する

WHERE句は、FROM句の後に記述するというルールがありますので、ユーザーテーブルに対してIDが200のデータを抽出する場合は、以下のようなSQLになります。

上記のSQLを実行して得られる結果表は、以下のようになります。

No. ID 氏名 性別 Eメール
1 200 田中 花子 2 tanaka@excample.com

WHERE句の条件指定

上記の例ではIDが200の列を対象としてデータを抽出しましたので、ID列に対して「=演算子」を使用して値を照合していますが、
=(イコール)以外の演算子を使うこともできます。

例えば、ユーザーのIDが300以下のデータのみ抽出するのであれば

のようになります。

SQLの実行結果
No. ID 氏名 性別 Eメール
1 100 山田 太郎 1 yamada@excample.com
2 200 田中 花子 2 tanaka@excample.com
3 300 鈴木 一郎 1 suzuki@excample.com

ユーザーIDが200から400の間であれば

と記述できます。

SQLの実行結果
No. ID 氏名 性別 Eメール
1 200 田中 花子 2 tanaka@excample.com
2 300 鈴木 一郎 1 suzuki@excample.com
3 400 佐藤 さくら 2 sato@excample.com

範囲での条件指定部分は以下のように記述した方が、可読性が高いという人もいます

このあたりは、指定する抽出条件によって、適宜書き方を変えてください。

文字列に対する条件指定

上記の例ではユーザーIDが数値なので、数値を条件として照合を行いましたが、文字列値に対しても同様に条件を指定することができます。

例えば、ユーザーの氏名に対して条件を指定する場合は、以下のようになります。

氏名が「鈴木 一郎」のデータのみ抽出する例を以下に記載しておきます。

SQLの実行結果は以下のようになります。

No. ID 氏名 性別 Eメール
1 300 鈴木 一郎 1 suzuki@excample.com