<p id="rrtt5"></p><ruby id="rrtt5"></ruby>

      系統城裝機大師 - 固鎮縣祥瑞電腦科技銷售部宣傳站!

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

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

      時間:2022-10-02來源:www.1999hs.com作者:電腦系統城

      通常在實際應用中,會涉及到模糊查詢的需求,查詢在 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 來對字符串進行匹配,從而實現模糊查詢,但是這些場景往往非常簡單,而正則表達式是一個非常強大的文本檢索過濾工具,適用在很復雜的場景

      分享到:

      相關信息

      系統教程欄目

      欄目熱門教程

      人氣教程排行

      站長推薦

      熱門系統下載

      天堂资源中文WWW,久久精品女人天堂AV免费观看,无码专区一ⅤA亚洲V天堂,免费观看在线AⅤ天堂视频