<li id="jut4n"></li>
  • 系統城裝機大師 - 固鎮縣祥瑞電腦科技銷售部宣傳站!

    當前位置:首頁 > 數據庫 > Mysql > 詳細頁面

    Mysql實現模糊查詢的兩種方式(like子句 、正則表達式)

    時間:2022-10-02來源:www.ship-models.net作者:電腦系統城

    通常在實際應用中,會涉及到模糊查詢的需求,查詢在 MySQL 中使用 SQL SELECT 命令來讀取數據,有條件的查詢可以在 SELECT 語句中使用 WHERE 子句來獲取記錄

    有時候我們需要獲取某字段含有 “xxxxx” 字符的所有記錄,這時就是模糊查詢,下面介紹一下在MySQL中實現模糊查詢的兩種方式

    前言

    MySQL 查詢數據使用SQL SELECT語句

    語法

    MySQL數據庫中查詢數據通用的 SELECT 語法:

    1
    2
    3
    4
    SELECT column_name, column_name
    FROM table_name
    [WHERE Clause]
    [LIMIT N][ OFFSET M]

    說明:

    • SELECT 命令可以讀取一條或者多條記錄,一個字段信息或者多個字段信息,可使用星號(*)來代替其他字段返回表的所有字段數據
    • SELECT 命令 from 后可以使用一個 / 多個表,表之間使用逗號( , ) 分割
    • SELECT 命令 使用 WHERE 語句來包含任何條件
    • SELECT 命令 使用 LIMIT 屬性來設定返回的記錄數。
    • SELECT 命令 使用 OFFSET指定SELECT語句開始查詢的數據偏移量。默認情況下偏移量為0。

    like子句

    根據上述的語法,模糊查詢的限制位置在 where 語句后,即like 在 where 中使用

    語法

    1
    2
    3
    SELECT field1, field2,....,fieldN
    FROM table_name
    WHERE field1 LIKE condition;

    說明:

    • LIKE子句 在 WHERE 子句中使用,若 condition 為明確的數據,則 LIKE子句 相當于 等號 =(精準查詢)
    • 通常,condition 會包含 % ,即 LIKE 通常與 % 一同使用,進行搜索(模糊查詢), xxx% 查找指定前綴的記錄,%xxx 查找指定后綴的記錄,%xxx% 查找包含指定內容的記錄

    示例

    前提準備:創建表與插入數據

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    -- ----------------------------
    -- Table structure for product
    -- ----------------------------
    DROP TABLE IF EXISTS `product`;
    CREATE TABLE `product`  (
      `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
      `product_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '產品名稱',
      `price` decimal(10, 2) UNSIGNED NOT NULL COMMENT '產品價格',
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
     
    -- ----------------------------
    -- Records of product
    -- ----------------------------
    INSERT INTO `product` VALUES (1, 'Apple iPhone 13 (A2634)', 6799.00);
    INSERT INTO `product` VALUES (2, 'HUAWEI P50 Pro', 6488.00);
    INSERT INTO `product` VALUES (3, 'MIX4', 4999.00);
    INSERT INTO `product` VALUES (4, 'OPPO Find X3', 3999.00);
    INSERT INTO `product` VALUES (5, 'OPPO Find X4', 3999.00);
    INSERT INTO `product` VALUES (6, 'OPPO Find Pro', 6488.00);
    INSERT INTO `product` VALUES (7, 'vivo X70 Pro+', 5999.00);

    初始數據:

    1 select * from product;

    結果:

    請添加圖片描述

    需求一:查詢指定前綴的記錄

    查詢 產品名稱 為 oppo(即前綴為oppo) 的產品信息

    1 select * from product where product_name like "OPPO%";

    結果:

    請添加圖片描述

    需求二:查詢指定后綴的記錄

    查詢產品系列為pro系列的產品,即 產品名稱 后綴為 pro 的產品信息

    1 select * from product where product_name like "%pro";

    結果:

    請添加圖片描述

     

    需求二:查詢包含指定內容的記錄

    查詢 產品名稱 包含 3 的產品

    1 select * from product where product_name like "%3%";

    結果:

    請添加圖片描述

    正則表達式

    除了上述方法,MySQL 也支持正則表達式的匹配,通過使用 REGEXP 操作符來進行正則表達式匹配

    語法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    // 不區分大小寫的查詢
    SELECT field1, field2,....,fieldN
    FROM table_name
    WHERE field1 regexp condition;
     
    // 區分大小寫的查詢
    SELECT field1, field2,....,fieldN
    FROM table_name
    WHERE field1 regexp binary condition;

    說明:

    • regexp 操作符也在 WHERE 子句中使用,若 condition 不能為明確的數據,需要為正則表達式
    • 默認 regexp 操作符 的查詢不區分大小寫,如若想區分大小寫,可以在 regexp 操作符后 加上 binary 關鍵字即可

    在 REGEXP 操作符中可以使用如下的正則模式:

    模式 描述
    ^ 匹配輸入字符串的開始位置。如果設置了 RegExp 對象的 Multiline 屬性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置
    $ 匹配輸入字符串的結束位置。如果設置了RegExp 對象的 Multiline 屬性,$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置
    . 匹配除 “\n” 之外的任何單個字符。要匹配包括 ‘\n’ 在內的任何字符,請使用像 ‘[.\n]’ 的模式
    […] 字符集合。匹配所包含的任意一個字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’
    [^…] 負值字符集合。匹配未包含的任意字符。例如, ‘[^abc]’ 可以匹配 “plain” 中的’p’
    p1|p2|p3 匹配 p1 或 p2 或 p3。例如,‘z|food’ 能匹配 “z” 或 “food”。‘(z|f)ood’ 則匹配 “zood” 或 “food”
    * 匹配前面的子表達式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等價于{0,}
    + 匹配前面的子表達式一次或多次。例如,‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等價于 {1,}
    {n} n 是一個非負整數。匹配確定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的兩個 o
    {n,m} m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次

    示例

    需求一:查詢指定前綴的記錄

    查詢 產品名稱 為 oppo(即前綴為oppo) 的產品信息 不區分大小寫

    1 select * from product where product_name regexp  "^oppo";

    查詢 產品名稱 為 oppo(即前綴為oppo) 的產品信息 區分大小寫

    1 select * from product where product_name regexp binary "^oppo";

    結果:

    請添加圖片描述

    需求二:查詢指定后綴的記錄

    查詢產品系列為pro系列的產品,即 產品名稱 后綴為 pro 的產品信息

    1 select * from product where product_name regexp "pro$";

    結果:

    請添加圖片描述

    需求二:查詢包含指定內容的記錄

    查詢 產品名稱 包含 3 的產品

    1 select * from product where product_name regexp "3+";

    結果:

    請添加圖片描述

    總結

    上述介紹了兩種模糊匹配的實現方式,like 子句 與 正則表達式

    很多場景下會使用 like 來對字符串進行匹配,從而實現模糊查詢,但是這些場景往往非常簡單,而正則表達式是一個非常強大的文本檢索過濾工具,適用在很復雜的場景

    分享到:

    相關信息

    系統教程欄目

    欄目熱門教程

    人氣教程排行

    站長推薦

    熱門系統下載

    淑芬两腿间又痒了