领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

数据分析人必掌握的数据库语言——SQL指南第二期

nixiaole 2024-11-22 18:44:41 知识剖析 16 ℃

本篇文章继续围绕SQL的语法重点为大家介绍过滤数据高级过滤数据以及用通配符进行过滤


01 过滤数据


数据库表一般包含大量的数据,很少需要检索表中的所有行。通常只是根据特定的需要提取表数据的子集。因此检索所需数据时需要指定搜索条件,搜索条件也称为过滤条件。

语法:
#column_name=列名称, table_name=表名称, operator=运算符,value=值
SELECT column_name,column_name 
FROM table_name
WHERE column_name operator value


使用WHERE字句

在SELECT语句中,WHERE子句用于规定选择的标准,即有条件地从表中选取数据。

示例:
SELECT prod_name,prod_price 
FROM Products 
WHERE prod_price = 3.49

分析:该语句从Products表中检索prod_name和prod_price两个列,不返回所有行,只返回prod_price值为3.49的行。


WHERE子句操作符

下面的运算符可在WHERE子句中使用:

操作符

说明

=

等于

<>

不等于

!=

不等于

<

小于

<=

小于等于

!<

不小于

>

大于

>=

大于等于

!>

不大于

BETWEEN

在某个范围内

IS NULL

为NULL值

LIKE

搜索某种模式

IN

指定条件范围

AND

指示检索满足所有给定条件的行

OR

检索匹配任一给定条件的行

NOT

否定其后条件

()

明确分组

EXISTS

判断查询子句是否有记录

具体使用如下:

①检查单个值

示例:列出所有价格小于10美元的产品
SELECT prod_name,prod_price 
FORM Products 
WHERE prod_price < 10

分析:从Products表中检索prod_name和prod_price两个列,不返回所有行,只返回prod_price值小于10的行。

②不匹配检查

示例:检索所有不是供应商DLL01制造的产品
# 其中<>操作符通常可更换为!=,但并非所有DBMS都支持互换
SELECT vend_id,prod_name 
FROM Products 
WHERE vend_id <> ‘DLL01’

分析:从Products表中检索prod_name和vend_id两个列,不返回所有行,只返回vend_id值不等于DLL01的行。

③范围值检查

示例:检索价格在5美元和10美元之间的所有产品
SELECT prod_name,prod_price 
FROM Products 
WHERE prod_price BETWEEN 5 AND 10

分析:在使用BETWEEN时,必须指定两个值——所需范围的低值和高值,且两个值必须用AND关键字分隔。BETWEEN匹配范围中的值包含指定的低值和高值。

④空值检查

示例:检索没有价格的产品(没有价格为指定字段为空值,不是价格为0)
SELECT cust_name
FROM Customers 
WHERE cust_email IS NULL

分析:确定值为NULL不能简单检查是否等于NULL,而是需要用到一个特殊的WHERE子句——IS NULL子句。示例中若cust_email列不包含NULL值,则没有返回数据,否则将返回指定的数据。


02 高级过滤数据


上述介绍的WHERE子句在过滤数据时使用的都是单一条件,而为了进行更强的过滤控制,SQL允许给出多个WHERE子句,即多个条件的过滤。


组合WHERE子句

用来联结或改变WHERE子句中的关键字,也称为逻辑操作符,此处有两种形式,分别是AND子句OR子句

①AND操作符

示例:通过不止一个条件进行过滤
SELECT prod_id,prod_price,prod_name 
FROM Products 
WHERE vend_id = ‘DLL01’ AND prod_price <= 4

分析:该SQL语句检索由供应商DLL01制造且价格小于等于4美元的所有产品的编号、名称和价格。

这条SELECT语句的WHERE子句包含两个条件,用AND关键字联结起来,还可以增加条件,但每个条件都需要用AND联结。

AND指示DBMS只返回满足所有给定条件的行。

②OR操作符

示例:检索匹配任一条件的行
SELECT prod_id,prod_price,prod_name 
FROM Products 
WHERE vend_id = ‘DLL01’ OR vend_id = ‘BRS01’

分析:该SQL语句检索由DLL01和BRS01两者中的任一供应商制造的所有产品的编号、名称和价格。

OR操作符指示DBMS匹配任一条件,而不是同时匹配两个条件。

此处如果将OR换成AND将没有数据返回,因为会创造没有匹配行的WHERE子句。

③求值顺序

WHERE子句可包含任意数量的AND和OR操作符,以两者结合进行复杂、高级的过滤。

但结合AND和OR时会遇到一个问题,那就是SQL通常情况下在处理OR操作符之前,会优先处理AND操作符,这时就无法很好地按照过滤条件顺序检索数据了。

此时我们可以借用圆括号对操作符进行分组,以此控制过滤条件的顺序。

示例:
SELECT prod_name,prod_price 
FROM Products 
WHERE (vend_id = ‘DLL01’ OR vend_id = ‘BRS01’)  AND prod_price >= 10

分析:该语句检索由供应商DLL01或BRS01制造的且价格在10美元及以上的所有产品的名称和价格。

若没有圆括号,则最终该语句会检索由供应商BRS01制造的价格为10美元及以上的所有产品,以及供应商DLL01制造的所有产品,不管其价格如何。


IN操作符

IN操作符用来指定条件范围,范围中的每个条件都可进行匹配。IN取一组由逗号分隔、在圆括号中的合法值。

示例:
SELECT prod_name,prod_price 
FROM Products 
WHERE vend_id IN (‘DLL01’,’BRS01’) 
ORDER BY prod_name

分析:该SELECT语句检索由供应商DLL01和BRS01制造的所有产品名称和价格。

相比于OR操作符,IN操作符有如下优点

在合法选项很多时,IN操作符的语法更清楚;

在与其他AND和OR操作符组合使用IN时,求值顺序更易管理;

IN操作符一般比一组OR操作符执行更快;

IN的最大优点是可包含其他SELECT语句,能更动态地建立WHERE子句。


NOT操作符

WHERE子句中的NOT操作符只具备一个功能,即否定其后所跟的任何条件。NOT通常不是单独使用,且该关键字既可以用在要过滤的列之前,也可在之后。

示例:检索出除DLL01之外的所有供应商制造的产品
SELECT prod_name 
FROM Products 
WHERE NOT vend_id = ‘DLL01’ 
ORDER BY prod_name

分析:该语句检索非DLL01供应商制造的之外的所有产品。其中也可使用<>操作符来完成。

NOT操作符适合更复杂的子句,对于简单的WHERE子句,使用NOT并无优势。比如在与IN操作符联合使用时,NOT可简单地找出与条件列表不匹配的列。


03 用通配符进行过滤


通配符是用来匹配值的一部分的特殊字符。上述操作符都针对已知值的过滤条件,当过滤条件比较模糊时便需要用到通配符进行搜索。

通配符可在搜索模式中的任意位置使用,且可使用多个通配符。


LIKE操作符

若要在搜索时使用通配符,必须借助LIKE操作符。LIKE指示DBMS后跟的搜索模式利用通配符匹配而不是简单的相等匹配

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

①百分号(%)通配符

%是最常用的通配符,其表示在检索时,%表示任何字符出现任意次数,如’FISH%’表示搜索以FISH开头的所有产品,不论FISH后跟的字符以及其出现的次数。

示例:搜索以FISH起头的所有产品
SELECT prod_id,prod_name
FROM Products 
WHERE prod_name LIKE ‘FISH%’

分析:该语句搜索任意以FISH开头的词。%指示DBMS接受FISH之后的任意字符,不管有多少字符。

根据DBMS的不同配置,检索可区分大小写,若区分大小写,则’FISH%’与fish就不匹配。

示例:使用两个%通配符
SELECT prod_id,prod_name 
FROM Products 
WHERE prod_name LIKE ’%bean bag%’

分析:搜索模式‘%bean bag%’表示匹配任何位置上包含文本bean bag的值,不论前后出现什么字符。

示例:通配符位于搜索模式的中间
SELECT prod_name 
FROM Products 
WHERE prod_name LIKE ‘F%y’

分析:搜索以F开头、y结尾的所有产品。该形式很适合根据邮件地址的一部分来查找电子邮件。

需要注意的是%代表搜搜模式中给定位置的0个、1个或多个字符。%通配符不能匹配NULL

②下划线(_)通配符

下划线用途与%一致,区别是下划线只能匹配单个字符

示例:
SELECT prod_id,prod_name 
FROM Products 
WHERE prod_name LIKE ‘__ inch teddy bear’

分析:该语句中的搜索模式给出了后跟有文本的两个通配符,即只能匹配两个字符,而%还可以匹配多个字符或1个字符。

③方括号([])通配符

方括号([])通配符常用来指定一个字符集,必须匹配指定位置的一个字符。其中并不是所有的DBMS都支持创建集合的[]。

示例:找出所有名字以J或M开头的联系人
SELECT cust_contact 
FROM Customers 
WHERE cust_contact LIKE ‘[JM]%’ 
ORDER BY cust_contact

分析:该语句的WHERE子句搜索模式为‘[JM]%’。该搜索模式使用了方括号和%两种通配符。其中[JM]匹配方括号中任意一个字符,且只能匹配单个字符,其后的%通配符则匹配第一个字符之后的任意数目的字符。

方括号通配符中的字符还可用前缀字符^(脱字号)来否定。

TopBDA大数据分析师培训

不止SQL语言学习,还能全方位学习大数据分析技术!

使用通配符的技巧

SQL的通配符很有用,但耗费的搜索时间也比其他搜索要长。此处列出一些使用通配符时需记住的技巧

不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符;

在确定需要使用通配符时,也尽量不要把它们用在搜索模式的开始处。把通配符置于开始处,搜索起来是最慢的;

仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。

以上就是本篇文章的全部内容啦!

有关SQL的语法内容还没结束,下期将围绕SQL的语法重点为大家介绍创建计算字段函数使用

我们下期见!

整理不易,点赞、转发帮忙点一下~

Tags:

最近发表
标签列表