mysql的高级过滤

要使过滤数据更强、更有效率,就要使用高级过滤的方式:组合WHERE子句。
仅仅使用WHERE的子句操作符,这是一个单一的过滤条件。为了有更强的过滤控制,SQL允许使用多个WHERE子句。要求使用用AND或者OR,当然还可以有IN和NOT。

1.AND
用法:
要通过对不止一列的数据进行过滤。
语法举例:
举例从表名为product,检索列名分别为:food_name、food_price、food_id,检索条件:food_price <=4 和food_color = ‘yellow’。检索结果:要求列出相对应的水果,颜色为黄色,价格不高于4元,显示该水果名、水果的具体价格、水果的专属编号。

SELECT food_name,food_price,food_id 
FROM product 
WHERE food_price <= 4 AND food_color = 'yellow';

AND的用法就是food_price <=4 和 food_color = ‘yellow’两个条件都符合才会被输出来。当你有无数个要通过对不止一列的数据进行过滤时,你就可以通过无数个AND解决。

2.OR
适用:
只要匹配任意条件即可输出(事实上,许多DBMS在OR WHERE子句的第一个条件满足时,就不在计算第二个条件了)。
语法举例:
举例从表名为product,检索列名分别为:food_name、food_price、food_id,检索条件:food_price =4 或者food_price =5。检索结果:要求列出相对应的水果,价格等于4元或者价格等于5元,显示该水果名、水果的具体价格、水果的专属编号。

SELECT food_name,food_price,food_id 
FROM product 
WHERE food_price = 4 OR food_price = 5;

OR输出的结果一般比AND的结果要多,OR操作符告诉DBMS匹配任一条件,而不是所有条件!

注意:如果需要同时使用AND和OR操作符,SQL是优先处理AND的语句!要想改变这种状况,也就是让自己决定谁先优先,在多个AND和OR的语句更加要注意。这就利用我们小时候的数学知识啦,加圆括号(),圆括号具有比AND和OR更高的优先级!

3、IN(效果与OR操作符一样)
适用:指定条件范围,范围内的每个条件都可以进行匹配。
用法:IN取一组有逗号隔开,圆括号括起的合法值。
语法举例:
举例从表名为product,检索列名分别为:food_name、food_price、food_id,检索条件:food_price =4 或者food_price =5。检索结果:要求列出相对应的水果,价格等于4元或者价格等于5元,显示该水果名、水果的具体价格、水果的专属编号。

SELECT food_name,food_price,food_id 
FROM product
WHERE food_price IN (4,5);

既然IN和OR得出的结果相同,所以很多服务器都把in or当成相等来处理。但是在mysql中不是这样的,它会对in()里面的数据进行排序,然后用二分法查找某个值是否在列表中,这个算法的O(log n),而等同的or子句的查找效率是O(n),当n越大的时候效率相差越明显。在列表很大的时候,or子句会慢得多。in的话是先对in里的值进行排序,然后才是二分查找,那么用in查出的结构就是一个已经排好序的数据集合。

4、NOT(需要注意用法)
用法:有且仅有一个功能,那就是否定其后所跟的任何条件,只要条件以外的数据的输出。因为NOT从来不单独使用,它总是和其它的操作符一起使用,所以它的语法与其他的操作符有所不同。NOT关键字可以用在要过滤的列前,而不仅在其后。
语法举例:
检索出所有只要水果名不是apple的水果价格,并且排序。

SELECT food_price
FROM product
WHERE NOT food_name = 'apple'
ORDER BY food_price;

当然它可以使用<>来替换上面的NOT(注意用法):

SELECT food_price
FROM product
WHERE  food_name <> 'apple'
ORDER BY food_price;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值