MySQLのBETWEEN演算子で異なる値の間にあるレコードを取得する方法
MySQLのBETWEENで異なる値の間にある値を取得する
MySQLではBETWEEN演算子を使用することで、特定の2つの値の間に存在するレコードを簡単に取得できます。ここでは、従業員コード(文字列型)を格納したテーブルを例に、具体的な手順を解説します。
1. サンプルテーブルの作成
まず、以下のCREATE TABLE文でテーブルを作成しましょう。
mysql> create table DemoTable1473
-> (
-> EmployeeCode varchar(20)
-> );
Query OK, 0 rows affected (0.47 sec)
2. レコードの挿入
続いて、INSERT文を使ってテーブルにサンプルデータを挿入します。
mysql> insert into DemoTable1473 values('EMP_120');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable1473 values('EMP_125');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1473 values('EMP_30');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1473 values('EMP_130');
Query OK, 1 row affected (0.10 sec)
3. 登録済みレコードの確認
SELECT文を実行して、テーブル内のすべてのレコードを表示してみましょう。
mysql> select * from DemoTable1473;
実行結果は以下のとおりです。
+--------------+ | EmployeeCode | +--------------+ | EMP_120 | | EMP_125 | | EMP_30 | | EMP_130 | +--------------+ 4 rows in set (0.00 sec)
4. BETWEENを使って範囲内のレコードを取得する
ここで、'EMP_124'から'EMP_129'の間に該当するレコードを取得するクエリを見てみましょう。
mysql> select * from DemoTable1473
-> where EmployeeCode between 'EMP_124' and 'EMP_129';
このクエリを実行すると、次のような結果が得られます。
+--------------+ | EmployeeCode | +--------------+ | EMP_125 | +--------------+ 1 row in set (0.00 sec)
結果のポイント
BETWEENは境界値を含む範囲検索を行います。今回の例では文字列同士の比較となるため、辞書順(文字列の並び順)で判定されます。そのため、'EMP_124'〜'EMP_129'の範囲に含まれるのは'EMP_125'だけであり、'EMP_120'や'EMP_130'は範囲外となります。
また、'EMP_30'のように桁数が異なる文字列は、辞書順では「EMP_1xx」より後ろに並ぶため、数値的な大小感覚とは順序が異なる点に注意が必要です。文字列コードに対して範囲検索を行う場合は、必ず桁数を揃える(例:EMP_030のようにゼロ埋めする)ことをおすすめします。
-
MySQLのLIKE句で特定の列の値(名前)を取得する方法
MySQLでテーブルから特定の列の値を取得したい場合は、LIKE句を使用します。LIKE句は部分一致検索を行うための句で、ワイルドカードと組み合わせることで、特定のパターンに一致するレコードだけを効率的に抽出できます。この記事では、実際にサンプルテーブルを作成し、LIKE句を使って特定の名前を取得する手順を順番に解説します。1. サンプルテーブルを作成するまず、名前を格納するためのテーブルを作成しましょう。以下のCREATE TABLE文を実行します。mysql> create table DemoTable1809 ( Name varchar(20) ); Q
-
MySQLで最大の累積値とその出現回数を取得するクエリの書き方
カラム同士を掛け合わせた値(累積値)の中から最大値と、その出現回数を取得したい場合は、集計関数 COUNT(*) をサブクエリと組み合わせて使用します。あわせて GROUP BY 句も活用します。テーブルの作成まず、以下のコマンドでテーブルを作成しましょう。mysql> create table demo23-> (-> id int not null auto_increment primary key,-> value1 int,-> value2 int-> );Query OK, 0 rows affected (1.65 sec)レコードの挿入続い