MySQLで特定の範囲の値を抽出する方法:WHERE句を使った条件検索の基本
MySQLのテーブルから特定の範囲の値を抽出したい場合、WHERE句を使用します。本記事では、サンプルテーブルを作成し、年齢の範囲とフラグ条件を組み合わせたデータ抽出の具体的な手順を解説します。
1. サンプルテーブルの作成
まず、顧客情報を格納するためのテーブル「DemoTable」を作成します。顧客IDは自動採番(AUTO_INCREMENT)の主キーとして設定しています。
mysql> create table DemoTable
(
CustomerId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
CustomerName varchar(200),
CustomerAge int,
isRegularCustomer bool
);
Query OK, 0 rows affected (0.57 sec)
2. テストデータの挿入
次に、INSERT文を使って複数の顧客レコードを登録します。
mysql> insert into DemoTable(CustomerName,CustomerAge,isRegularCustomer)values('Chris',24,true);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(CustomerName,CustomerAge,isRegularCustomer)values('Robert',26,false);
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable(CustomerName,CustomerAge,isRegularCustomer)values('Mike',27,false);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(CustomerName,CustomerAge,isRegularCustomer)values('Larry',22,true);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(CustomerName,CustomerAge,isRegularCustomer)values('Sam',30,true);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(CustomerName,CustomerAge,isRegularCustomer)values('Carol',26,true);
Query OK, 1 row affected (0.16 sec)
3. 登録したレコードの確認
SELECT文ですべてのレコードを表示して、データが正しく登録されているか確認しましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+------------+--------------+-------------+-------------------+ | CustomerId | CustomerName | CustomerAge | isRegularCustomer | +------------+--------------+-------------+-------------------+ | 1 | Chris | 24 | 1 | | 2 | Robert | 26 | 0 | | 3 | Mike | 27 | 0 | | 4 | Larry | 22 | 1 | | 5 | Sam | 30 | 1 | | 6 | Carol | 26 | 1 | +------------+--------------+-------------+-------------------+ 6 rows in set (0.00 sec)
4. WHERE句で特定の範囲の値を抽出する
ここからが本題です。特定の範囲の値を抽出するには、WHERE句に条件を指定します。今回の例では、以下の2つの条件を組み合わせています。
- 年齢が24以上27以下(CustomerAge >= 24 AND CustomerAge <= 27)
- 常連顧客であること(isRegularCustomer = true)
複数の条件はAND演算子で連結することで、すべての条件を満たすレコードのみを取得できます。
mysql> select CustomerId,CustomerName,CustomerAge,isRegularCustomer from DemoTable where isRegularCustomer=true AND CustomerAge >=24 AND CustomerAge <= 27;
実行結果は以下の通りです。
+------------+--------------+-------------+-------------------+ | CustomerId | CustomerName | CustomerAge | isRegularCustomer | +------------+--------------+-------------+-------------------+ | 1 | Chris | 24 | 1 | | 6 | Carol | 26 | 1 | +------------+--------------+-------------+-------------------+ 2 rows in set (0.00 sec)
補足:BETWEEN句を使った書き方
範囲指定にはBETWEEN句を使うこともできます。上記のクエリは以下のように書き換え可能で、より直感的に範囲を表現できます。
mysql> select CustomerId,CustomerName,CustomerAge,isRegularCustomer from DemoTable where isRegularCustomer=true AND CustomerAge BETWEEN 24 AND 27;
両者は同じ結果を返しますが、BETWEEN句の方が「24〜27の範囲」という意図が明確になり、可読性が向上します。状況に応じて使い分けるとよいでしょう。
-
MySQLでテーブルから順序付けられた3行のみを取得する方法
ORDER BY句とLIMITを組み合わせて順序付きの3行を取得する MySQLでテーブルから特定の順序で並べ替えた行を、指定した件数だけ取得したい場合は、ORDER BY句とLIMITを組み合わせます。ここでは、従業員IDの降順に並べ替えた上位3行を取得する具体例を紹介します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。 mysql> create table DemoTable1551 -> ( -> EmployeeId int NOT NULL AUTO_INCREMENT PRIM
-
MySQLで月を指定してデータを抽出する方法(MONTH()関数の使い方)
MySQLで日付データから特定の「月」に該当するレコードだけを抽出したい場合は、MONTH()関数を使うのが便利です。この記事では、実際にテーブルを作成し、サンプルデータを挿入しながら、月を条件にしたSELECT文の書き方を具体的に解説します。1. サンプルテーブルの作成まずは、出荷日(Shippingdate)を格納するdatetime型のカラムを持つテーブルを作成します。mysql> create table DemoTable1599 -> ( -> Shippingdate d