《SQL必知必会》| 第4-6课 过滤数据 学习笔记

第4课 过滤数据

这一课将讲授如何使用SELECT语句的WHERE子句指定搜索条件。我们学习了如何检验相等、不相等、大于、小于、值的范围以及NULL值等。

4.1 使用WHERE子句

只检索所需数据需要指定搜索条件(search criteria),搜索条件也称为过滤条件(filter condition)。
SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表中(FROM子句)之后给出。

注意:WHERE子句的位置

在同时使用ORDER BYWHERE子句时,应该让ORDER BY位于WHERE之后,否则将会产生错误。

4.2 WHERE子句操作符

在这里插入图片描述

  • 并非所有DBMS都支持这些操作符。
4.2.1 检查单个值
4.2.2 不匹配检查
注意:是 != 还是 <> ?

!= 和 <>通常可以互换。但是,并非所有DBMS都支持这两种不等于操作符。

4.2.3 范围值检查

要检查某个范围的值,可以使用BETWEEN操作符。
在使用BETWEEN时,必须指定两个值——所需范围的低端值和高端值。这两个值必须用AND关键字分割。BETWEEN匹配范围中所有的值,包括指定的开始值和结束值。

4.2.4 空值检查

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

NULL

无值no value,它与字段包含0,空字符或仅仅包含空格不同。

SELECT语句有一个特殊的WHERE子句,可用来检查具有NULL值的列。这个WHERE子句就是IS NULL子句。

注意:NULL和非匹配

过滤数据时,一定要验证被过滤列中含NULL的行确实出现在返回的数据中。

4.3 小结


第5课 高级过滤数据

讲授如何组合WHERE子句以建立功能更强、更高级的搜索条件。
讲授了如何使用ANDOR操作度组合成WHERE子句。
讲授了如何明确地管理求值顺序,如何使用NOTIN操作符。

5.1 组合WHERE子句

SQL允许给出多个WHERE子句。这些子句有两种使用方式,即以AND子句或OR子句的方式使用。

操作符operator:

用来联结或改变WHERE子句中的子句的关键字,也称为逻辑操作符logical operator

5.1.1 AND操作符

要通过不止一个列进行过滤,可以使用AND操作符给WHERE子句附加条件。AND指示DBMS只返回满足所有给定条件的行。

  • 可以增加多个过滤条件,每个条件间都要使用AND关键字。
5.1.2 OR操作符

许多DBMSOR WHERE子句的第一个条件得到满足的情况下,就不再计算第二个条件了。
OR操作符告诉DBMS匹配任一条件而不是同时匹配两个条件。

5.1.3 求值顺序

WHERE子句可以包含任意数目的ANDOR操作符。允许两者结合以进行复杂、高级的过滤。

提示:在WHERE子句中使用圆括号

任何时候使用具有ANDOR操作符的WHERE子句,都应该使用圆括号明确地分组操作符。

5.2 IN操作符

IN操作符用来指定条件范围,范围中的每一个条件都可以进行匹配。IN取一组由逗号分割、括在圆括号中的合法值。
IN操作符完成了与OR相同的功能。

为什么要使用IN操作符呢?
  • 在有很多合法选项时,IN操作符的语法更清楚,更直观。
  • 在与其他ANDOR操作符组合使用IN时,求值顺序更容易管理。
  • IN操作符一般比一组OR操作符执行得更快(在上面这个合法选项很少的例子中,你看不出性能差异)。
  • IN的最大优点是可以包含其他SELECT语句,能够更动态地建立WHERE子句。

5.3 NOT操作符

WHERE子句中的NOT操作符有且只有一个功能,那就是否定其后所跟的任何条件。
NOT关键字可以用在要过滤的列前,而不仅是在其后。

说明:MariaDB中的NOT

MariaDB支持使用NOT否定INBETWEENEXIST子句。大多数DBMS允许使用NOT否定任何条件。


第6课 用通配符进行过滤

这一课介绍什么是通配符、如何在WHERE子句中使用通配符以及怎样使用LIKE操作符进行通配搜索,以便对数据进行复杂过滤。还说明了通配符应该细心使用,不要使用过度。

6.1 LIKE操作符

利用通配符,可以创建比较特定数据的搜索模式。

通配符wildcard

用来匹配值的一部分的特殊字符。

搜索模式search pattern

由字面值、通配符或两者组合构成的搜索条件。

通配符本身实际上是SQLWHERE子句中有特殊含义的字符,SQL支持几种通配符。为在搜索子句中使用通配符,必须使用LIKE操作符。LIKE指示DBMS,后跟的搜索模式利用通配符匹配而不是简单的相等匹配进行比较。

谓词predicate

操作符何时不是操作符?答案是,它作为谓词时。从技术上说,LIKE谓词而不是操作符。

通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用通配符搜索。

6.1.1 百分号%通配符

在搜索串中,%表示任何字符出现任意次数。

说明:区分大小写

根据DBMS的不同及其配置,搜索可以是区分大小写的。例如,‘%fish%’。匹配不到’daFishdad’。

  • 通配符可在搜索模式中的任意位置使用,并且可以使用多个通配符。
说明:请注意后面所跟的空格

包括Access在内的许多DBMS都用空格来填补字段的内容。简单的解决方案是给搜索模式再增加一个%'F%y%'还匹配y后面的空格。更好的解决办法是用函数去掉空格。

注意:请注意NULL

通配符%看起来像是可以匹配任何东西,但有个例外,这就是NULL。子句WHERE prod_name LIKE '%'不会匹配产品名称为NULL的行。

6.1.2 下划线_通配符

下划线的用途与%一样,但它只匹配单个字符,而不是多个字符。

说明:DB2通配符

DB2不支持通配符_。

说明:Access通配符

如果使用的是Microsoft Access,需要使用?而不是_

6.1.3 方括号[]通配符

方括号通配符用来制定一个字符集。它必须匹配指定位置的一个字符。

说明:并不总是支持集合

与前面描述的通配符不一样,并不是所有DBMS都支持用来创建集合的[]。只有微软的AccessSQL Server支持集合。为确定你使用的DBMS是否支持集合,请参阅相应的文档。

  • [JM]匹配方括号中任意一个字符,它也只能匹配单个字符。
  • 此通配符可以用前缀字符^脱字号来否定。
说明:Access中的否定集合

如果使用的是Microsoft Access,需要用!而不是^来否定一个集合,因此,使用的是[!JM]而不是[^JM]

  • 可以使用NOT操作符得出类似的结果。^的唯一优点是在使用多个WHERE子句时可以简化语法。

6.2 使用通配符的技巧

  • 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
  • 在确实需要使用通配符时,也尽量不要把它们用在搜索模式的开始处。把通配符置于开始处,搜索起来是最慢的。
  • 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。

6.3 小结


发布了137 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_34170700/article/details/104011898