phpstorm 正则匹配搜索_MySQL知识(三)——数据过滤,正则表达式搜索

本文介绍了MySQL中的数据过滤方法,包括AND、OR、IN和NOT操作符的使用,以及用通配符LIKE和下划线进行模糊搜索。此外,详细讲解了正则表达式的应用,如基础字符匹配、OR匹配、匹配范围和特殊字符,以及定位符的使用,帮助读者掌握更精确的数据搜索技巧。
摘要由CSDN通过智能技术生成

7a84b9a2085eded242fa534002fd74e6.png

一.数据过滤

1. 组合where子句

为了进行更强大的过滤控制,MySQL允许给出多个where子句,这些子句可以以两种方式使用:以AND子句的方式或OR子句的方式使用。

操作符:用来联结或改变where子句中子句的关键字。也称为逻辑操作符。

AND操作符:

AND用在where子句中的关键字,用来指示检索满足所有给定条件的行。

Select prod_id,prod_price,prod_name

From products

Where vend_id = 1003 AND prod_price<=10;

OR 操作符

OR操作符与AND操作符不同,它指示MySQL检索匹配任一条件的行。

Select prod_name,prod_price

From produnts

Where vend_id = 1002 OR vend_id = 1003;

2. 计算次序

在SQL在处理OR操作符前,优先处理AND操作符。为避免发生错误,优先计算的条件需要用圆括号括起来。

Select pro_name,pro_price

From products

Where (vend_id = 1002 OR ven_id = 1003)AND pro_price>=10;

3. IN 操作符

圆括号在WHERE子句中还有一种用法,IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取合法值的由逗号分隔符的清单,包括在圆括号中。

Select pro_name,pro_price

From products

Where vend_id IN (1002,1003)

ORDER BY prod_name;

此select语句检索供应商1002和1003制造的所有产品。IN操作符的功能与OR有相似之处,但比OR操作符清单执行更快。

4. NOT操作符

NOT 操作符用来否定它之后所跟的任何条件。

Select prod_name,pro_price

From products

Where vend_id NOT IN (1002,1003)

ORDER BY prod_name;

二.用通配符进行过滤

1. LIKE操作符

通配符:用来匹配值的一部分的特殊字符

搜索模式:由字面值,通配符或两者组合构成的搜索条件

为了搜索子句中使用通配符,必须使用LIKE 操作符。LIKE指示MySQL后跟的搜索模式利用通配符匹配而不是直接相等匹配。

2. 百分号(%)通配符

最常用的通配符是百分号(%),在搜索串中,%表示任何字符出现任意次数。如”jet%”表示搜索以jet开头的词。“%jet%”表示匹配任何位置包含文本jet的值。”%anvil”表示末尾为anvil的词。

Select prod_id,prod_name

From products

Where pro_name LIKE “jet%”;

  • 注意:

%通配符不可以用来匹配空值。

3.下划线(-)通配符

下划线的用途与%一样,但下划线只匹配单个字符不是多个字符。

Select pro_id,prod_name

From products

Where prod_name LIKE “_ton anvil”;

搜索的是ton anvil 前面之后一个字符的文本。

  • l注意:

与%能匹配0个字符不一样,-总是匹配一个字符,不能多也不能少。

三.用正则表达式进行搜索

1. 使用MySQL正则表达式

正则表达式是用来匹配文本的特殊的串(字符集合)。想要从文本文件中提取电话号码,可以使用正则表达式。如果你需要查找名字中间有数字的所有文件,可以使用一个正则表达式。如果想要在一个文本块中找到所有的重复的单词,可以使用一个正则表达式。

2. 基础字符匹配

下面检索列prod_name包含文本1000的所有行:

Select pro_name

From products

Where prod_name REGEXP ‘1000’

Order by prod_name;

正则表达式‘.000’。是正则表达式语言中一个特殊的字符,它表示匹配任意一个字符,因此,1000和2000都匹配且返回。

Select prod_name

From products

Where prod_name REGEXP ‘.000’

Order by prod-name;

  • 注意:

Like与Regexp的差别,LIKE匹配整个列。而REGEXP在列值内进行匹配,如果被匹配的文本在列值中出现,Regexp将会找到它,相应的行将会返回。

3. 进行OR匹配

为搜索两个串之一,(或者为这个串,或者为那个串),可以使用| ,

Select pro_name

From products

Where prod_name Regexp ‘1000|2000’

Order by prod_name;

返回的结果中1000和2000都匹配并都返回。

|字符的功能类似于在select语句中使用or语句,多个or条件可并入单个正则表达式。

4. 匹配几个字符之一

可通过指定一组用[和]括起来的字符来完成,

Select prod_name

From products

Where prod_name REGEXP ‘[123] Ton’

Order by prod_name;

这里使用了正则表达式[123] Ton。[123]定义一组字符,它的意思是匹配1或2或3,因此,1 ton和2ton都匹配且返回。

  • 注意:

‘1|2|3 Ton’的含义则表示‘1’,‘2’,‘3ton’。

[^123]却匹配除这些字符外的任何东西。

5. 匹配范围

集合可用来定义要匹配的一个或多个字符。

如[0-9]以及[6-9],[a-z]匹配任何字母字符

Select prod_name

From products

Where prod_name REGEXP ‘[1-5] Ton’

Order by prod_name;

6. 匹配特殊字符

如果需要匹配特殊字符,必须用为前导,-表示查找-,.表示查找.

Select vend_name

From vendors

Where vend_name REGEXP ‘.’

Order by vend_name;

7. 匹配多个实例

复杂的匹配需要使用到正则表达式重复元字符来完成

a1653eb70e751d4dfef13db7c2c8b1ec.png

如select prod_name

From products

Where prod_name REGEXP ’([0-9]sticks?)’

这里的REGEXP’([0-9]sticks?)’,需要解释一下,(匹配),[0-9]匹配任意数字,sticks?匹配stick和sticks(s后的?使s可选,因为?匹配它前面的任何字符的0次或1次出现),)匹配)。

另一个例子

Select prod_name

From products

Where prod_name REGEXP ‘[[:dight:]]{4}’

Order by prod_name;

这里的‘[[:dight:]]{4}’, [:dight:]表示匹配任意的数字,{4}表示前面的字符出现4次,即任意4位数。

8. 定位符

为了匹配特定位置的文本,需要使用定位符。

c9eaa2f1ff9160ead07ac4fd0cf3b89d.png

如想找出一个数(包括以小数点开始的数)开始的所有产品

Select prod_name

From products

Where prod_name REGEXP ‘="">^[0-9.]’

Order by prod_name;

^匹配串的开始,’^[0-9.]’只在.或任意数字为串中第一个字符时才匹配它们。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值