亚洲精品中文字幕无码专区一,中文字幕av一区乱码深夜动态福利,粗大的内捧猛烈进出少妇

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

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

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

          時間:2022-10-02來源:www.snowmanhill.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 來對字符串進行匹配,從而實現模糊查詢,但是這些場景往往非常簡單,而正則表達式是一個非常強大的文本檢索過濾工具,適用在很復雜的場景

          分享到:

          相關信息

          系統教程欄目

          欄目熱門教程

          人氣教程排行

          站長推薦

          熱門系統下載

          亚洲精品中文字幕无码专区一,中文字幕av一区乱码深夜动态福利,粗大的内捧猛烈进出少妇