特定の値に一致する行に絞り込もう

WHERE 句の手始めとして、ある列の値が特定の値に一致するレコードに絞り込む方法を学びます。

"〇〇列の値が XX のレコードだけ欲しいなぁ" といった場合に使う、WHERE 句の基本中の基本です。

また、その WHERE 句を使うにあたって強く意識しないといけないのが列の型です。

WHERE 句で絞り込みを行う際に、型を意識した書き方ができていないと文法エラーとなって実行できないこともしばしば。

それではさっそく学んでいきましょう。

書き方

ある列の値が特定の値に一致するレコードのみに絞り込みたいときは、= (イコール) を使う

対象の列の値が文字型、日付型の場合

SELECT * FROM テーブル名 WHERE 列名 = "値";

対象の列の値が数値型の場合

SELECT * FROM テーブル名 WHERE 列名 = 値;

書き方の説明

WHERE 句共通の書き方として大事なことは、FROM 句でテーブル名を指定した後に WHERE と記すことです。

その WHERE 句の後に、特定の値に一致する行に絞り込む場合は、列名 = 値 を示します。

たったこれだけなのですが、大事なことは値を示すときに型を意識して書くこと。

対象の列の型が文字系・日付系の場合、列名 = "XX" のように、値はダブルクォートで括ります。

対象の列の型が数値系の場合は、列名 = XX のように、値はダブルクォートでは括りません。

なお、日付系を指定する際、対象が時刻まで登録できる列なら列名 = "年-月-日 時:分:秒" で指定します。

対象が日付までしか登録できない列であれば、列名 = "年-月-日" で指定します。

ところで、どの列がどの型なのかは事前に把握しておく必要があります。(※RDBMS にとって、列の型の把握の方法は異なりますので、ここでは割愛します。)

もしあなたがエンジニアでない場合は、どれが数値として、どれが文字として管理されているのかを推測するに留めてもよいでしょう。

商品情報が入っている products テーブルのち、商品名(name)が apple のレコードだけに絞り込みたいとき

SELECT * FROM products WHERE name = "apple";

ユーザー情報が入っている users テーブルのうち、所属部署コード(department_id)が 5 のレコードだけに絞り込みたいとき

SELECT * FROM users WHERE department_id = 5;

ユーザー情報が入っている users テーブルのうち、生年月日(birthday)が 2010 年 6 月 10 日 のレコードだけに絞り込みたいとき

SELECT * FROM users WHERE birthday = "2010-06-10";

商品情報が入っている products テーブルのち、最終更新日時(updated_at)が 2010 年 6 月 10 日 7 時 6 分 20 秒 のレコードだけに絞り込みたいとき

SELECT * FROM products WHERE updated_at = "2020-06-10 07:06:20";

練習 1

試しに、SELECT 文で products テーブルから指定したレコードだけを取得してみましょう!

今、このページを開いている時点で既にあなたのための products テーブルが作られ、データも入っています。

もう SQL 文は入力してあるので実行ボタンを押してみてください。 products テーブルより、価格(price)が 2000 のレコードだけ表示されます。

問題 1

sales というテーブルがあります。この sales というテーブルのうち、売上時刻(列名はsold_at、日付時刻型) が 2021 年 1 月 10 日 10 時 0 分 10 秒のレコードのみを取得する SQL 文を書いてみましょう。

答え合わせ

正解を見る
正解:SELECT * FROM sales WHERE sold_at = "2021-01-10 10:00:10";
解説:絞り込みたい列に対して、時刻まで日付を指定したいのでダブルクォートで括って WHERE sold_at = "2021-01-10 10:00:10" と指定する必要があります。

問題 2

users というテーブルがあります。この users というテーブルのうち、メールアドレス(列名はemail、文字型) が [email protected] のレコードのみを取得する SQL 文を書いてみましょう。ただし、取得する列は id 列と name 列だけとします。

答え合わせ

正解を見る
正解:SELECT id, name FROM users WHERE email = "[email protected]";
解説:emailは文字型なので、文字型もダブルクォートで括って WHERE email = "[email protected]" と指定する必要があります。また、列名を指定するときはカンマ区切りで id, name とつなげます。

問題 3

users というテーブルがあります。この users というテーブルのうち、id(数値型) が 452 のレコードのみを取得する SQL 文を書いてみましょう。ただし、取得する列は id 列と name 列と email 列だけとします。

答え合わせ

正解を見る
正解:SELECT id, name, email FROM users WHERE id = 452;
解説:idは数値型なので、ダブルクォートで括らずに WHERE id = 452 と指定します。