首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 入門

MySQL LIKE 子句模糊查詢完全指南:%、_ 通配符與 PHP 實戰應用

     編輯:MySQL 入門

MySQL LIKE 子句模糊查詢完全指南:%、_ 通配符與 PHP 實戰應用

當精確比對(=)無法滿足「包含某關鍵字」、「以特定前綴開頭」、「符合特定格式」等需求時,LIKE 子句 是最直觀、最常用的模糊匹配工具。它支援兩大通配符,結合 WHERE 即可實現靈活的字串篩選。

兩大核心通配符

通配符 含義 相當於正則 範例
%匹配任意長度字串(含 0 字符).*'%jay%' 匹配含 "jay" 的所有字串
_匹配單一任意字符.'_ay' 匹配 "jay"、"bay"、"day" 等三字元字串

注意: 若模式中不含任何通配符,LIKE 行為等同於 =。

核心語法

SELECT column_list
FROM table_name
WHERE column_name LIKE pattern
[AND|OR column_name2 LIKE pattern2 ...];
  • 可用於 SELECT、DELETE、UPDATE 的 WHERE 子句。
  • 支援 AND、OR 組合多條件。
  • 模式字串需用單引號包裹。

命令列實戰:runoob_tbl 表

查找作者名以 "jay" 結尾的記錄

mysql> SELECT * FROM runoob_tbl WHERE runoob_author LIKE '%jay';
+-------------+----------------+-----------------+-----------------+
| runoob_id | runoob_title | runoob_author | submission_date |
+-------------+----------------+-----------------+-----------------+
| 3 | JAVA Tutorial | Sanjay | 2007-05-21 |
+-------------+----------------+-----------------+-----------------+

更多實用模式範例

  • LIKE 'John%' — 以 "John" 開頭
  • LIKE '%SQL%' — 含 "SQL" 關鍵字
  • LIKE '_a%' — 第二個字符為 'a'
  • LIKE '___' — 精確三字符長度
  • LIKE '%\%%' — 含字面字符 "%"(需轉義)

轉義特殊字符:ESCAPE 子句

若需匹配字面 %、_、\,可自定義轉義字符:

mysql> SELECT * FROM t WHERE col LIKE '%\%%' ESCAPE '\';
-- 找出含 "%" 字符的行

PHP 腳本整合:關鍵字搜尋功能

<?php
$keyword = $_GET['q'] ?? '';
$keyword = mysqli_real_escape_string($conn, $keyword);
$pattern = "%{$keyword}%"; // 前後模糊匹配

$sql = "SELECT runoob_id, runoob_title, runoob_author, submission_date
        FROM runoob_tbl
        WHERE runoob_author LIKE ?";
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmt, 's', $pattern);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);

while ($row = mysqli_fetch_assoc($result)) {
    echo "ID: {$row['runoob_id']} <br>";
    echo "Title: {$row['runoob_title']} <br>";
    echo "Author: {$row['runoob_author']} <br><hr>";
}
?>

效能陷阱與優化策略

  1. 前導 % 導致全表掃描: LIKE '%keyword%' 無法使用索引,大表極慢。
  2. 後導 % 可用索引: LIKE 'keyword%' 可利用 B-Tree 索引範圍掃描。
  3. 全文檢索替代: 大量模糊搜尋場景,請使用 FULLTEXT INDEX + MATCH() AGAINST() 或 Elasticsearch。
  4. 前綴索引: 長字串欄位可建 INDEX (col(10)) 加速前綴匹配。

大小寫敏感控制

  • 預設 utf8mb4_general_ci:不區分大小寫,LIKE 'ABC' 也匹配 "abc"。
  • 需區分大小寫:使用 COLLATE utf8mb4_bin 或 BINARY 關鍵字:
    WHERE col LIKE 'ABC' COLLATE utf8mb4_bin

善用 LIKE 解決輕量級模糊查詢,遇到高頻、大數據量搜尋需求時果斷升級全文檢索引擎,是架構演進的必經之路。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved