【MySQL】ORDER BYでもJで始まる文字列を最後に表示する高度な並べ替えテクニック
MySQLでは、通常のORDER BY句に加えてLIKE演算子を組み合わせることで、特定の条件に合うレコードを意図的に最後に配置できます。本記事では、「Jで始まる文字列を、昇順ソートした結果の最後に表示する」方法を具体的なサンプルコードとともに解説します。
1. サンプルテーブルの作成
まず、デモ用のテーブルを作成します。
mysql> create table DemoTable
(
Name varchar(100)
);
Query OK, 0 rows affected (0.60 sec)
2. テストデータの挿入
INSERTコマンドを使って、いくつかのレコードを登録します。
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('Adam');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Jace');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('David');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('Sam');
Query OK, 1 row affected (0.20 sec)
3. 登録データの確認
SELECT文でテーブル内のすべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行すると、次のような結果が得られます。
+-------+ | Name | +-------+ | John | | Adam | | Chris | | Jace | | David | | Sam | +-------+ 6 rows in set (0.00 sec)
4. Jで始まる文字列を最後に並べ替えるクエリ
ここがポイントです。ORDER BYの中でName like '%J%'という条件式を先に指定し、その後にNameでソートすることで、「Jを含む(Jで始まる)レコード」を末尾に追いやりつつ、残りのレコードは名前順に整列させることができます。
mysql> select *from DemoTable order by Name like '%J%',Name;
5. 実行結果
上記のクエリを実行すると、以下のように出力されます。
+-------+ | Name | +-------+ | Adam | | Chris | | David | | Sam | | Jace | | John | +-------+ 6 rows in set (0.00 sec)
仕組みの解説
Name like '%J%'は、条件に一致すれば1(TRUE)、一致しなければ0(FALSE)を返すブール式です。MySQLでは0 < 1として評価されるため、FALSE(0)の行が先頭に、TRUE(1)の行が最後に配置されます。さらに第2キーとしてNameを指定しているため、各グループ内では名前の昇順にソートされます。
この手法は、「除外したい項目や特別扱いしたい項目を一覧の最後に回したい」といったケースで応用できる、実務でも役立つ並べ替えテクニックです。
-
MySQLでIN句に指定した値のみを任意の順序で表示する方法
MySQLでIN句に指定した値のみを任意の順序で表示する方法MySQLでは、IN()とORDER BY句、さらにFIELD()関数を組み合わせることで、IN句内に指定した値だけを、希望する独自の順序で表示できます。通常のORDER BYは昇順・降順のソートしかできませんが、FIELD()関数を使えば自由に並び順を定義できるのがポイントです。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable1986(Number int);Query OK, 0 rows affected (0.00 sec)次に、INSERTコマ
-
MySQLのREGEXPでアルファベットを含むレコードのみを抽出する方法|数字のみのレコードを除外
MySQLのREGEXPで文字を含むレコードのみを表示する方法MySQLでは、文字列と数値が混在するカラムから、アルファベットを含むレコードだけを抽出し、数字のみのレコードを除外したいケースがあります。このような場合には、REGEXP演算子を使用すると簡単に実現できます。基本構文REGEXPを使った基本的な構文は以下の通りです。select yourColumnName from yourTableName where yourColumnName REGEXP [a-zA-Z];サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table d