文章目录
7.1组合WHERE子句7.1.1 AND 操作符7.1.2 OR操作符7.1.3 计算次序7.2 IN操作符7.3 NOT操作符总结:前文连接:
《MySQL必知必会》——书中表的生成
《MySQL必知必会》——第三章(了解数据库和表) 关键词:USE、SHOW
《MySQL必知必会》——第四章(检索数据) 关键词:SELECT
《MySQL必知必会》——第五章(排序检索数据) 关键词:ORDER BY
《MySQL必知必会》——第六章(过滤数据) 关键词:WHERE
7.1组合WHERE子句
第六章我们总结了WHERE的用法,但只是的简单的过滤数据,为了得到更强更复杂的数据检索能力,我们还需要将WHERE子句进行组合!
7.1.1 AND 操作符
我们可以将多个WHERE语句通过AND子句连接,建立更强的数据检索能力!
AND子句:检索出匹配所有条件的行
# 检索出vend_id 等于1003 并且 prod_price 小于等于 10 的行SELECT prod_id, prod_price, prod_name FROM products WHERE vend_id = 1003 AND prod_price <= 10;
7.1.2 OR操作符
OR子句:检索出只匹配任一条件的行
# 检索出vend_id 等于1003 或 1002的行SELECT prod_price, prod_name FROM products WHERE vend_id = 1003 OR vend_id = 1002;
如果上面语句中的 OR 变为 AND则不会返回任何数据,因为 vend_id 不会同时等于1003也等于1002的。
7.1.3 计算次序
当同时存在AND子句和OR子句时,SQL会优先处理AND子句,再处理OR子句,看个例子
# 处理时,会把(vend_id = 1003 AND prod_price >= 10)当做一个条件,(vend_id = 1002)当做一个条件去任意匹配!SELECT vend_id, prod_price, prod_name FROM products WHERE vend_id = 1002 OR vend_id = 1003 AND prod_price >= 10;
若我们想匹配 vend_id 等于1002或1003时,prod_price 大于等于10的行,应该加上圆括号:
# vend_id 等于1002或1003时, prod_price 大于等于10的行SELECT vend_id, prod_price, prod_name FROM products WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price >= 10;
优先级:圆括号 > AND > OR
7.2 IN操作符
IN操作符,匹配包含在圆括号里的所有值,举例看:
# 检索vend_id 等于 1002 或者 1003 的行!SELECT prod_price, prod_name FROM products WHERE vend_id IN (1002, 1003);# 还可以表示为:SELECT prod_price, prod_name FROM products WHERE vend_id = 1002 or vend_id = 1003;
通过上面的例子,可以发现OR 和 IN 的功能是相同的,那么OR和IN的优缺点呢!
若匹配的项很多,IN语句更加的简洁IN子句一般比OR子句执行更快
7.3 NOT操作符
NOT操作符作用:否定跟在它后面的语句!
# 检索 vend_id 不等于1002和1003的行!SELECT prod_price, prod_name FROM products WHERE vend_id NOT IN (1002, 1003);
注意:
NOT 只对紧跟在其后的语句有效!