【数据库知识扫描】 | SQL复习-开篇 第4课 过滤数据

劲头好像没有前几天那么抢先,说不出来的疲惫。窗外是春暖花开,不知道什么时候能够拿到笔记本电脑,又什么时候武汉人民能够完全痊愈,只能尽自己的努力,把当下能做的事情做好。

今天的笔记关键词是:WHERE、BETWEEN AND 、NULL

目录

4.1 使用WHERE子句

4.2 WHERE子句操作符

① 单个值检查

② 不匹配检查

③ 范围值检查

④ 空值检查


4.1 使用WHERE子句

只检索所需数据需要指定搜索条件(searchcriteria),搜索条件也称为过滤条件(filtercondition)

在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名(FROM子句)之后给出:

 相等校验:

SELECT prod_name,prod_price FROM Products WHERE prod_price = 3.49;

 位数问题:有多少个0?练习示例时,可能发现显示结果有3.49、3.490、3.4900等。出现这样的情况,往往是因为DBMS指定了所使用的数据类型及其默认行为。所以,输出不同,不必焦虑,毕竟从数学角度讲,3.49和3.4900是一样的。

过滤问题:分为SQL过滤  |  应用过滤数据。也可以在应用层过滤。这样理解,使用SQL语句或者客户端代码来过滤,前者是对在数据库中检索结果的过滤,后者通过应用代码或者编程手段来完成过滤,后者可能会影响自身性能,并且不具备伸缩性,如果联网查询的话,还会造成带宽浪费。

位置问题:WHERE子句和ORDER BY的位置

4.2 WHERE子句操作符

WHERE子句中使用的操作符可以理解成,对于一些数学性语言可以符号化。大于小于就不说了,在指定两值间,属于范围,空值的判断。属于边界条件判定。

兼容性问题:针对不同的DBMS支持不同的操作符,具体参考对应文档。

① 单个值检查

用例子说话(列出所有价格小于10美元的产品):

 SELECT prod_name,prod_price FROM Products WHERE prod_price < 10;

小于以后,再加个等号的,经过测试,没有恰好10美元的产品,所以,使用了一个表中的值5.99:

SELECT prod_name,prod_price FROM Products WHERE prod_price >= 5.99;

可以看到结果包括产品价格5.99及以上的结果。

② 不匹配检查

列出所有非供应商DLL01制造的产品记录:

SELECT vend_id, prod_name FROM Products WHERE vend_id <>'DLL01';

引号问题:单引号用来先定字符串,在值和字符串类型的列进行比较时候记得添加引号限定,数值列比较不需要引号限定。

不等于有两种表达,还有一种“ != ”,也可以来试试:

SELECT vend_id,prod_name FROM PRoducts WHERE vend_id != 'DLL01';

互换问题:这两种不等于操作符,通常是可以互换的,但是考虑到不同的DBMS不一定都支持,所以具体参看DBMS文档。

③ 范围值检查

要检查某个范围的值,可以使用BETWEEN操作符。

例子说明用法,检索价格在5美元和10美元之间的所有产品:

 SELECT prod_name,prod_price FROM Products  WHERE prod_price BETWEEN 5 AND 10;

用法说明:[m,n]是一个范围,同样的,在本例中,BETWEEN一个关键字不行,加上AND,中间放较小值n,后面放较大值m。为了验证较大值在前会出现什么类型错误,语法还是结果,验证了一下,发现只是出现空集,但最好不要这样用。

④ 空值检查

在创建表时,设计表时可以指定其中列能否不包含值。在一个列不包含值时,称其包含空值NULL。

NULL 无值(no value),与字段包含0、空字符串或仅仅包含空格不同。

我们的操作符中IS NULL,终于要派上用场。

先拿产品价格试个水,试着返回所有没有价格(空prod_price字段,不是价格为0)的产品:

发现没有结果,所以换个有NULL值的表来检索一下~

SELECT cust_name FROM Customers WHERE cust_email IS NULL;

果然出来空值的结果。这里插入一个小技巧,因为一直敲命令,一直到最后满屏都是结果,有些头晕,可以输入clear命令后回车完成清屏操作;

扩展问题:这里学到的都是基本的操作符,很多DBMS扩展了标准的操作符集,更加高档的过滤选择,用啥可以熟悉啥。

区别问题(NULL 和 非匹配):通过过滤选择不包含指定值的所有行时,可能希望含NULL值的行也一起包含进去,实际上不能完成这样的操作、因为未知(unknown)有特殊的含义,数据库不知道它们是否匹配,所以在进行匹配过滤或非匹配过滤时,不会返回这些结果。过滤数据时,一定要验证被过滤列中含NULL的行确实出现在返回的数据中

说实话这段话我有点不太懂这段,但大概表达的意思可能是,需要加一层验证,通过非匹配的方式不能得到不包含指定值也含有NULL的行记录,所以这里贴出这段话。

刚好这部分结束了。主要学习到检验结果的方式,其中包括操作符和匹配问题。

喊一句~刻意练习,每日精进。接着开始后面的工作~

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值