MYSQL必知必会(三)过滤数据

本文详细介绍如何在MYSQL中使用WHERE子句进行数据过滤,包括检查单个值、范围值、空值,以及组合使用AND、OR、IN、NOT操作符和通配符进行复杂条件筛选。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

过滤数据

使用WHERE字句

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

SELECT prod_name,prod_price
FROM products
where prod_price = 2.5;

ORDER BY和WHERE同时使用时
ORDER BY位于WHERE之后

WHERE字句操作符

在这里插入图片描述

检查单个值

SELECT prod_name,prod_price
FROM products
where prod_name = 'fuses';
SELECT prod_name,prod_price
FROM products
where prod_price<10;

不匹配检查

SELECT vend_id,prod_name
FROM products
where vend_id <> 1003;
SELECT vend_id,prod_name
FROM products
where vend_id != '1003';

范围值检查

BETWEEN匹配范围中所有的值,包括指定的开始值和结束值

SELECT prod_name,prod_price
FROM products
where prod_price BETWEEN 5 AND 10;

空值检查

NULL无值(no value),它与字段包含0、空字符串或仅仅包含空格不同

SELECT prod_name
FROM products
where prod_price IS NULL;##返回价格为空的名字

在过滤数据时,一定要验证返回数据中确实给出了被过滤列具有NULL的行

SELECT cust_id
FROM customers
where cust_email IS NULL;

数据过滤

组合WHERE字句

AND操作符

SELECT prod_id,prod_price,prod_name
FROM products
where vend_id = 1003 AND prod_price <=10;

OR操作符

SELECT prod_price,prod_name
FROM products
where vend_id = 1003 OR vend_id=1002;

计算次序

假如需要列出价格为10美元(含)以上且由1002或1003制造的所有产品

SELECT prod_name,prod_price
FROM products
where vend_id = 1002 OR vend_id=1003 AND prod_price >=10 ;

在这里插入图片描述
返回的行中有两行价格小于10美元,显然,返回的行未按预期的进行过滤。为什么会这样呢?
原因在于计算的次序。SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符
AND 优先级大于 OR

SELECT prod_name,prod_price
FROM products
where (vend_id = 1002 OR vend_id=1003) AND prod_price >=10 ;

在这里插入图片描述
此为我们所想要的
:任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确地分组操作符

IN操作符

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

SELECT prod_name,prod_price
FROM products
where vend_id IN (1002,1003)
ORDER BY prod_name;

IN操作符后跟由逗号分隔的合法值清单,整个清单必须括在圆括号中。

IN操作符完成与OR相同的功能

SELECT prod_name,prod_price
FROM products
where vend_id =1002 OR vend_id=1003
ORDER BY prod_name;

IN操作符优点

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

NOT操作符

功能: 否定它之后所跟的任何条件

SELECT prod_name,prod_price
FROM products
where vend_id NOT IN(1002,1003)
ORDER BY prod_name;

用通配符进行过滤

LIKE操作符

通配符(wildcard):用来匹配值的一部分的特殊字符
搜索模式(search pattern):由字面值、通配符或两者组合构成的搜索条件
为在搜索子句中使用通配符,必须使用LIKE操作符

百分号(%)通配符

%:表示任何字符出现任意次数

#找出所有以词jet起头的产品
SELECT prod_id,prod_name
FROM products
where prod_name LIKE 'jet%'
SELECT prod_id,prod_name
FROM products
where prod_name LIKE '%anvil%'

注:%可匹配 0,1,多个字符,不能匹配NULL

下划线(_)通配符

:下划线(_)只能匹配一个字符,要注意空格,空格也是字符

SELECT prod_id,prod_name
FROM products
where prod_name LIKE '_ ton anvil'

在这里插入图片描述
和%比较

SELECT prod_id,prod_name
FROM products
where prod_name LIKE '% ton anvil'

在这里插入图片描述

使用通配符技巧

通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长

技巧:

  1. 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符
  2. 在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的
  3. 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值