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

MySQLで母音で始まらない都市名を抽出する方法:DISTINCTとRLIKEの使い方

MySQLでは、DISTINCT句とRLIKE演算子(正規表現検索)を組み合わせることで、母音で始まらない都市名の一覧を簡単に取得できます。

基本構文

母音(A・E・I・O・U、および小文字)以外の文字で始まる都市名だけを重複なく抽出するには、以下のような構文を使用します。

SELECT DISTINCT yourCityColumnName FROM yourTableName
WHERE yourCityColumnName NOT RLIKE '^[AEIOUaeiou].*$';

サンプルテーブルの作成

実際に動作を確認するため、都市名カラムを持つテーブルを作成しましょう。テーブル作成のクエリは次のとおりです。

mysql> create table Employee_Information
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> EmployeeName varchar(20),
    -> CityName varchar(20),
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (0.76 sec)

テストデータの挿入

続いて、INSERTコマンドを使ってレコードを挿入します。各従業員の名前と勤務地(都市名)を登録していきます。

mysql> insert into Employee_Information(EmployeeName,CityName) values('Larry','New York');
Query OK, 1 row affected (0.12 sec)

mysql> insert into Employee_Information(EmployeeName,CityName) values('Sam','Indianapolis');
Query OK, 1 row affected (0.15 sec)

mysql> insert into Employee_Information(EmployeeName,CityName) values('Carol','El Paso');
Query OK, 1 row affected (0.16 sec)

mysql> insert into Employee_Information(EmployeeName,CityName) values('John','Austin');
Query OK, 1 row affected (0.07 sec)

mysql> insert into Employee_Information(EmployeeName,CityName) values('Mike','Denver');
Query OK, 1 row affected (0.06 sec)

mysql> insert into Employee_Information(EmployeeName,CityName) values('David','Las Vegas');
Query OK, 1 row affected (0.11 sec)

mysql> insert into Employee_Information(EmployeeName,CityName) values('James','Albuquerque');
Query OK, 1 row affected (0.13 sec)

mysql> insert into Employee_Information(EmployeeName,CityName) values('Robert','Portland');
Query OK, 1 row affected (0.28 sec)

mysql> insert into Employee_Information(EmployeeName,CityName) values('Richard','Irvine');
Query OK, 1 row affected (0.10 sec)

mysql> insert into Employee_Information(EmployeeName,CityName) values('Michael','Garland');
Query OK, 1 row affected (0.13 sec)

登録データの確認

SELECT文ですべてのレコードを表示して、正しく登録されているか確認します。

mysql> select *from Employee_Information;

実行結果は以下のとおりです。

+----+--------------+--------------+
| Id | EmployeeName | CityName     |
+----+--------------+--------------+
|  1 | Larry        | New York     |
|  2 | Sam          | Indianapolis |
|  3 | Carol        | El Paso      |
|  4 | John         | Austin       |
|  5 | Mike         | Denver       |
|  6 | David        | Las Vegas    |
|  7 | James        | Albuquerque  |
|  8 | Robert       | Portland     |
|  9 | Richard      | Irvine       |
| 10 | Michael      | Garland      |
+----+--------------+--------------+
10 rows in set (0.00 sec)

母音で始まらない都市名を抽出するクエリ

それでは本題のクエリです。都市名の最初の文字がA・E・I・O・U(大文字・小文字いずれも)でないレコードのみを抽出します。NOT RLIKE '^[AEIOUaeiou].*$'というパターンは、「先頭が母音である行」にマッチする正規表現を否定しているため、結果として母音以外で始まる都市名だけが残ります。

mysql> SELECT DISTINCT CityName FROM Employee_Information
    -> WHERE CityName NOT RLIKE '^[AEIOUaeiou].*$';

実行結果は以下のとおりです。

+-----------+
| CityName  |
+-----------+
| New York  |
| Denver    |
| Las Vegas |
| Portland  |
| Garland   |
+-----------+
5 rows in set (0.00 sec)

解説:正規表現パターンの意味

  • ^ … 文字列の先頭を表します。
  • [AEIOUaeiou] … 大文字・小文字の母音のいずれか1文字にマッチします。
  • .*$ … 先頭以降の任意の文字列の終わりまでを表します。
  • NOT RLIKE … 正規表現に一致しない行を返します。

このように、DISTINCTで重複を排除しつつ、NOT RLIKEで先頭が母音の行を除外することで、目的の都市名リストを効率的に取得できます。なお、同様の処理はREGEXP演算子やSUBSTRING()関数+LOWER()関数の組み合わせでも実現可能ですが、正規表現を使う方法が最もシンプルで可読性も高いでしょう。

  1. MySQLのLIKE演算子とCONCAT関数を使って複数のカラムを横断して同じ値を検索する方法

    MySQLでは、LIKE演算子とCONCAT()関数を組み合わせることで、複数のカラムを連結した文字列に対して部分一致検索を行うことができます。これにより、例えば「名前」と「科目」といった別々のフィールドにまたがる値を、1つの条件でまとめて検索できるようになります。ここでは、実際にテーブルを作成し、複数のカラムにわたる検索を行う手順を具体的なサンプルコードとともに解説します。サンプルテーブルの作成まず、学生名と科目を格納するテーブルを作成します。mysql> create table DemoTable-> (-> StudentName varchar(20),->

  2. MySQLでAUTO_INCREMENTの開始値を手動で指定してテーブルを作成する方法

    MySQLでAUTO_INCREMENTの開始値を手動で指定してテーブルを作成する方法MySQLでは、テーブル作成時にAUTO_INCREMENTオプションを指定することで、連番の開始値を任意の数値に設定できます。これにより、IDを100や1000など、特定の値から採番することが可能になります。以下の手順で、開始値を100に設定したAUTO_INCREMENTカラムを持つテーブルを作成し、その動作を確認してみましょう。1. テーブルの作成まず、AUTO_INCREMENT=100を指定してテーブルを作成します。mysql> create table DemoTable1907 (