第5课 高级数据过滤

第5课 高级数据过滤

1.组合where子句
前面所讲的where筛选都只使用一个条件,在实际情况中,我们往往需要对数据进行多重条件筛选,如在销售记录中筛选出消费金额大于1千且性别为男性的用户。
要实现上述问题,就需要使用逻辑操作符将筛选条件组合起来。
(1)AND操作符
筛选出满足所有给定条件的数据

SELECT prod_id,prod_price,prod_name
FROM Products
WHERE vend_id='DLL01' AND prod_price<=4;

在这里插入图片描述
(2)OR操作符
筛选出满足任一给定条件的数据

SELECT prod_id,prod_price,prod_name
FROM Products
where vend_id='DLL01' or vend_id='BRS01';

在这里插入图片描述

(3)求值顺序
当AND和OR组合使用时,AND的优先级要高于OR。

SELECT prod_name,prod_price
FROM products
WHERE vend_id='DLL01' OR vend_id='BRS01' AND prod_price>=10;

上述代码实现的是:供应商BRS01制造的价格为10美元以上的产品,以及供应商DLL01制造的产品。
在这里插入图片描述
要想实现:返回供应商BRS01和DLL01制造的价格10美元以上的产品,则需要提高OR的优先级。
提高优先级可以使用圆括号来实现,圆括号的优先级要大于AND和OR。

SELECT prod_name,prod_price
FROM products
WHERE (vend_id='DLL01' OR vend_id='BRS01') AND prod_price>=10;

在这里插入图片描述
2.IN操作符
IN操作符用来指定条件范围,范围内的每个条件都可以进行匹配。

SELECT prod_name,prod_price
FROM products
WHERE vend_id IN('DLL01','BRS01')
ORDER BY prod_name;

满足IN操作符后括号中条件的数据都会被筛选出来
在这里插入图片描述
IN完成的工作与OR一致的

SELECT prod_name,prod_price
FROM products
WHERE vend_id='DLL01' OR vend_id='BRS01'
ORDER BY prod_name;

在这里插入图片描述
但是与OR相比,IN具有更多的优点:
语法更直观、更简洁;
求值顺序更容易管理;
执行速度更快;
最大的优点是可以包含其他select语句。

3.NOT操作符
否定后面所跟的条件

#列出除DLL01之外的所有供应商制造的产品
SELECT prod_name FROM products
WHERE NOT vend_id='DLL01'
ORDER BY prod_name;

在这里插入图片描述
4.课后练习
(1)编写SQL语句,从Vendors表中检索供应商名称(vend_name),仅返回加利福尼亚州的供应商(需要按国家[USA]和州[CA]进行过滤,没准其他国家也存在一个加利福尼亚州)。

SELECT vend_name FROM Vendors
WHERE vend_country='USA' AND vend_state='CA';

(2)编写SQL语句,查找所有至少订购了总量100个的BR01、BR02或BR03的订单。你需要返回OrderItems表中的订单号(order_num)、产品ID(prod_id)和数量,并按产品ID和数量进行过滤。

SELECT order_num,prod_id,quantity FROM OrderItems
WHERE quantity>=100 AND prod_id IN ('BR01','BR02','BR03');

(3)编写SQL语句,返回所有价格在3美元到6美元之间的产品名称(prod_name)和价格(prod_price)。使用AND, 然后按价格对结果进行排序。

SELECT prod_name,prod_price FROM Products
WHERE prod_price>=3 AND prod_price<=6
ORDER BY prod_price;

(4)下面的SQL语句有问题吗?(尝试在不运行的情况下指出。)
SELECT vend_name FROM Vendors
ORDER BY vend_name
WHERE vend_country=‘USA’ AND vend_state=‘CA’;

#order by子句应该放在where子句后面
SELECT vend_name FROM Vendors
WHERE vend_country='USA' AND vend_state='CA'
ORDER BY vend_name;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值