当前位置:网站首页>SQL必需掌握的100个重要知识点:过滤数据
SQL必需掌握的100个重要知识点:过滤数据
2022-06-27 19:10:00 【谷哥学术】
4.1 使用 WHERE 子句
数据库表一般包含大量的数据,很少需要检索表中的所有行。通常只会
根据特定操作或报告的需要提取表数据的子集。只检索所需数据需要指
定搜索条件(search criteria),搜索条件也称为过滤条件(filter condition)。
在 SELECT 语句中,数据根据 WHERE 子句中指定的搜索条件进行过滤。
WHERE 子句在表名( FROM 子句)之后给出,如下所示:
输入▼
SELECT prod_name, prod_price
FROM Products
WHERE prod_price = 3.49;
分析▼
这条语句从 products 表中检索两个列,但不返回所有行,只返回
prod_price 值为 3.49 的行,如下所示:
输出▼
prod_name prod_price
------------------- ----------
Fish bean bag toy 3.49
Bird bean bag toy 3.49
Rabbit bean bag toy 3.49
这个示例使用了简单的相等检验:检查这一列的值是否为指定值,据此
过滤数据。不过,SQL不只能测试等于,还能做更多的事情。
提示:有多少个 0?
你在练习这个示例时,会发现显示的结果可能是 3.49、3.490、3.4900
等。出现这样的情况,往往是因为 DBMS指定了所使用的数据类型及
其默认行为。所以,如果你的输出可能与书上的有点不同,不必焦虑,
毕竟从数学角度讲,3.49和 3.4900是一样的。
提示:SQL 过滤与应用过滤
数据也可以在应用层过滤。为此,SQL 的 SELECT 语句为客户端应用
检索出超过实际所需的数据,然后客户端代码对返回数据进行循环,
提取出需要的行。
通常,这种做法极其不妥。优化数据库后可以更快速有效地对数据进
行过滤。而让客户端应用(或开发语言)处理数据库的工作将会极大
地影响应用的性能,并且使所创建的应用完全不具备可伸缩性。此外,
如果在客户端过滤数据,服务器不得不通过网络发送多余的数据,这
将导致网络带宽的浪费。
注意: WHERE 子句的位置
在同时使用 ORDER BY 和 WHERE 子句时,应该让 ORDER BY 位于
WHERE 之后,否则将会产生错误(关于 ORDER BY 的使用,请参阅
第 3 课)。
4.2 WHERE 子句操作符
我们在做相等检验时看到了第一个 WHERE 子句,它确定一个列是否包含
指定的值。SQL支持表 4-1列出的所有条件操作符。
注意:操作符兼容
表 4-1中列出的某些操作符是冗余的(如 < > 与 != 相同, !< 相当于 >= )。
并非所有 DBMS都支持这些操作符。想确定你的 DBMS支持哪些操作
符,请参阅相应的文档。
4.2.1 检查单个值
我们已经看到了检验相等的例子,现在来看看几个使用其他操作符的例子。
第一个例子是列出所有价格小于 10美元的产品。
输入▼
SELECT prod_name, prod_price
FROM Products
WHERE prod_price < 10;
输出▼
prod_name prod_price
------------------- ----------
Fish bean bag toy 3.49
Bird bean bag toy 3.49
Rabbit bean bag toy 3.49
8 inch teddy bear 5.99
12 inch teddy bear 8.99
Raggedy Ann 4.99
King doll 9.49
Queen doll 9.49
下一条语句检索所有价格小于等于 10美元的产品(因为没有价格恰好是
10美元的产品,所以结果与前一个例子相同):
输入▼
SELECT prod_name, prod_price
FROM Products
WHERE prod_price <= 10;
4.2.2 不匹配检查
这个例子列出所有不是供应商 DLL01 制造的产品:
输入▼
SELECT vend_id, prod_name
FROM Products
WHERE vend_id <> 'DLL01';
输出▼
vend_id prod_name
---------- ------------------
BRS01 8 inch teddy bear
BRS01 12 inch teddy bear
BRS01 18 inch teddy bear
FNG01 King doll
FNG01 Queen doll
提示:何时使用引号
如果仔细观察上述 WHERE 子句中的条件,会看到有的值括在单引号内,
而有的值未括起来。单引号用来限定字符串。如果将值与字符串类型的
列进行比较,就需要限定引号。用来与数值列进行比较的值不用引号。
下面是相同的例子,其中使用 != 而不是 <> 操作符:
输入▼
SELECT vend_id, prod_name
FROM Products
WHERE vend_id != 'DLL01';
注意:是 != 还是 <> ?
!= 和 <> 通常可以互换。但是,并非所有 DBMS都支持这两种不等于操
作符。如果有疑问,请参阅相应的 DBMS文档。
4.2.3 范围值检查
要检查某个范围的值,可以使用 BETWEEN 操作符。其语法与其他 WHERE
子句的操作符稍有不同,因为它需要两个值,即范围的开始值和结束值。
例如, BETWEEN 操作符可用来检索价格在 5美元和 10美元之间的所有产
品,或在指定的开始日期和结束日期之间的所有日期。
下面的例子说明如何使用 BETWEEN 操作符,它检索价格在 5 美元和 10
美元之间的所有产品。
输入▼
SELECT prod_name, prod_price
FROM Products
WHERE prod_price BETWEEN 5 AND 10;
输出▼
prod_name prod_price
------------------- ----------
8 inch teddy bear 5.99
12 inch teddy bear 8.99
King doll 9.49
Queen doll 9.49
分析▼
从这个例子可以看到,在使用 BETWEEN 时,必须指定两个值——所需范
围的低端值和高端值。这两个值必须用 AND 关键字分隔。 BETWEEN 匹配
范围中所有的值,包括指定的开始值和结束值。
4.2.4 空值检查
在创建表时,表设计人员可以指定其中的列能否不包含值。在一个列不
包含值时,称其包含空值 NULL 。
NULL
无值(no value),它与字段包含 0、空字符串或仅仅包含空格不同。
确定值是否为 NULL ,不能简单地检查是否等于 NULL 。 SELECT 语句有一
个特殊的 WHERE 子句,可用来检查具有 NULL 值的列。这个 WHERE 子句
就是 IS NULL 子句。其语法如下:
输入▼
SELECT prod_name
FROM Products
WHERE prod_price IS NULL;
这条语句返回所有没有价格(空 prod_price 字段,不是价格为 0 )的
产品,由于表中没有这样的行,所以没有返回数据。但是, Customers表确实包含具有 NULL 值的列:如果没有电子邮件地址,则 cust_email
列将包含 NULL 值:
输入▼
SELECT cust_name
FROM Customers
WHERE cust_email IS NULL;
输出▼
cust_name
----------
Kids Place
The Toy Store
提示:DBMS 特有的操作符
许多 DBMS扩展了标准的操作符集,提供了更高级的过滤选择。更多
信息请参阅相应的 DBMS文档。
注意: NULL 和非匹配
通过过滤选择不包含指定值的所有行时,你可能希望返回含 NULL 值的
行。但是这做不到。因为 NULL 比较特殊,所以在进行匹配过滤或非匹
配过滤时,不会返回这些结果。
边栏推荐
- 实际工作中用到的shell命令 - sed
- 动物养殖生产虚拟仿真教学系统|华锐互动
- 互联网 35~40 岁的一线研发人员,对于此岗位的核心竞争力是什么?
- 事件相关电位ERP的皮层溯源分析
- Oracle的CTAS能不能将约束等属性带到新表?
- Covering access to 2w+ traffic monitoring equipment, EMQ creates a new digital engine for all elements of traffic in Shenzhen
- 白嫖红队goby&POC,叫你如何白嫖?
- Tutorial | fNIRS data processing toolkit homer2 download and installation
- 开启生态新姿势 | 使用 WrodPress 远程附件存储到 COS
- Scrum和看板的区别
猜你喜欢

BTC和ETH重新夺回失地!引领市场复苏?加密将步入“冰河时代”!

Experience Navicat premium 16, unlimited reset, 14 day trial method (with source code)

"Good voice" has been singing for 10 years. How can the Chinese language in the starry sky sing well in HKEx?

Full record of 2022 open source moment at Huawei partners and Developers Conference

Zhongang Mining: the largest application field of new energy or fluorite

Best practice: optimizing Postgres query performance (Part 2)

Here are 12 commonly used function formulas for you. All used ones are good

SQL Server for循环用法

众昂矿业:新能源或成萤石最大应用领域

基于微信小程序的警局报案便民服务平台#毕业设计
随机推荐
ABAP-CL_ OBJECT_ Collection tool class
Character interception triplets of data warehouse: substrb, substr, substring
动物养殖生产虚拟仿真教学系统|华锐互动
1030 Travel Plan
系统自带的karsonzhang/fastadmin-addons报错
原创翻译 | 机器学习模型服务工具对比:KServe,Seldon Core和BentoML
oss上传调用的是哪个方法
Cerebral Cortex:从任务态和静息态脑功能连接预测儿童数学技能
Show the comprehensive strength of strong products, and make the first show of 2022 Lincoln aviator in Southwest China
2021全球独角兽榜发布:中国301家独角兽企业全名单来了!
抗洪救灾,共克时艰,城联优品驰援英德捐赠爱心物资
强制 20 天内开发 APP 后集体被裁,技术负责人怒批:祝“早日倒闭!”
一套系统,减轻人流集中地10倍的通行压力
Tutorial | fNIRS data processing toolkit homer2 download and installation
White whoring red team goby & POC, how do you call white whoring?
Leetcode 1381. Design a stack that supports incremental operations
Prospects for enterprise digitalization (38/100)
Leetcode 989. Integer addition in array form (simple)
华为伙伴暨开发者大会2022开源时刻全纪录
Very comprehensive dolphin scheduler installation and use documents