UI設計したり、ウェブシステムを開発したりします。 

SQL見るだけクエリ#041 MySQL 正規表現を使って検索する方法 REGEXP(2)

記入日:2023-02-18 編集日:2023-02-18

SQL見るだけクエリ。今回は全国12万件の郵便番号データのテーブルから、
addressカラムに、佐藤または佐々木の文字が含まれているレコードを取得してみようと思います。
正規表現を使って検索する必要がありますので REGEXP演算子を活用しようと思います。

この記事を読むと(約5分)
12万件程度のデータから、正規表現を使って指定の文字を含む物を取得する方法を知る事ができます。

postal_codeというテーブルを準備しています。
このテーブルには全国12万件の郵便番号情報が保存されています。

addressカラムには、市区町村以下の文字が保存されています。

さていつもの様に、テーブルの情報を取得するSQLに関して、注目する部分は、以下の9~10行目のみです。

SELECT postal7, pref, city, address FROM postal_code
WHERE address REGEXP "佐藤|佐々木"

この部分でaddressカラムに、佐藤または佐々木の文字が含まれているレコードを取得しています。

REGEXP演算子を使って、

// addressカラムの中で文字列に、佐藤もしくは佐々木 を含むもの
address REGEXP "佐藤|佐々木"

を取得条件(WHERE )にしております。


try {
    include_once '../model/class.php';

    // データベース接続
    $database = new Database();
    $db = $database->connect();

    // SQLを準備し、パラメータをバインドする SELECT * FROM tab1 WHERE emp_name REGEXP 'Suzu|Kiza';
    $query = 'SELECT postal7, pref, city, address FROM postal_code 
    WHERE address REGEXP "佐藤|佐々木"';
    $stmt = $db->prepare($query);

    // 実行する
    $stmt->execute();

    // 結果を取得する
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
    print_r($result);

    // データベースから切断する
    $database->disconnect();

} catch(PDOException $e) {
    echo $e->getMessage();
}

これを実行すると、二次元連想配列で、取得することができます。

            Array
(
    [0] => Array
        (
            [postal7] => 9451354
            [pref] => 新潟県
            [city] => 柏崎市
            [address] => 佐藤池新田
        )

    [1] => Array
        (
            [postal7] => 9570082
            [pref] => 新潟県
            [city] => 新発田市
            [address] => 佐々木
        )

    [2] => Array
        (
            [postal7] => 9593121
            [pref] => 新潟県
            [city] => 村上市
            [address] => 佐々木
        )

    [3] => Array
        (
            [postal7] => 9230821
            [pref] => 石川県
            [city] => 小松市
            [address] => 佐々木町
        )

    [4] => Array
        (
            [postal7] => 4300807
            [pref] => 静岡県
            [city] => 浜松市中区
            [address] => 佐藤
        )

    [5] => Array
        (
            [postal7] => 4400853
            [pref] => 愛知県
            [city] => 豊橋市
            [address] => 佐藤
        )

    [6] => Array
        (
            [postal7] => 4400853
            [pref] => 愛知県
            [city] => 豊橋市
            [address] => 佐藤町
        )

    [7] => Array
        (
            [postal7] => 4440936
            [pref] => 愛知県
            [city] => 岡崎市
            [address] => 上佐々木町
        )

    [8] => Array
        (
            [postal7] => 4440935
            [pref] => 愛知県
            [city] => 岡崎市
            [address] => 下佐々木町
        )

    [9] => Array
        (
            [postal7] => 6200901
            [pref] => 京都府
            [city] => 福知山市
            [address] => 上佐々木
        )

    [10] => Array
        (
            [postal7] => 6200908
            [pref] => 京都府
            [city] => 福知山市
            [address] => 下佐々木
        )

    [11] => Array
        (
            [postal7] => 6200909
            [pref] => 京都府
            [city] => 福知山市
            [address] => 中佐々木
        )

    [12] => Array
        (
            [postal7] => 6680325
            [pref] => 兵庫県
            [city] => 豊岡市
            [address] => 但東町佐々木
        )

    [13] => Array
        (
            [postal7] => 6450011
            [pref] => 和歌山県
            [city] => 日高郡みなべ町
            [address] => 気佐藤
        )

    [14] => Array
        (
            [postal7] => 7160113
            [pref] => 岡山県
            [city] => 高梁市
            [address] => 成羽町佐々木
        )

    [15] => Array
        (
            [postal7] => 7711342
            [pref] => 徳島県
            [city] => 板野郡上板町
            [address] => 佐藤塚
        )

    [16] => Array
        (
            [postal7] => 7618023
            [pref] => 香川県
            [city] => 高松市
            [address] => 鬼無町佐藤
        )

    [17] => Array
        (
            [postal7] => 7800954
            [pref] => 高知県
            [city] => 高知市
            [address] => 佐々木町
        )

    [18] => Array
        (
            [postal7] => 7871604
            [pref] => 高知県
            [city] => 四万十市
            [address] => 西土佐藤ノ川
        )

)
			

addressカラムに、佐藤もしくは佐々木の
文字列が含まれているレコードを取得

postal7 pref city address
9451354
新潟県
柏崎市
佐藤池新田
9570082
新潟県
新発田市
佐々木
9593121
新潟県
村上市
佐々木
9230821
石川県
小松市
佐々木町
4300807
静岡県
浜松市中区
佐藤
4400853
愛知県
豊橋市
佐藤
4400853
愛知県
豊橋市
佐藤町
4440936
愛知県
岡崎市
上佐々木町
4440935
愛知県
岡崎市
下佐々木町
6200901
京都府
福知山市
上佐々木
6200908
京都府
福知山市
下佐々木
6200909
京都府
福知山市
中佐々木
6680325
兵庫県
豊岡市
但東町佐々木
6450011
和歌山県
日高郡みなべ町
気佐藤
7160113
岡山県
高梁市
成羽町佐々木
7711342
徳島県
板野郡上板町
佐藤塚
7618023
香川県
高松市
鬼無町佐藤
7800954
高知県
高知市
佐々木町
7871604
高知県
四万十市
西土佐藤ノ川

SQLの使いどころ

サイトに大量の情報を掲載することは、ユーザーにとってとても便利なことです。しかし、情報が多すぎると、目的の情報を見つけるのが困難になります。そのため、SQLを使用することで、情報を効率的に管理することができます。

SQLを使用することで、データベース内の情報を検索したり、フィルタリングしたりすることができます。これにより、ユーザーは目的の情報をスムーズかつ簡単に見つけることができます。

また、SQLを使用することで、データを集計したり、統合したりすることもできます。これにより、ユーザーはさまざまな視点から情報を分析することができます。つまり、サイトに多くの情報を掲載することが重要である一方で、その情報を効率的かつ簡単に管理することが求められる場合には、SQLが不可欠であるといえます。

KK

機械工学を専攻。工業デザイナーとして、国内及び海外の自動車・搬送ラインの設計などに従事した後、2003年にウェブシステム会社を設立。UI設計やウェブシステムの開発、DX化のディレクションなどを行っています。