组合Where子句
为了进行更强的过滤控制,MySQL允许给出多个WHERE子句。这些子句可以两种方式使用:以AND子句的方式或OR子句的方式使用
操作符
AND操作符
可使用AND操作符给WHERE子句附加条件,AND 用在WHERE子句中的关键字,用来指示检索满足所有给定条件的行。
举例:查询年龄在13到18之间数据
输入:
SELECT * FROM Test.student s WHERE s.age <18 AND s.age >13
输出:
image.png
OR 操作符
OR操作符与AND操作符不同,它指示MySQL检索匹配任一条件的行
举例:查询满足 大于18和小于15的值
输入:
SELECT * FROM Test.student s WHERE s.age >18 OR s.age <15
输出:
image.png
计算次序
基础数据:
-
举例:查询数值小于等于15且姓名叫“王一”
输出: image.png
输入:SELECT * FROM Test.student s WHERE s.age >15 or s.age =15 AND s.name ='王一'
分析:上面的结果,查询出的信息中存在姓名不等于“王一”的,过滤未生效,原因在于计算次序,SQL语句在处理“OR”操作符前,优先处理“AND”语句,上面的语句理解【获取姓名为王一,且年龄等于15岁,或者 年龄大于15对的所有数据】
-
举例:使用括号,查询数值小于等于15且姓名叫“王一”
输出: image.png
输入:SELECT * FROM Test.student s WHERE (s.age =15 or s.age >15) AND s.name ='王一'
分析:这条SELECT语句与前一条的唯一差别是,这条语句中,前两个条件用圆括号括了起来。因为圆括号具有较AND或OR操作符高的计算次序,DBMS首先过滤圆括号内的OR条件
IN操作符
圆括号在WHERE子句中还有另外一种用法。IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取合法值的由逗号分隔的清单,全都括在圆括号中。
-
举例:
输出: image.png
输入1:SELECT * FROM Test.student s WHERE s.age =15 or s.age >20
输入2:SELECT * FROM Test.student s WHERE s.age IN (15,20)
分析:上面两条结束是相同的,使用IN优点
1.在使用长的合法选项清单时,IN操作符的语法更清楚且更直观
2.在使用IN时,计算的次序更容易管理(因为使用的操作符更少
3.IN操作符一般比OR操作符清单执行更快
4.IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句
NOT操作符
Where 子句中NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件
注释:
MySQL中的NOT MySQL支持使用NOT对IN、BETWEEN和EXISTS子句取反,这与多数其他DBMS允许使用NOT对各种条件取反有很大的差别。
-
举例1:
输出: image.png
分析:获取年龄不等于15和10的数据
输入:SELECT * FROM Test.student s WHERE s.age NOT IN (15,20)
-
举例2:
输出: image.png
输入:SELECT * FROM Test.student s WHERE s.age NOT BETWEEN 15 AND 20
网友评论