mysql where 函数 mysql where用法,查询教程

函数相关视频讲解:

 008_ 输出h字符_REPL_引号_括号_什么是函数

 数据结构与算法-栈-Go代码演示版

 微积分基本想法

 数据科学中的函数

一、过滤数据

1.1 使用WHERE子句

SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名(FROM子句)之后给出,如下所示:

SELECT id,home FROM table1 WHERE name = "TN6";

WHERE子句的位置: 在同时使用ORDER BYWHERE子句时,应该让ORDER BY位于WHERE之后,否则将会产生错误。

1.2 WHERE子句操作符

MySQL支持下表列出的所有条件操作符:

操作符

说明

=

等于

<>

不等于

!=

不等于

<

小于

<=

小于等于

>

大于

>=

大于等于

BETWEEN

指定的两个值之间

上述指令使用示例如下:
范围检查

SELECT id,home FROM table1 WHERE id < 6;
SELECT id,home FROM table1 WHERE id <= 6;

不匹配检查

SELECT id,home FROM table1 WHERE name <> "TN6";

范围值检查

SELECT id,home FROM table1 WHERE id BETWEEN 4 AND 6;

空值检查
SELECT语句有一个特殊的WHERE子句,可用来检查具有NULL值的列。该子句是IS NULL。其语法示例如下:

SELECT id FROM table1 WHERE home IS NULL;

二、数据过滤

2.1 组合WHERE子句

mysql允许给出多个WHERE子句,这些子句可以两种方式使用:以AND子句的方式或OR子句的方式使用。

2.1.1 AND操作符

SELECT id,phone FROM table1 WHERE name = "TN6" ADN id <= 5;

2.1.2 OR操作符

OR操作符与AND操作符不同,它指示mysql检索匹配任一条件的行,命令如下:

SELECT id,phone FROM table1 WHERE name = "TN6" OR id <= 5;

2.1.3 计算次序

WHERE可包含任意数目的ANDOR操作符。允许两者结合以进行复杂和高级的过滤。SQL在处理OR操作符前,优先处理AND操作符。可使用圆括号明确地分组相应的操作符。

任何时候使用具有ANDOR操作符的WHERE子句,都应该使用圆括号明确地分组操作符。

2.2 IN操作符

圆括号在WHERE子句中还有另外一种用法。IN操作符用来指定条件范围,表示的是列表,列表中的每个值都可以进行匹配。指定条件范围在圆括号中,示例如下。

SELECT id,phone FROM table1 WHERE id IN (2,5) ORDER BY name;

使用IN操作符的有如下优点:

  • 在使用长的合法选项清单时,IN操作符的语法更清楚和直观。
  • 在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。
  • IN操作符一般比OR操作符清单执行更快。
  • IN最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。

2.3 NOT操作符

WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件。

SELECT id,phone FROM table1 WHERE id NOT (2,5) ORDER BY name;

MySQL支持使用NOTINBETWEENEXISTS子句取反,这与多数其他DBMS允许使用NOT对各种条件取反有很大的差别。

三、用通配符进行过滤

3.1 LIKE操作符

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

3.1.1 百分号(%)通配符

最常使用的通配符是百分号%。在搜索串中,%表示任何字符出现任意次数。例如,为了找出所有以12开头的内容,可使用以下SELECT语句:

SELECT id,home FROM table1 WHERE phone LIKE '12%';

区分大小写 根据MySQL的配置方式,搜索是可以区分大小写的

3.1.1 下划线(_)通配符

另一个有用的通配符是下划线(_)。下划线的用途与%一样,但下划线只匹配单个字符而不是多个字符。

SELECT id,home FROM table1 WHERE name LIKE 'TN_';

3.2 使用通配符的技巧

  • 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
  • 在需要使用通配符时,除非绝对有必要,否则不要把它用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的。
  • 仔细注意通配符的位置。如果放错地方,可能不会返回预期的结果

四、使用正则表达式进行搜索

4.1 使用mysql正则表达式

4.1.1 基本字符匹配

下面的语句检索列name包含文本TN的所有行:

SELECT id,home FROM table1 WHERE name REGEXP 'TN';

此命令表示:REGEXP后所跟的内容作为正则表达式(与文字正文TN匹配的一个正则表达式)处理。

匹配不区分大小写: MySQL中的正则表达式匹配(自版本3.23.4后)不区分大小写(即大写和小写都匹配)

4.1.2 进行OR匹配

为搜索两个串之一,使用|,示例如下:

SELECT id,home FROM table1 WHERE name REGEXP 'TN|李';
4.1.3 匹配几个字符之一

匹配任何单一字符。若只想匹配特定的字符,可通过指定一组用[]括起来的字符来完成,如下所示:

SELECT id,home FROM table1 WHERE name REGEXP 'TN[26]';

这里,使用了正则表达式TN[26][26]定义一组字符,其含义是匹配2或6,因此, TN2TN6都匹配且返回。字符集合也可以被否定,即它们将匹配除指定字符外的任何东西。为否定一个字符集,在集合的开始处放置一个^即可,因此,[^26]匹配除这些字符外的任何东西。

4.1.4 匹配范围

集合可用来定义要匹配的一个或多个字符。例如,下面的集合将匹配数字0到9:[0123456789] 为简化这种类型的集合,可使用-来定义一个范围。下式功能上等同于上述数字列表:[0-9]

SELECT id,home FROM table1 WHERE name REGEXP 'TN[2-6]';
4.1.5 匹配范围
SELECT id,home FROM table1 WHERE name REGEXP '.';

.匹配任意字符,因此每个行都被检索出来
为了匹配特殊字符,必须用\\为前导。\\-表示查找-, \\.表示查找.
\\也用来引用元字符(具有特殊含义的字符),如下表所示:

元字符

说明

\\f

换页

\\n

换行

\\r

回车

\\t

制表

\\v

纵向制表

匹配\ 为了匹配反斜杠\字符本身,需要使用\\\

4.1.6 匹配字符类

为更方便工作,可以使用预定义的字符集,称为字符类(character class)。下表列出字符类以及它们的含义。

说明

[:alnum:]

任意字母和数字(同[a-zA-Z0-9]

[:alpha:]

任意字符(同[a-zA-Z]

[:blank:]

空格和制表(同[\\t]

[:cntrl:]

ASCII控制字符(ASCII 0到31和127)

[:digit:]

任意数字(同[0-9]

[:graph:]

[:print:]相同,但不包括空格

[:lower:]

任意小写字母(同[a-z]

[:print:]

任意可打印字符

[:punct:]

既不在[:alnum:]又不在[:cntrl:]中的任意字符

[:space:]

包括空格在内的任意空白字符(同[\\f\\n\\r\\t\\v]

[:upper:]

任意大写字母(同[A-Z]

[:xdigit:]

任意十六进制数字(同[a-fA-F0-9]

4.1.7 匹配多个实例

下表列出的正则表达式重复元字符来完成

元字符

说明

*

0个或多个匹配

+

1个或多个匹配(等于{1,}

0个或1个匹配(等于{0,1}

{n}

指定数目的匹配

{n,}

不少于指定数目的匹配

{n,m}

匹配数目的范围(m不超过255)

匹配连在一起的4位数字:

SELECT id, home FROM table1 WHERE name REGEXP '[[:digit:]]{4}';
.1.8 定位符

为了匹配特定位置的文本,需要使用下表列出的定位符:

元字符

说明

^

文本的开始

$

文本的结尾

[[:<:]]

词的开始

[[:>:]]

词的结尾

若想找出以一个数(包括以小数点开始的数)开始的所有内容,可使用^定位符,如下所示:

SELECT id,home FROM table1 WHERE name REGEXP '^[0-9\\.]';

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

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专注VB编程开发20年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值