Mysql實(shí)現(xiàn)模糊查詢的兩種方式(like子句?、正則表達(dá)式)
通常在實(shí)際應(yīng)用中,會(huì)涉及到模糊查詢的需求,查詢?cè)?MySQL 中使用 SQL SELECT 命令來(lái)讀取數(shù)據(jù),有條件的查詢可以在 SELECT 語(yǔ)句中使用 WHERE 子句來(lái)獲取記錄
有時(shí)候我們需要獲取某字段含有 “xxxxx” 字符的所有記錄,這時(shí)就是模糊查詢,下面介紹一下在MySQL中實(shí)現(xiàn)模糊查詢的兩種方式
前言
MySQL 查詢數(shù)據(jù)使用SQL SELECT語(yǔ)句
語(yǔ)法
MySQL數(shù)據(jù)庫(kù)中查詢數(shù)據(jù)通用的 SELECT 語(yǔ)法:
SELECT column_name, column_name FROM table_name [WHERE Clause] [LIMIT N][ OFFSET M]
說(shuō)明:
- SELECT 命令可以讀取一條或者多條記錄,一個(gè)字段信息或者多個(gè)字段信息,可使用星號(hào)(*)來(lái)代替其他字段返回表的所有字段數(shù)據(jù)
- SELECT 命令 from 后可以使用一個(gè) / 多個(gè)表,表之間使用逗號(hào)( , ) 分割
- SELECT 命令 使用 WHERE 語(yǔ)句來(lái)包含任何條件
- SELECT 命令 使用 LIMIT 屬性來(lái)設(shè)定返回的記錄數(shù)。
- SELECT 命令 使用 OFFSET指定SELECT語(yǔ)句開(kāi)始查詢的數(shù)據(jù)偏移量。默認(rèn)情況下偏移量為0。
like子句
根據(jù)上述的語(yǔ)法,模糊查詢的限制位置在 where 語(yǔ)句后,即like 在 where 中使用
語(yǔ)法
SELECT field1, field2,....,fieldN FROM table_name WHERE field1 LIKE condition;
說(shuō)明:
- LIKE子句 在 WHERE 子句中使用,若 condition 為明確的數(shù)據(jù),則 LIKE子句 相當(dāng)于 等號(hào) =(精準(zhǔn)查詢)
- 通常,condition 會(huì)包含 % ,即 LIKE 通常與 % 一同使用,進(jìn)行搜索(模糊查詢), xxx% 查找指定前綴的記錄,%xxx 查找指定后綴的記錄,%xxx% 查找包含指定內(nèi)容的記錄
示例
前提準(zhǔn)備:創(chuàng)建表與插入數(shù)據(jù)
-- ---------------------------- -- 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 '產(chǎn)品名稱', `price` decimal(10, 2) UNSIGNED NOT NULL COMMENT '產(chǎn)品價(jià)格', 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);
初始數(shù)據(jù):
select * from product;
結(jié)果:
需求一:查詢指定前綴的記錄
查詢 產(chǎn)品名稱 為 oppo(即前綴為oppo) 的產(chǎn)品信息
select * from product where product_name like "OPPO%";
結(jié)果:
需求二:查詢指定后綴的記錄
查詢產(chǎn)品系列為pro系列的產(chǎn)品,即 產(chǎn)品名稱 后綴為 pro 的產(chǎn)品信息
select * from product where product_name like "%pro";
結(jié)果:
需求二:查詢包含指定內(nèi)容的記錄
查詢 產(chǎn)品名稱 包含 3 的產(chǎn)品
select * from product where product_name like "%3%";
結(jié)果:
正則表達(dá)式
除了上述方法,MySQL 也支持正則表達(dá)式的匹配,通過(guò)使用 REGEXP 操作符來(lái)進(jìn)行正則表達(dá)式匹配
語(yǔ)法
// 不區(qū)分大小寫的查詢 SELECT field1, field2,....,fieldN FROM table_name WHERE field1 regexp condition; // 區(qū)分大小寫的查詢 SELECT field1, field2,....,fieldN FROM table_name WHERE field1 regexp binary condition;
說(shuō)明:
- regexp 操作符也在 WHERE 子句中使用,若 condition 不能為明確的數(shù)據(jù),需要為正則表達(dá)式
- 默認(rèn) regexp 操作符 的查詢不區(qū)分大小寫,如若想?yún)^(qū)分大小寫,可以在 regexp 操作符后 加上 binary 關(guān)鍵字即可
在 REGEXP 操作符中可以使用如下的正則模式:
模式 | 描述 |
---|---|
^ | 匹配輸入字符串的開(kāi)始位置。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置 |
$ | 匹配輸入字符串的結(jié)束位置。如果設(shè)置了RegExp 對(duì)象的 Multiline 屬性,$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置 |
. | 匹配除 “\n” 之外的任何單個(gè)字符。要匹配包括 ‘\n’ 在內(nèi)的任何字符,請(qǐng)使用像 ‘[.\n]’ 的模式 |
[…] | 字符集合。匹配所包含的任意一個(gè)字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’ |
[^…] | 負(fù)值字符集合。匹配未包含的任意字符。例如, ‘[^abc]’ 可以匹配 “plain” 中的’p’ |
p1|p2|p3 | 匹配 p1 或 p2 或 p3。例如,‘z|food’ 能匹配 “z” 或 “food”。‘(z|f)ood’ 則匹配 “zood” 或 “food” |
* | 匹配前面的子表達(dá)式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等價(jià)于{0,} |
+ | 匹配前面的子表達(dá)式一次或多次。例如,‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等價(jià)于 {1,} |
{n} | n 是一個(gè)非負(fù)整數(shù)。匹配確定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的兩個(gè) o |
{n,m} | m 和 n 均為非負(fù)整數(shù),其中n <= m。最少匹配 n 次且最多匹配 m 次 |
示例
需求一:查詢指定前綴的記錄
查詢 產(chǎn)品名稱 為 oppo(即前綴為oppo) 的產(chǎn)品信息 不區(qū)分大小寫
select * from product where product_name regexp "^oppo";
查詢 產(chǎn)品名稱 為 oppo(即前綴為oppo) 的產(chǎn)品信息 區(qū)分大小寫
select * from product where product_name regexp binary "^oppo";
結(jié)果:
需求二:查詢指定后綴的記錄
查詢產(chǎn)品系列為pro系列的產(chǎn)品,即 產(chǎn)品名稱 后綴為 pro 的產(chǎn)品信息
select * from product where product_name regexp "pro$";
結(jié)果:
需求二:查詢包含指定內(nèi)容的記錄
查詢 產(chǎn)品名稱 包含 3 的產(chǎn)品
select * from product where product_name regexp "3+";
結(jié)果:
總結(jié)
上述介紹了兩種模糊匹配的實(shí)現(xiàn)方式,like 子句 與 正則表達(dá)式
很多場(chǎng)景下會(huì)使用 like 來(lái)對(duì)字符串進(jìn)行匹配,從而實(shí)現(xiàn)模糊查詢,但是這些場(chǎng)景往往非常簡(jiǎn)單,而正則表達(dá)式是一個(gè)非常強(qiáng)大的文本檢索過(guò)濾工具,適用在很復(fù)雜的場(chǎng)景
到此這篇關(guān)于Mysql實(shí)現(xiàn)模糊查詢(like子句 、正則表達(dá)式)的文章就介紹到這了,更多相關(guān)Mysql模糊查詢方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章

winxp 安裝MYSQL 出現(xiàn)Error 1045 access denied 的解決方法

linux 下配置安裝mysql以及配置【經(jīng)驗(yàn)】

Mysql 5.7 服務(wù)下載安裝圖文教程(經(jīng)典版)

MYSQL數(shù)據(jù)庫(kù)基礎(chǔ)之Join操作原理

mysql 5.7.21 安裝配置方法圖文教程(window)

關(guān)于MySQL 大批量插入時(shí)如何過(guò)濾掉重復(fù)數(shù)據(jù)