第十二单元 `T-SQL` 编程
  AfZgh8qrZuSw 2023年12月22日 18 0
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岁

 

配套视频链接:SQL Server高级编程 - 网易云课堂 (163.com)

 

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月22日 0

暂无评论

推荐阅读
  NPQODODLqddb   2024年05月17日   66   0   0 .NET
  mVIyUuLhKsxa   2024年05月17日   51   0   0 .NET
  XkHDHG7Y62UM   2024年05月17日   43   0   0 .NET
  f18CFixvrKz8   2024年05月18日   80   0   0 .NET
  rBgzkhl6abbw   2024年05月18日   73   0   0 .NET
  MYrYhn3ObP4r   2024年05月17日   39   0   0 .NET
  S34pIcuyyIVd   2024年05月17日   56   0   0 .NET
  gKJ2xtp6I8Y7   2024年05月17日   50   0   0 .NET
  MYrYhn3ObP4r   2024年05月17日   35   0   0 .NET
AfZgh8qrZuSw