SQL Server 数据库 T-SQL 查询语句
一、SQL 概述
在进行数据管理时,使用 SSMS 进行数据维护有可视化、方便的优点,但是在批量维护或重复维护数据时,每次都需要使用 SSMS 不但不方便,而且容易出错。通过编写 SQL 语句来维护数据库便于解决重复或批量维护数据的难题。数据库目前标准的指令集就是 SQL。
1.SQL 和 T-SQL
SQL 是 Structured Query Language 的缩写,即结构化查询语言。经过多年的发展,SQL 语言得到了广泛的应用。如今 Oracle、Sybase、Informix、SQL Server 这些大型的数据库管理系统都支持 SQL 作为查询语言。SQL 已经成为关系数据库的标准语言。
1)非过程化语言
SQL 是一个过程化的语言,因为它一次处理一个记录,对数据提供自动导航功能。
2)统一的语言
SQL 可用于所有用户的数据库活动模型,包括系统管理员、数据库管理员、应用程序员、决策支持系统人员及许多其他类型的终端用户。
3)所有关系数据库的公共语言
由于所有主要的关系数据库管理系统都支持 SQL 语言,用户可将使用 SQL 的技能从一个 RDBMS 转到另一个。所有 SQL 编写的程序都是可以移植的。
2.T-SQL 的组成
T-SQL 语言主要由以下几部分组成:
- 数据操纵语言(DML):用来查询、插入、删除和修改数据库中的数据,如 select、insert、update、delete。
- 数据定义语言(DDL):用来建立数据库、数据库对象和定义其列,大部分是以 create 开头的命令,如 create、alter、drop。
- 数据控制语言(DCL):用来控制数据库组件的存取许可、存取权限等,如 grant、revoke。
二、使用 T-SQL 语句操作数据表
在 SQL Server Management 中对表数据进行插入、更新或删除比较简单,除此之外,也可以使用 T-SQL 语句实现对表数据的插入、更新、删除等操作。
未安装 SQL Server 数据库需看 https://blog.csdn.net/weixin_46902396/article/details/110436865 来进行安装。
先创建一个表:
create table [成绩表]
(
编号 int identity(1,1) not null,
名称 nvarchar(10) not null,
身份证号 nvarchar(18) primary key,
成绩 tinyint not null check(成绩>=0 and 成绩<=100),
)
1.插入数据
使用 insert 语句将数据插入表中。insert 语法格式如下:
insert [into] <表名> [列名] values <值列表>
向 成绩表 中插入一行数据:
insert into [成绩表] (名称,身份证号,成绩)
values ('张三','001','88')
select * from [成绩表]
2.更新数据
使用 update 语句更新表中的数据。update 语法格式如下:
update <表名> set <列名=更新值> [where<更新条件>]
注意:
- set 后面可以紧随多个数据列的更新值,不限一个。
- where 子句是可选的,用来限制条件。如果不限制,则整个表的所有数据行将被更新。
使用 update 语句将 张三 的成绩更新为 59:
update [成绩表] set 成绩='59' where 名称='张三'
select * from [成绩表]
3.删除数据
1)使用 delete 语句删除表中的数据
delete 语法格式如下:
delete from <表名> [where<删除条件>]
使用 delete 语句将 成绩表 中名称为张三的数据:
delete [成绩表] where 名称='张三'
select * from [成绩表]
2)使用 truncate table 语句删除表中的数据
truncate table 语句用来删除表中的所有行。truncate table语法格式如下:
truncata table <表名>
三、使用 T-SQL 查询数据
1.select 语法结构
T-SQL 中的查询基本格式是由 select 子句、from 子句和 where 子句组成的查询块。
select <列名> from <表名> where <查询限定条件>
2.表达式
表达式是符号和运算符的一种组合,并且可以对它求值得到单个数据值。简单表达式可以是一个常数、变量、列或标量函数。可以用运算符把两个或多个简单表达式连接成一个复杂表达式。
1)条件表达式
SQL Server 中的表达式可以包含下列一个或多个参数:
- 常量:表示单个指定数据值的符号。一个常量由一个或多个字母、数字字符(字母 a ~ z、A ~ Z,数字 0 ~9)或符号(!、@、#等)组成。
- 列名:表中列的名称,表达式中仅允许使用列的名称。
- {一元运算符}:仅有一个操作数的运算符,其中"+“表示正数,”-“表示负数,”~"表示补数运算符。
- {二元运算符}:将两个操作数组合执行操作的运算符。
比较运算符:
运算符 | 含义 |
---|---|
= | 等于 |
> | 大于 |
< | 小于 |
>= | 大于或等于 |
<= | 小于或等于 |
!= | 不等于 |
BETWEEN | 指定值的包含范围(包含边界)。使用 AND 分隔符开始值和结束值 |
LIKE | 模糊查询,与指定字符串进行模式匹配 |
IN | 是否在数据范围里面 |
在查询中也经常会用到LIKE,使用 LIKE 运算符的 T-SQL 语句中需要使用下面表中的通配符运算符:
通配符 | 含义 |
---|---|
- | 任何单个字符 |
% | 任意长度的字符串 |
[] | 括号中所指定范围内的一个字符 |
[^] | 不在括号中所指定范围内的任意一个字符 |
2)逻辑表达式
T-SQL 支持的逻辑运算符有 NOT、AND 和 OR,如下表所示:
操作符 | 含义 |
---|---|
NOT | 和其他操作符一起使用,取反的操作 |
AND | 组合两个条件,并在两个条件都为 True 时取值为 True |
OR | 组合两个条件,并在两个条件之一为 True 时取值为 True |
AND 和 OR 运算符时连接条件表达式,NOT 否定条件。AND 连接两个条件,并且仅两个条件都为真时才返回 True。OR 也连接两个条件,但只要其中任意一个为真就返回 True。
3.查询举例
先创建一个工资表
create table 工资表
(
编号 int identity (1,1) not null,
姓名 nvarchar(10) not null,
身份证号 varchar(18) primary key,
职务 nvarchar(30) not null,
出生日期 datetime not null,
基本工资 money not null,
备注 nvarchar(1000),
)
往表里写入数据
insert into [工资表](姓名,身份证号,职务,出生日期,基本工资)
values ('张三','10086','DBA','1995/3/3','10000')
insert into [工资表](姓名,身份证号,职务,出生日期,基本工资)
values ('李四','20086','运维工程师','1992/2/2','9000')
insert into [工资表](姓名,身份证号,职务,出生日期,基本工资,备注)
values ('王五','22286','运维经理','1990/5/5','15000','技术全面')
insert into [工资表](姓名,身份证号,职务,出生日期,基本工资)
values ('孙七','33386','运维工程师','1995/1/1','8000')
insert into [工资表](姓名,身份证号,职务,出生日期,基本工资)
values ('赵六','66086','运维总监','1980/7/7','36000')
insert into [工资表](姓名,身份证号,职务,出生日期,基本工资)
values ('张嘴','66686','DBA','1989/6/6','9000')
insert into [工资表](姓名,身份证号,职务,出生日期,基本工资,备注)
values ('王者','88086','CTO','1975/11/11','55000','项目经验丰富')
1)查询表中所有列
- 把表中的所有列信息都列举出来比较简单,使用" * "通通配符来表示所有列。
查询 工资表 中所有员工信息:
select * from [工资表]
2)查询表中所有特定列
- 查询表中特定列时,需要指定查询列名,如果需要查询多列内容,使用 “,” 将每个字段分开。
查看 工资表 中 “姓名” “职务” “基本工资” 列内容:
select 姓名,职务,基本工资 from [工资表]
3)查询表中特定行——条件查询
- 当需要查询特定行内容时,就需要使用 where 子句进行条件限制。
查询 工资表 中所有运维工程师的姓名:
select 姓名 from [工资表] where 职务='运维工程师'
查询 工资表 中基本工资为 8000 ~ 10000 的员工所有信息:
select * from [工资表] where 基本工资 between 8000 and 10000
查询 工资表 中基本工资低于 10000 或高于 20000 的员工所有信息。
select * from [工资表] where 基本工资<10000 or 基本工资>20000
查询 工资表 中基本工资为 8000、9000 和 10000 的员工所有信息:
select * from [工资表] where 基本工资 in (8000,9000,10000)
查询 工资表 中身份证号以 66 开头的员工所有信息:
select * from [工资表] where 身份证号 like '66%'
查询 工资表 中姓 ‘李’ 的运维工程师的信息:
select * from [工资表] where 姓名 like '李%' and 职务='运维工程师'
查询 工资表 中备注不为空的员工所有信息:
select * from [工资表] where 备注 is not null
4)限制查询返回的行数
- 在 T-SQL 中,使用 TOP 关键字来限制查询返回的行数。
查询 工资表 中前 5 行的数据:
select top 5 * from [工资表]
5)改变查询结果集列名称
- AS 子句可以用来改变结构集列的名称,也可以为组合或计算出的列指定名称。
查询 工资表 中 姓名 和 身份证号 两列数据,查询结果 姓名 列名称显示为 name;身份证号 列名称显示为 id。
select 姓名 as name,身份证号 as id from [工资表]
6)查询结果排序
- 通过 ORDER BY 子句可以改变查询结果的显示顺序。
查询 工资表 中所有员工信息,按照基本工资从高到低显示查询结果:
select * from [工资表] order by 基本工资 desc
- 注意:asc 表示升序,desc 表示降序。
7)查询时去重
- 通过 DISTINCT 关键字可以将查询结果的重复数据清除掉。
查询 工资表 中有那些职务:
select distinct 职务 from [工资表]
8)综合查询
- 通过用户希望得到的信息需要通过综合上述多种方法才能得到。
在 工资表 中列出满足身份证号的左起第三位是 0的、除了 CTO 以外的,所有员工的姓名、身份证号、职务和基本工资,其中姓名字段显示为 name,查询结果按照基本工资的由高到底排序:
select 姓名 as name,身份证号,职务,基本工资 from [工资表]
where 身份证号 like '_0%' and 职务 !='CTO'
order by 基本工资 desc
4.使用 select 生成新数据
1)select 使用 into 关键字
将 工资表 中所有员工的姓名、身份证号和职务生成为 新工资表:
select 姓名,身份证号,职务 into [新工资表] from [工资表]
select * from [新工资表]
2)insert 使用 select 子句
将 工资表 中所有基本工资大于等于 15000 的员工的姓名、职务、和出生日期保存到 高工资表中:
注意:需要先创建 高工资表 出来
create table [高工资表]
(
姓名 nvarchar(10) not null,
职务 nvarchar(30) not null,
出生日期 datetime not null,
)
insert into [高工资表] (姓名,职务,出生日期)
select 姓名,职务,出生日期 from [工资表]
where 基本工资 >= 15000
select * from [高工资表]