SQL必知会(二)-SQL查询篇(4)-高级过滤

第5课、高级过滤

组合 WHERE 子句
AND OR:与条件、或条件

多个 WHERE 子句有两种使用方式:AND 子句 或 OR 子句。

1)AND 操作符
AND 相当于编程语言中的与条件。

需求:如果某个产品由供应商 DLL01 制造,但价格不高于4美元。

SELECT vend_id,prod_id, prod_price, prod_name
FROM Products
WHERE vend_id = 'DLL01' AND prod_price <= 4;
-- 书上没有 SELECT vend_id 列,为方便理解输出结果,该段语句 SELECT 后添加 vend_id

输出结果:

请添加图片描述

2)OR 操作符
OR 相当于编程语言中的或条件。在第一条件得到满足的情况下,不再继续判断第二个条件。

需求:供应商要么为 DLL01,要么为 BRS01 。

SELECT vend_id,prod_id, prod_price, prod_name
FROM Products
WHERE vend_id = 'DLL01' OR vend_id = 'BRS01';
-- 书上没有 SELECT vend_id 列,为方便理解输出结果,该段语句 SELECT 后添加 vend_id

输出结果:

请添加图片描述

2.2)求值顺序

问题例子:

需求:供应商为 DLL01 和 BRS01,且这两个供应商的产品价格都大于等于10.

SELECT vend_id,prod_name, prod_price
FROM Products
WHERE vend_id = 'DLL01' OR vend_id = 'BRS01'
AND prod_price >= 10;
-- 书上没有 SELECT vend_id 列,为方便理解输出结果,该段语句 SELECT 后添加 vend_id

输出结果:

请添加图片描述

但是,输出结果中有小于10的价格出现。
分析:

SQL 理解 WHERE 子句问题:由于 AND 操作符优先级高,所以判断为:
vend_id = 'BRS01' AND prod_price >= 10
然后才是:
vend_id = 'DLL01' OR 

解决方案:

SELECT vend_id,prod_name, prod_price
FROM Products
WHERE (vend_id = 'DLL01' OR vend_id = 'BRS01')
AND prod_price >= 10;
-- 多加了个括号

输出结果:

请添加图片描述

3)IN 操作符

IN:条件范围
IN 操作符用来指定条件范围,范围中的每个条件都可以进行匹配

需求:检索由供应商 DLL01 和 BRS01 制造的所有产品。

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

-- 以下例子与上面例子相同工作。
SELECT prod_name, prod_price
FROM Products
WHERE vend_id = 'DLL01' OR vend_id = 'BRS01'
ORDER BY prod_name;

输出结果:

请添加图片描述

4)NOT 操作符

NOT:非条件
NOT 否定其后所跟的任何条件。可以用在要过滤的列前,也可以用在其后。

需求:列出除 DLL01 之外的所有供应商制造的产品。

SELECT prod_name
FROM Products
WHERE NOT vend_id = 'DLL01'
ORDER BY prod_name;

-- 以下例子与上面例子相同工作
SELECT prod_name
FROM Products
WHERE vend_id <> 'DLL01'
ORDER BY prod_name;

输出结果:

请添加图片描述

总结

AND OR:与条件、或条件

WHERE 条件1 AND 条件2;
WHERE 条件1 OR 条件2;
//AND OR 同时使用,注意关键字的优先级:
WHERE (条件1 OR 条件2) AND 条件3;

IN:条件范围

WHERE vend_id IN ('列值1','列值2')

NOT:非条件

WHERE NOT 条件1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值