-
SQL Server 2008教程之高级数据过滤【数据过滤则是
第一节 高级数据过滤【数据过滤则是数据检索中最核心的部分】
1、 通配符过滤【包括单字符匹配,多字符匹配,集合匹配,单字符匹配和多字符匹配还可以一起使用】。
【SQL语句:SELECT LIKE用法详解】 【%、_、[ ]、[^]、*、?、#、[!]】
LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用是在一个字符型字段列中检索包含对应子串的。
1:% 包含零个或多个字符的任意字符串:
<1>LIKE'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。
<2>LIKE'%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。
<3>LIKE'%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。
2:_(下划线) 任何单个字符:
LIKE'_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)。
3:[ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符:
<1>LIKE'[CK]ars[eo]n' 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
<2>LIKE'[M-Z]inger' 将搜索以字符串inger结尾,以从 M 到 Z 的任何单个字母开头的所有名称
(如 Ringer)。
4:[^] 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符:
LIKE'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如MacFeather)。
5:* 它同于DOS命令中的通配符,代表多个字符:c*c代表cc,cBc,cbc,cabdfec等多个字符。
6:?同于DOS命令中的?通配符,代表单个字符:b?b代表brb,bFb等
7:# 大致同上,不同的是代只能代表单个数字。k#k代表k1k,k8k,k0k 。
8:[!] 排除 它只代表单个字符
下面来举例说明一下:
例1,查询name字段中包含有“明”字的。【select * from table1 where name like '%明%'】
例2,查询name字段中以“李”字开头。 【select * from table1 where name like '李*'】
例3,查询name字段中含有数字的。 【select * from table1 where name like '%[0-9]%'】
例4,查询name字段中含有小写字母的。【select * from table1 where name like '%[a-z]%'】
例5,查询name字段中不含有数字的。 【select * from table1 where name like '%[!0-9]%'】
以上例子能列出什么值来显而易见。但在这里,我们着重要说明的是通配符“*”与“%”的区别。
很多人会问,为什么我在以上查询时有个别的表示所有字符的时候用"%"而不用“*”?先看看下面的例子能分别出现什么结果:
select * from table1 where name like '*明*'
select * from table1 where name like '%明%'
大家会看到,前一条语句列出来的是所有的记录,而后一条记录列出来的是name字段中含有“明”的记录,所以说,当我们作字符型字段包含一个子串的查询时最好采用“%”而不用“*”,用“*”的时候只在开头或者只在结尾时,而不能两端全由“*”代替任意字符的情况下。
2、 空值检测【IS NULL、IS NOT NULL】
Ø 在SQL语句中对空值的处理有些特别,不能使用普通的等于运算符进行判断,而要使用IS NULL关键字,使用方法为【待检测字段名IS NULL】;如果要检测“字段不为空”,则要使用IS NOT NULL,使用方法为【待检测字段名IS NOT NULL】。IS NULL/IS NOT NULL可以和其他的过滤条件一起使用。
3、 反义运算符【=、>、<、>=、<=、!=、<>、not xxx=yyy、not(xxx=yyy)】
Ø “=”、“<”、“>”等运算符都是用来进行数值判断的,有的时候则会想使用这些运算符的反义,也就是“!=”表示“不等于”、“!<”表示“不小于”,而“!>”表示“不大于”。
Ø 使用“!”运算符的方式由于只能运行在MSSQLServer和DB2两种数据库系统上,如果在其他数据库系统上则可以用其他的变通的方式实现,最常用的变通实现方式有两种:使用同义运算符、使用NOT运算符。这样“不等于”、“不大于”和“不小于”就分别可以表示成“<>”、“<=”和“>=”。
Ø NOT运算符用来将一个表达式的值取反,也就是将值为“真”的表达式结果变为“假”, 值为“假”的表达式结果变为“真”,使用方式也非常简单【NOT (表达式)】:如:NOT(FAge=22) 。而且能够实现复杂的嵌套。
4、 多值检测 【OR、IN】
Ø 我们可以使用OR语句来连接多个等于判断,但是为了解决进行多个离散值的匹配问题,SQL提供了IN语句,使用IN我们只要指定要匹配的数据集合就可以了,使用方法为【IN (值1,值2,值3……)】。
Ø 使用IN我们还可以让字段与其他表中的值进行匹配,要实现这样的功能就需要IN来搭配子查询来使用,关于这一点我们将在后面的章节介绍。
5、 范围值检测 【BETTWEEN AND、NOT BETTWEEN AND】
Ø SQL提供了一个专门用于范围值检测的语句“BETTWEEN AND”,它可以用来检测一个值是否处于某个范围中(包括范围的边界值,也就是闭区间),如果需要进行开区间或者半开半闭区间的范围值检测的话就必须使用其他的解决方案了。使用方法:【字段名 BETTWEEN 左范围值AND 右范围值】,其等价于【字段名>=左范围值 AND 字段名<=右范围值】。使用“BETTWEEN AND”我们还能够进行多个不连续范围值的检测。如:SELECT * FROM T_Employee WHERE
(Fsalary BETWEEN 2000 AND 3000) OR (FSalary BETWEEN 5000 AND 8000)
6、 低效的“WHERE 1=1”【适用动态组装的SQL,如果数据检索对性能有比较高的要求不建议使用】
1、 通配符过滤【包括单字符匹配,多字符匹配,集合匹配,单字符匹配和多字符匹配还可以一起使用】。
【SQL语句:SELECT LIKE用法详解】 【%、_、[ ]、[^]、*、?、#、[!]】
LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用是在一个字符型字段列中检索包含对应子串的。
1:% 包含零个或多个字符的任意字符串:
<1>LIKE'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。
<2>LIKE'%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。
<3>LIKE'%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。
2:_(下划线) 任何单个字符:
LIKE'_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)。
3:[ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符:
<1>LIKE'[CK]ars[eo]n' 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
<2>LIKE'[M-Z]inger' 将搜索以字符串inger结尾,以从 M 到 Z 的任何单个字母开头的所有名称
(如 Ringer)。
4:[^] 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符:
LIKE'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如MacFeather)。
5:* 它同于DOS命令中的通配符,代表多个字符:c*c代表cc,cBc,cbc,cabdfec等多个字符。
6:?同于DOS命令中的?通配符,代表单个字符:b?b代表brb,bFb等
7:# 大致同上,不同的是代只能代表单个数字。k#k代表k1k,k8k,k0k 。
8:[!] 排除 它只代表单个字符
下面来举例说明一下:
例1,查询name字段中包含有“明”字的。【select * from table1 where name like '%明%'】
例2,查询name字段中以“李”字开头。 【select * from table1 where name like '李*'】
例3,查询name字段中含有数字的。 【select * from table1 where name like '%[0-9]%'】
例4,查询name字段中含有小写字母的。【select * from table1 where name like '%[a-z]%'】
例5,查询name字段中不含有数字的。 【select * from table1 where name like '%[!0-9]%'】
以上例子能列出什么值来显而易见。但在这里,我们着重要说明的是通配符“*”与“%”的区别。
很多人会问,为什么我在以上查询时有个别的表示所有字符的时候用"%"而不用“*”?先看看下面的例子能分别出现什么结果:
select * from table1 where name like '*明*'
select * from table1 where name like '%明%'
大家会看到,前一条语句列出来的是所有的记录,而后一条记录列出来的是name字段中含有“明”的记录,所以说,当我们作字符型字段包含一个子串的查询时最好采用“%”而不用“*”,用“*”的时候只在开头或者只在结尾时,而不能两端全由“*”代替任意字符的情况下。
2、 空值检测【IS NULL、IS NOT NULL】
Ø 在SQL语句中对空值的处理有些特别,不能使用普通的等于运算符进行判断,而要使用IS NULL关键字,使用方法为【待检测字段名IS NULL】;如果要检测“字段不为空”,则要使用IS NOT NULL,使用方法为【待检测字段名IS NOT NULL】。IS NULL/IS NOT NULL可以和其他的过滤条件一起使用。
3、 反义运算符【=、>、<、>=、<=、!=、<>、not xxx=yyy、not(xxx=yyy)】
Ø “=”、“<”、“>”等运算符都是用来进行数值判断的,有的时候则会想使用这些运算符的反义,也就是“!=”表示“不等于”、“!<”表示“不小于”,而“!>”表示“不大于”。
Ø 使用“!”运算符的方式由于只能运行在MSSQLServer和DB2两种数据库系统上,如果在其他数据库系统上则可以用其他的变通的方式实现,最常用的变通实现方式有两种:使用同义运算符、使用NOT运算符。这样“不等于”、“不大于”和“不小于”就分别可以表示成“<>”、“<=”和“>=”。
Ø NOT运算符用来将一个表达式的值取反,也就是将值为“真”的表达式结果变为“假”, 值为“假”的表达式结果变为“真”,使用方式也非常简单【NOT (表达式)】:如:NOT(FAge=22) 。而且能够实现复杂的嵌套。
4、 多值检测 【OR、IN】
Ø 我们可以使用OR语句来连接多个等于判断,但是为了解决进行多个离散值的匹配问题,SQL提供了IN语句,使用IN我们只要指定要匹配的数据集合就可以了,使用方法为【IN (值1,值2,值3……)】。
Ø 使用IN我们还可以让字段与其他表中的值进行匹配,要实现这样的功能就需要IN来搭配子查询来使用,关于这一点我们将在后面的章节介绍。
5、 范围值检测 【BETTWEEN AND、NOT BETTWEEN AND】
Ø SQL提供了一个专门用于范围值检测的语句“BETTWEEN AND”,它可以用来检测一个值是否处于某个范围中(包括范围的边界值,也就是闭区间),如果需要进行开区间或者半开半闭区间的范围值检测的话就必须使用其他的解决方案了。使用方法:【字段名 BETTWEEN 左范围值AND 右范围值】,其等价于【字段名>=左范围值 AND 字段名<=右范围值】。使用“BETTWEEN AND”我们还能够进行多个不连续范围值的检测。如:SELECT * FROM T_Employee WHERE
(Fsalary BETWEEN 2000 AND 3000) OR (FSalary BETWEEN 5000 AND 8000)
6、 低效的“WHERE 1=1”【适用动态组装的SQL,如果数据检索对性能有比较高的要求不建议使用】
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式