网站首页 > 知识剖析 正文
本篇文章继续围绕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]匹配方括号中任意一个字符,且只能匹配单个字符,其后的%通配符则匹配第一个字符之后的任意数目的字符。
方括号通配符中的字符还可用前缀字符^(脱字号)来否定。
不止SQL语言学习,还能全方位学习大数据分析技术!
使用通配符的技巧
SQL的通配符很有用,但耗费的搜索时间也比其他搜索要长。此处列出一些使用通配符时需记住的技巧。
①不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符;
②在确定需要使用通配符时,也尽量不要把它们用在搜索模式的开始处。把通配符置于开始处,搜索起来是最慢的;
③仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。
以上就是本篇文章的全部内容啦!
有关SQL的语法内容还没结束,下期将围绕SQL的语法重点为大家介绍创建计算字段和函数使用。
我们下期见!
整理不易,点赞、转发帮忙点一下~
- 上一篇: SQL优化笔记分享:34条实用经验可别错过
- 下一篇: 产品经理不懂点SQL怎么出来混?
猜你喜欢
- 2024-11-22 做测试不会 SQL?超详细的 SQL 查询语法教程来啦!
- 2024-11-22 MySQL之SQL优化
- 2024-11-22 「SQL数据分析系列」4.过滤操作
- 2024-11-22 SQL基本语句练习(基础版)
- 2024-11-22 数据分析师数据查询方法必备,SQL取数,简单查询与高级查询
- 2024-11-22 5大步骤+10个案例,堪称业内SQL优化万能公式
- 2024-11-22 SQL点滴(查询篇):数据库基础查询案例实战
- 2024-11-22 「SQL」 当我们join数据时,到底发生了什么?一文让你不再混淆
- 2024-11-22 002 Excel SQL 比较运算符的使用--OLE DB方法
- 2024-11-22 十分钟入门Fink SQL
- 04-29php开发者composer使用看这一篇就够了
- 04-29引用和变量声明在不同语言中的实作
- 04-29PHP 没你想的那么差
- 04-29Ubuntu linux 上的 Nginx 和 Php 安装
- 04-29CentOS下通过yum搭建lnmp(单版本PHP)
- 04-29为什么 PHP8 是个高性能版本
- 04-29PHP8函数包含文件-PHP8知识详解
- 04-29使用无参数函数进行命令执行
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)