第十二单元 `T-SQL` 编程

  • 第十二单元 `T-SQL` 编程已关闭评论
  • 72 次浏览
  • A+
所属分类:.NET技术
摘要

 1,开头不能是数字,空格或特殊字符 2,首字符后可以包含 字母 数字 汉字 _ @ #

create database step2_unit12; go use step2_unit12; go -- 部门表 CREATE TABLE [dbo].[Department](     [Id] [int] PRIMARY KEY IDENTITY(1,1) NOT NULL,     [Name] [varchar](20) NULL ); -- 职位表 CREATE TABLE [dbo].[Job](     [Id] [int] PRIMARY KEY IDENTITY(1,1) NOT NULL,     [Name] [varchar](20) NULL ); -- 人员表 CREATE TABLE [dbo].[person](     [Id] [int] PRIMARY KEY IDENTITY(1,1) NOT NULL,     [Name] [varchar](50) NULL,     [Sex] [varchar](10) NULL,     [Age] [int] NULL ); -- 工资表 CREATE TABLE [dbo].[Salary](     [Id] [int] PRIMARY KEY IDENTITY(1,1) NOT NULL,     [Sal] [money] NULL,     [Comm] [money] NULL,     [StaffId] [int] NULL ); -- 员工表 CREATE TABLE [dbo].[Staff](     [Id] [int] PRIMARY KEY IDENTITY(1,1) NOT NULL,     [Name] [varchar](20) NOT NULL,     [Hiredate] [datetime] NOT NULL,     [DepartmentId] [int] NULL,     [JobId] [int] NULL ); SET IDENTITY_INSERT [dbo].[Department] ON  ​ INSERT [dbo].[Department] ([Id], [Name]) VALUES (1, N'技术部') INSERT [dbo].[Department] ([Id], [Name]) VALUES (2, N'人资部') INSERT [dbo].[Department] ([Id], [Name]) VALUES (3, N'市场部') SET IDENTITY_INSERT [dbo].[Department] OFF SET IDENTITY_INSERT [dbo].[Job] ON  ​ INSERT [dbo].[Job] ([Id], [Name]) VALUES (1, N'经理') INSERT [dbo].[Job] ([Id], [Name]) VALUES (2, N'组长') INSERT [dbo].[Job] ([Id], [Name]) VALUES (3, N'员工') SET IDENTITY_INSERT [dbo].[Job] OFF SET IDENTITY_INSERT [dbo].[person] ON  ​ INSERT [dbo].[person] ([Id], [Name], [Sex], [Age]) VALUES (1, N'高圆圆', N'', 28) INSERT [dbo].[person] ([Id], [Name], [Sex], [Age]) VALUES (2, N'王佳佳', N'', 32) INSERT [dbo].[person] ([Id], [Name], [Sex], [Age]) VALUES (3, N'杨硕', N'', 25) SET IDENTITY_INSERT [dbo].[person] OFF SET IDENTITY_INSERT [dbo].[Salary] ON  ​ INSERT [dbo].[Salary] ([Id], [Sal], [Comm], [StaffId]) VALUES (1, 15000.0000, 10000.0000, 1) INSERT [dbo].[Salary] ([Id], [Sal], [Comm], [StaffId]) VALUES (2, 15000.0000, 9000.0000, 2) INSERT [dbo].[Salary] ([Id], [Sal], [Comm], [StaffId]) VALUES (3, 12000.0000, 8000.0000, 3) INSERT [dbo].[Salary] ([Id], [Sal], [Comm], [StaffId]) VALUES (4, 8000.0000, 6000.0000, 4) INSERT [dbo].[Salary] ([Id], [Sal], [Comm], [StaffId]) VALUES (5, 4000.0000, 3000.0000, 5) INSERT [dbo].[Salary] ([Id], [Sal], [Comm], [StaffId]) VALUES (6, 9000.0000, 8000.0000, 6) INSERT [dbo].[Salary] ([Id], [Sal], [Comm], [StaffId]) VALUES (7, 15000.0000, 12000.0000, 7) INSERT [dbo].[Salary] ([Id], [Sal], [Comm], [StaffId]) VALUES (8, 12000.0000, 9000.0000, 7) INSERT [dbo].[Salary] ([Id], [Sal], [Comm], [StaffId]) VALUES (9, 7000.0000, 2000.0000, 9) INSERT [dbo].[Salary] ([Id], [Sal], [Comm], [StaffId]) VALUES (10, 9000.0000, 8000.0000, 10) SET IDENTITY_INSERT [dbo].[Salary] OFF SET IDENTITY_INSERT [dbo].[Staff] ON  ​ INSERT [dbo].[Staff] ([Id], [Name], [Hiredate], [DepartmentId], [JobId]) VALUES (1, N'王鑫', CAST(N'2014-02-01 00:00:00.000' AS DateTime), 1, 1) INSERT [dbo].[Staff] ([Id], [Name], [Hiredate], [DepartmentId], [JobId]) VALUES (2, N'张磊', CAST(N'2015-09-03 00:00:00.000' AS DateTime), 2, 1) INSERT [dbo].[Staff] ([Id], [Name], [Hiredate], [DepartmentId], [JobId]) VALUES (3, N'李鹏', CAST(N'2016-08-01 00:00:00.000' AS DateTime), 3, 2) INSERT [dbo].[Staff] ([Id], [Name], [Hiredate], [DepartmentId], [JobId]) VALUES (4, N'王洋', CAST(N'2019-02-03 00:00:00.000' AS DateTime), 1, 3) INSERT [dbo].[Staff] ([Id], [Name], [Hiredate], [DepartmentId], [JobId]) VALUES (5, N'吴潘', CAST(N'2018-10-01 00:00:00.000' AS DateTime), 2, 3) INSERT [dbo].[Staff] ([Id], [Name], [Hiredate], [DepartmentId], [JobId]) VALUES (6, N'贾丹', CAST(N'2018-07-01 00:00:00.000' AS DateTime), 2, 2) INSERT [dbo].[Staff] ([Id], [Name], [Hiredate], [DepartmentId], [JobId]) VALUES (7, N'李露', CAST(N'2016-09-01 00:00:00.000' AS DateTime), 3, 1) INSERT [dbo].[Staff] ([Id], [Name], [Hiredate], [DepartmentId], [JobId]) VALUES (8, N'杨腾', CAST(N'2018-11-08 00:00:00.000' AS DateTime), 1, 2) INSERT [dbo].[Staff] ([Id], [Name], [Hiredate], [DepartmentId], [JobId]) VALUES (9, N'孙艺', CAST(N'2018-12-26 00:00:00.000' AS DateTime), 3, 3) INSERT [dbo].[Staff] ([Id], [Name], [Hiredate], [DepartmentId], [JobId]) VALUES (10, N'赵帅', CAST(N'2019-01-03 00:00:00.000' AS DateTime), 1, 3) SET IDENTITY_INSERT [dbo].[Staff] OFF  

 

1. T-SQL 命名规则

1,开头不能是数字,空格或特殊字符

2,首字符后可以包含 字母 数字 汉字 _ @ #

3,不能是系统保留字(关键字)

 

2. 变量

全局变量

整个系统都可以使用

@@ERROR   返回执行的上一个T-SQL语句的错误号,0 代表没有错误,非0 代表有错误 begin tran     declare @a int = 1;      select @a/0     select @@ERROR commit  @@IDENTITY 返回插入到表的IDENTITY列的最后一个值 @@LANGUAGE返回当前所用语言的名称 @@MAX_CONNECTIONS返回Sql Server实例允许同时进行的最大用户连接数 @@ROWCOUNT返回上一次语句影响的数据行的行数 @@SERVERNAME返回运行Sql Server的本地服务器的名称 @@SERVICENAME返回Sql Server正在其下运行的注册表项的名称 @@TIMETICKS返回每个时钟周期的微秒数 @@TRANCOUNT返回当前连接的活动事务数 @@VERSION 返回当前安装的日期、版本和处理器类型

 

局部变量

注意:定义局部变量必须以@开头。只能在当前连接(会话)下使用

定义变量

--declare @变量名 变量类型= 变量值;  --如 declare @name varchar(20)= '任我行';

 

局部变量赋值

  • select 赋值  declare @age int= 0; -- 定义变量  -- 直接赋值 select @age = 20;  -- 也可通过查询语句进行赋值 select @age=Age from person where Name='高圆圆'; set 赋值  set @age = 20; -- 不可通过查询语句进行赋值 declare @username nvarchar(50)='任我行'; --定义局部变量,并赋初始值 set @username='张三'; --通过set赋值 select @username='aaa'; --通过select 赋值 select @username as 用户名; --通过select 输出并取别名 print @username; --print 打印输出

     

案例

-- 查询高圆的年龄,如果年龄是1-10岁,则输出儿童,10-25 输出少年,25-40输出青年,40-60输出中年,其他老年 ​ declare @age int=0; select @age=Age from person where Name='高圆圆'; set @age=30; --给局部变量赋值 ​ if @age<10 begin     print '儿童'; end; else if  @age<25 begin     print '少年' end; else if  @age<40 begin     print '青年' end; else if  @age<60 begin     print '中年' end; else  begin     print '老年' end;  

 

3. 运算符

1. 算术运算符

运算符 名称
+ 加法运算符
- 减法运算符
* 乘法运算符
/ 除法运算符
% 求余运算符

 

 

2. 比较运算符

运算符 名称
= 等于
> 大于
< 小于
>= 大于等于
<= 小于等于

 

 

3. 逻辑运算符

运算符 含义
ALL 如果一组比较都为true,那么就为true
AND 如果两个布尔表达式都为true,那就为true
Any 两个任意一个布尔表达式为true即为true
Between 如果操作数在这个范围,则为true
exists 如果查询包含一些行,则为true
in 如果表达式等于表达式中的某一个,则为true
like 如果操作数与一种模式想匹配则为true
not 对任何一个布尔运算符取反
or 两个布尔表达式一个为true,则为true
some 在一组比较中,有些为true, 那么就为true

 

4. 连接运算符

是连接运算符,可以将两个及以上个字符串拼接到一起  select 'abc'+'bdc';  select '10'+'10'; -- sqlserver 中没有隐式转换 -- 输出结果:1010   select 10+'10'; -- sqlserver 中没有隐式转换 -- 输出结果:20   select 10+'10a'; -- 报错,还是因为没有隐式转换

 

 

5. 运算符优先级

级别 运算符
1 ~(位非)
2 *(乘 )、/ (除)、%(求余)
3 +(正)、-(负)、+(加),-(减),+(连接)、^(位异或)、&(位与)、|(位或)
4 =(等于)、>、< 、>=、<= 、!=、<>(不等于)、!>(不小于)、!<(不大于)
5 not
6 and
7 all、any、between、in、like、or、some
8 =(赋值)

 

  1. 查询出人员表中总的记录数给@MyCount局部变量赋值并输出

    declare @mycount int; select @mycount=count(Id) from person; select @mycount;

     

  2. 求出高圆圆与王佳佳的年龄总和

    declare @age1 int,@age2 int,@sum int; --declare @age2 int; --declare @sum int; select @age1 = Age from person where Name='高圆圆'; select @age2 = Age from person where Name='王佳佳';   set @sum=@age1+@age2; --select @sum=@age1+@age2; select @sum;  

     

  3. 输出出“高圆圆 VIP”这样一条信息

    select Name,'VIP' as 等级 from person where Name='高圆圆'  select Name+'     VIP' as VIP from person where Name='高圆圆'  

     

  1. 查询出年龄大于25岁的人员信息

    Select * from person where age>25

     

     

  2. 查询出年龄大于25岁或者性别为女的人员信息

    Select * from person where age>25 or Sex=''

     

 

6. 作业

  1. T-SQL编程实现123%7后得结果

  2. 题目2

    T-sql语句进行如下编程

    (1) 定义一个整形变量age

    (2) 给变量age赋值为10

    (3) 定义一个不超过8字符的变量name

    (4) 给name变量赋值为”张三”

    (5) 调用变量,输出最终结果 张三的年龄是10岁

 

配套视频链接:1. 索引的概述_哔哩哔哩_bilibili