关键字: and 、or、in、not
知识点
1、and 并列关系,可对多个列进行过滤 2、or 或关系,满足条件之一即可 3、in 指定范围过滤 4、not 否定关系,取反
思考
1、and 和or 若同时存在,哪个优先级最高? 2、in 使用的优势? 3、not 存在的意义是什么?
案列
数据表如下:
SELECT * FROM products
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的记录 or :ID为1002或ID为1003的记录
2、and 和or 同时使用对比案列 若我们想要获取id 为1002或1003,而且价格不低于10的记录
SELECT * FROM products WHERE vend_id = 1002 OR vend_id = 1003 AND prod_price >= 10
以上写法的结果如下: 很明显有两条记录不是我们希望的,原因是and的优先级要比or高,因此机器对命令的理解是: 获取id为1002 或者ID为1003的且价格不低于10的记录,而不会对1002的价格做限定
因此我们需要按照下面的写法,并且建议在多条件时使用这种方法避免歧义
SELECT * FROM products WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price >= 10
结果如下;
in
SELECT * FROM products WHERE vend_id IN (1002,1003)
结果:
根据结果看,其实就是or的另一种写法,对吧?那么回到思考的问题:in的优势? 1、设想如果vend_id的范围比较多,就需要写很多or ,没有in直观,如果写到更复杂的查询语句,不具备可读性 2、使用in是可以加快查询速度的(需要对Mysql稍微深入了解,并且需要数据结构的知识) 3、最核心的优势在于in可以包含其他select语句
not
SELECT * FROM products WHERE vend_id NOT IN (1002,1003)
结果:
ps:not在简单的子句优势并不大,但在复杂的子句中优势很明显,就如上个语句中,找出范围之外的数据记录就很方便
另外,在Mysql中not支持对in、between、exists取反
标签:入门,1002,vend,过滤,products,Mysql,1003,id,SELECT From: https://blog.51cto.com/u_14557673/6186327