MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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を併用するとより正確に判定できます。

  1. MySQLで文字列の先頭15文字だけを表示するクエリの書き方

    MySQLで文字列の先頭(左側)から指定した文字数だけを取り出すには、LEFT()関数を使用します。第1引数に対象の文字列、第2引数に取得したい文字数を指定するだけで、手軽に部分文字列を抽出できます。 この記事では、テーブルに登録されたタイトルの先頭15文字だけを表示する方法を、実際のSQLと実行結果付きで順を追って解説します。 1. サンプルテーブルを作成する まず、CREATE TABLE文でテーブルを作成します。 mysql> create table DemoTable     -> (    &nbs

  2. MySQLのUPDATE文で1つのクエリを使って複数のレコードを更新する方法

    MySQLでは、UPDATEステートメントを使うことで、1つのクエリで複数のカラムや複数のレコードの値をまとめて更新できます。この記事では、実際にサンプルテーブルを作成し、UPDATE文でデータを更新する具体的な手順を解説します。サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable     -> (     -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,    &