SQL Sever 基础知识 - 四、数据筛选
- 第7节 BETWEEN
- 7.1 BETWEEN 运算符概述
- 7.2 BETWEEN 示例
- 7.2.1 BETWEEN 与数字示例
- 7.2.2 BETWEEN 和日期示例
- 第8节 LIKE
- 8.1 LIKE运算符概述
- 8.2 转义字符
- 8.3 LIKE 示例
- 8.3.1 % (百分号) 通配符示例
- 8.3.2 _(下划线)通配符示例
- 8.3.3 [字符列表] 通配符示例
- 8.3.4 [character-character] 通配符示例
- 8.3.5 [^Character List or Range] 通配符示例
- 8.3.6 NOT LIKE 操作符示例
- 8.3.7 LIKE 和 ESCAPE 示例
- 第9节 别名
- 9.1 列的别名
- 9.2 表的别名
更多SQL Sever基础知识可查看:SQL Sever 基础知识(全)
特别说明:
本文章所用的所有数据库、数据表及其数据皆为AI随机生成,不涉及个人隐私,且仅供学习使用!
第7节 BETWEEN
查询条件是否在值范围之间
7.1 BETWEEN 运算符概述
BETWEEN
运算符是一个逻辑运算符,允许指定要查询的范围。
下面说明了 BETWEEN 运算符的语法:
column | expression BETWEEN start_expression AND end_expression
在此语法中:
① 指定要测试的列或表达式。
② 将 start_expression 和 end_expression 放在 BETWEEN 和 AND 关键字之间。 start_expression 、 end_expression 和 expression 必须具有相同的数据类型。
③ 如果要测试的表达式大于或等于 start_expression 的值且小于或等于 end_expression 的值,则 BETWEEN 运算符返回 TRUE
。
可以使用大于或等于(>=)和小于或等于(<=)来替换 BETWEEN 运算符,如下所示:
column | expression <= end_expression AND column | expression >= start_expression
但是使用 BETWEEN
运算符的条件比使用比较运算符>=、<=和逻辑运算符 AND 的条件可读性更强。
要对 BETWEEN
运算符的结果求反
,请使用 NOT BETWEEN
运算符,如下所示:
column | expression NOT BETWEEN start_expression AND end_expresion
如果列或表达式中的值小于 start_expression 的值且大于 end_expression 的值,则 NOT BETWEEN
返回 TRUE
。它等价于以下条件:
column | expression < start_expression AND column | expression > end_expression
如果 BETWEEN
或 NOT BETWEEN
的任何输入是 NULL
,则结果是 UNKNOWN
。
7.2 BETWEEN 示例
7.2.1 BETWEEN 与数字示例
查询OrderDate表中购买数量在8~10的所有订单信息:
select *
from OrderDate
where Quantity between 8 and 10
order by Quantity
执行结果:
7.2.2 BETWEEN 和日期示例
查询OrderDate表中在四、五月份下单的订单信息:
select *
from OrderDate
where OrderDate between '20230401' and '20230531' ----between '2023-04-01' and '2023-05-31'
order by OrderDate
执行结果:
第8节 LIKE
检查字符串是否与指定的模式匹配
8.1 LIKE运算符概述
LIKE
是一个逻辑运算符,用于确定字符串是否与指定的模式匹配。可以包括常规字符和非常规字符。 LIKE
运算符用于 SELECT 、 UPDATE 和 DELETE 语句的 WHERE 子句中,以根据模式匹配筛选行。
LIKE 运算符的语法:
column | expression LIKE pattern [ESCAPE escape_character]
要对 LIKE 运算符的结果求反,请使用 NOT 运算符,如下所示:
column | expression NOT LIKE pattern [ESCAPE escape_character]
在语法中:
Pattern 是要在列或表达式中搜索的字符序列。它可以包含以下有效的通配符:
① 通配符百分比 (%):零个或多个字符的任何字符串。
② 下划线 (_) 通配符:任意单个字符。
③ [字符列表] 通配符:指定集中的任何单个字符。
④ [字符-字符]:指定范围内的任何单个字符。
⑤ [^]:不在列表或范围内的任何单个字符。
通配符使LIKE
运算符比等于 (=) 和不等 (!=) 字符串比较运算符更灵活。
8.2 转义字符
转义字符指示 LIKE 操作符将转义字符视为常规字符。转义字符没有默认值,只能计算为一个字符。如果列或表达式与指定的模式匹配,则 LIKE 运算符返回 TRUE 。
8.3 LIKE 示例
8.3.1 % (百分号) 通配符示例
1、查询CustomerInfo表中,所有刘姓顾客的信息:
select *
from CustomerInfo
where CusName like '刘%'
执行结果:
2、查询CustomerInfo表中,所有姓名含有‘小’字顾客的信息:
select *
from CustomerInfo
where CusName like '%小%'
执行结果:
3、查询顾客姓名以‘刚’字结尾的顾客订单信息:
select *
from CustomerInfo
where CusName like '%刚'
执行结果:
4、查询顾客姓名以‘王’开头‘宇’结尾的顾客订单信息:
select *
from CustomerInfo
where CusName like '王%宇'
执行结果:
8.3.2 _(下划线)通配符示例
下划线表示单个字符。查询顾客姓名第二个字是‘小’的所有顾客订单信息:
select *
from CustomerInfo
where CusName like '_小%' -- where CusName like '_小_'
执行结果:
通配符 '_小%'
:
第一个下划线字符( _ )匹配任何单个字符;
第二个字母 u 与字母u完全匹配;
第三个字符 % 匹配任何字符序列。
8.3.3 [字符列表] 通配符示例
带有字符列表的方括号,例如 [ABC] 单个字符,该字符必须是列表中指定的字符之一。
1、查询 CustomerInfo 表中客户姓名中第一个字符为‘张’或‘刘’ 的客户信息:
select *
from CustomerInfo
where CusName like '[张刘]%'
执行结果:
2、查询 employees 表中员工 first_name 第一个字符为‘A’或‘D’ 的客户信息:
select *
from employees
where first_name like '[AD]%'
order by first_name
执行结果:
8.3.4 [character-character] 通配符示例
带有字符范围的方括号,如 [A-C] 表示必须在指定范围内的单个字符。
查询employees表中,员工 first_name 以A-D开头的员工信息:
select *
from employees
where first_name like '[A-D]%'
order by first_name
执行结果:
8.3.5 [^Character List or Range] 通配符示例
带插入符号(^)的方括号后跟一个范围,例如, [^A-C] 或字符列表,例如, [ABC] 表示不在指定范围或字符列表中的单个字符。
1、查询 employees 表中,员工 first_name 不以A-D开头的员工信息:
select *
from employees
where first_name like '[^A-D]%'
order by first_name
执行结果:
2、查询 CustomerInfo 表中,顾客姓氏不是‘张’‘刘’‘王’‘陈’的顾客信息:
select *
from CustomerInfo
where CusName like '[^张刘王陈]%'
order by CusName
执行结果:
8.3.6 NOT LIKE 操作符示例
1、查询 CustomerInfo 表中,顾客姓氏不是‘张’‘刘’‘王’‘陈’的顾客信息:
select *
from CustomerInfo
where CusName not like '[张刘王陈]%'
order by CusName
执行结果:
2、查询 employees 表中,员工 first_name 不以A-D开头的员工信息:
select *
from employees
where first_name not like '[A-D]%'
order by first_name
执行结果:
8.3.7 LIKE 和 ESCAPE 示例
ESCAPE
是一个用于指定转义字符的关键字。当在SQL语句中使用LIKE
操作符进行模式匹配时,我们可以使用ESCAPE
来定义一个转义字符,以通过转义某些特殊字符,将其视为普通字符而不是具有特殊含义的通配符。
现有一张季度汇报表,内容如下:
现在需要查询汇报内容数据20%的相关内容,此时我们可以有如下查询:
select *
from 销售报表
where 汇报内容 like '%20%'
执行结果:
从查询结果中可以发现返回的结果并不符合我们的预期,因为在LIKE
操作符中,有两个特殊字符具有通配符的含义:%(表示任意字符序列)
和 _(表示任意单个字符)
,他们在使用时不会呈现出普通字符。当我们希望在LIKE
操作中使用这些字符作为普通字符进行匹配,而不是通配符,就可以通过ESCAPE
来指定转义字符。
改写上述代码如下:
select *
from 销售报表
where 汇报内容 like '%20\%%' ESCAPE '\'
在此查询中, ESCAPE
子句指定字符‘\’是转义字符。它指示将‘\’后的字符(即‘%’)视为文字字符串而不是字符串。注意,如果没有 ESCAPE 子句,查询将返回一个空的结果集。
执行结果:
Note:
ESCAPE
关键字不仅可以用于LIKE操作符,还可以用于其他需要转义特殊字符的场景,如字符串中的特殊字符、正则表达式等。
第9节 别名
9.1 列的别名
使用 SELECT 语句从表中查询数据时,SQL Server使用列名作为输出的列标题。
1、查询employees表中员工的first_name和last_name:
select first_name,last_name
from employees
order by first_name
执行结果:
如输出所示列标题分别使用了 first_name 和 last_name 列名。
2、要获取客户的全名,可以使用串联 +
运算符将名字、空格和姓氏串联起来,查询如下:
select first_name+ ' '+last_name
from employees
order by first_name
执行结果:
因为查询的结果是组合出来的列,在原表中没有此列,所以返回结果集将全名列返回为( No column name ),这在此没有意义,在查询执行期间为列或表达式分配临时名称,需要使用列别名。
3、给查询的结果列取别名:
select first_name+ ' '+last_name as 'Name' --as 可省略
from employees
order by first_name
执行结果:
Note:
① 使用 AS
关键字分隔列名或表达式与别名,AS
关键字是可选的;
② 别名可省略括号,但是如果别名中包含空格符,则括号不可省:如上述代码别名为 ‘Full Name’,括号不可省略,如果为‘Full_Name’ 括号可省略。
③ 为列分配别名时,可以在 ORDER BY
子句中使用列名或列别名, ORDER BY
子句是要处理的最后一个子句,因此列别名在排序时是已知的。
9.2 表的别名
一个表可以被赋予一个别名,称为关联名或范围变量。
现有员工信息employees 表和工资表salaries ,需要查询员工工号,员工姓名(全)和员工工资:
select em.emp_no,first_name+ ' '+last_name as 'Name',sa.salary
from employees em
inner join salaries sa
on em.emp_no = sa.emp_no
order by Name
执行结果:
在此查询中:
信息employees 表和工资表salaries都有一个列的名称相同 emp_no 列 ,需要使用以下语法引用该列:em.emp_no
,em即employees 表的别名,表示employees 表中的emp_no列;
为表分配别名时,必须使用别名来引用表列,否则在执行时会报错。