0
点赞
收藏
分享

微信扫一扫

Mysql 入门之过滤数据(二)

关键字: and 、or、in、not

知识点

1、and 并列关系,可对多个列进行过滤 2、or 或关系,满足条件之一即可 3、in 指定范围过滤 4、not 否定关系,取反

思考

1、and 和or 若同时存在,哪个优先级最高? 2、in 使用的优势? 3、not 存在的意义是什么?

案列

数据表如下:

SELECT * FROM products img.png

and、or

1、and 和or

SELECT * FROM products WHERE vend_id = 1001 AND prod_price < 10; 

SELECT * FROM products WHERE vend_id = 1002 OR  vend_id = 1003;

结果分别如下:

and :ID为1001且价格小于10的记录 img_1.png or :ID为1002或ID为1003的记录 img_2.png

2、and 和or 同时使用对比案列 若我们想要获取id 为1002或1003,而且价格不低于10的记录

SELECT * FROM products WHERE vend_id = 1002 OR vend_id = 1003 AND prod_price >= 10

以上写法的结果如下: img_3.png 很明显有两条记录不是我们希望的,原因是and的优先级要比or高,因此机器对命令的理解是: 获取id为1002 或者ID为1003的且价格不低于10的记录,而不会对1002的价格做限定

因此我们需要按照下面的写法,并且建议在多条件时使用这种方法避免歧义

SELECT * FROM products WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price >= 10

结果如下; img_4.png

in

SELECT * FROM products WHERE vend_id IN (1002,1003)

结果: img_5.png

根据结果看,其实就是or的另一种写法,对吧?那么回到思考的问题:in的优势? 1、设想如果vend_id的范围比较多,就需要写很多or ,没有in直观,如果写到更复杂的查询语句,不具备可读性 2、使用in是可以加快查询速度的(需要对Mysql稍微深入了解,并且需要数据结构的知识) 3、最核心的优势在于in可以包含其他select语句

not

SELECT * FROM products WHERE vend_id NOT IN (1002,1003)

结果: img_6.png

ps:not在简单的子句优势并不大,但在复杂的子句中优势很明显,就如上个语句中,找出范围之外的数据记录就很方便

另外,在Mysql中not支持对in、between、exists取反

举报

相关推荐

0 条评论