MySQLで単一の単語のみを含むレコードだけを表示するクエリの書き方
MySQLで「単一の単語のみを含むレコード」だけを抽出したいケースは意外と多くあります。例えば、氏名データの中から姓と名がスペースで区切られていない「単一の名前」だけを取得したい場合などです。このような場合、LIKE句とNOT LIKE句を組み合わせることで、簡単にレコードをフィルタリングできます。
サンプルテーブルの作成
まず、動作確認用のテーブルを作成しましょう。
mysql> create table DemoTable
(
Name varchar(50)
);
Query OK, 0 rows affected (0.50 sec)テストデータの挿入
次に、INSERTコマンドを使ってテーブルにいくつかのレコードを追加します。スペースを含むデータと含まないデータを混ぜて登録しておきます。
mysql> insert into DemoTable values('John Smith');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Adam Smith');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Carol');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('David Miller');
Query OK, 1 row affected (0.10 sec)登録済みレコードの確認
SELECT文でテーブル内のすべてのレコードを表示してみます。
mysql> select *from DemoTable;
実行すると、以下のような結果が得られます。
+--------------+ | Name | +--------------+ | John Smith | | John | | Adam Smith | | Carol | | David Miller | +--------------+ 5 rows in set (0.00 sec)
単一の単語のみを含むレコードを抽出するクエリ
単一の単語のみを含むレコードだけを表示するには、NOT LIKE '% %'を使用します。この条件により、スペースを含む(つまり複数の単語で構成される)レコードが除外され、単一の単語だけのレコードが残ります。
mysql> select *from DemoTable where Name not like '% %';
実行結果は以下のとおりです。
+-------+ | Name | +-------+ | John | | Carol | +-------+ 2 rows in set (0.00 sec)
クエリの仕組み
'% %'というパターンは「スペースの前後に任意の文字列が存在する」ことを意味します。つまり、値の中にスペースが1つでも含まれていればマッチします。これをNOT LIKEで否定することで、「スペースを含まない=単一の単語のみのレコード」だけが抽出される仕組みです。
なお、この方法は単純なスペース区切りを前提としているため、タブや全角スペースが混在するデータを扱う場合は、TRIM()関数やREGEXPを併用するとより正確に判定できます。
-
MySQLで文字列の先頭15文字だけを表示するクエリの書き方
MySQLで文字列の先頭(左側)から指定した文字数だけを取り出すには、LEFT()関数を使用します。第1引数に対象の文字列、第2引数に取得したい文字数を指定するだけで、手軽に部分文字列を抽出できます。 この記事では、テーブルに登録されたタイトルの先頭15文字だけを表示する方法を、実際のSQLと実行結果付きで順を追って解説します。 1. サンプルテーブルを作成する まず、CREATE TABLE文でテーブルを作成します。 mysql> create table DemoTable -> ( &nbs
-
MySQLのUPDATE文で1つのクエリを使って複数のレコードを更新する方法
MySQLでは、UPDATEステートメントを使うことで、1つのクエリで複数のカラムや複数のレコードの値をまとめて更新できます。この記事では、実際にサンプルテーブルを作成し、UPDATE文でデータを更新する具体的な手順を解説します。サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, &