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 [高工资表]

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46902396/article/details/110876714