实验七:变量、函数、流程控制与游标

实验内容与完成情况(记录所有的实验过程):

1. 使用局部变量、全局变量

(1)定义一个tinyint的整型变量,为其赋值68,并显示变量的值。

declare @var tinyint

set @var=58

select @var put

(2)定义一个长度为20的可变长度型字符变量,为其赋值“Welcome to FJUT”, 并显示变量的值。

declare @var varchar(20)

set @var='Welcome to FJUT'

select @var put

(3)在批处理中声明两个局部变量@ssex和@sdept并对它们赋值,对Student表进行查询,要求两局部变量在SELECT 语句的 WHERE 子句中被使用,查询的要求是性别为‘男’或所在系为‘CS’系的那些学生。

declare @ssex varchar(2),@sdept varchar(4)

set @ssex='男'

set @sdept='CS'

select * from Student

where Ssex=@ssex OR Sdept=@sdept;

(4)查询当前数据库管理系统版本。

select @@VERSION version;

(5)在student表中执行所有学生年龄加1岁语句,并用 @@ROWCOUNT 来检测是否有发生更改的行。

update Student

set Sage+=1

select @@ROWCOUNT change;

2.函数的使用

(1) 数学函数的使用:

  1. 分别用函数求出-5的绝对值,25的平方根,3的三次方。

select abs(-5)  '-5的绝对值'

select sqrt(25)   '25的平方根'

select 3*3*3  '3的三次方'

  1. 写出以下语句的执行结果:

Select '自然对数'=LOG(10),

        '指数'    =EXP(2),

        '符号'    =SIGN(2)

Select '圆周率'  =PI(),

'正弦'    =SIN(PI()/2.0),

'余弦'    =COS(PI())

(2) 字符串函数的使用:

去掉字符串'  machine  '左边的2个空格,右边与'press'连接起来;

declare @var1 varchar(10) ,@var2 varchar(10)

set @var1='  machine'

set @var2='press'

select LTRIM(@var1)+@var2 string

(3) 日期、时间函数的使用:

1)返回系统当前日期并以整数形式返回当前日期的年份、月份、日;

select

datename(yyyy,getdate())+'年'+

datename(mm,getdate())+'月'+

datename(dd,getdate())+'日' 日期;

2)返回给定日期“2019-5-21”与当前日期相差的天数。

select datediff(day,'2019-5-21',getdate()) 相差的天数;

 (4) 系统函数与元数据函数的使用:

显示当前数据库用户的名称

select user 当前数据库用户的名称;

  1. 编写Select语句或Transact-SQL程序
  1. 在SELECT 语句中,CASE 搜索函数允许根据比较值在结果集内对值进行替换。要求仿照《数据库系统概论》的sc表,根据学生的成绩范围将成绩(grade 列)显示为文本注释。(要求:<60分,文本注释为“不及格”,60-70,“及格”,70-80,“中”,80-90,“良”,90-100,“优”)。

执行结果形式如下:

sno        cno   Grade Classified grade

--------- ---- ---------------- ------

200215121 4    成绩为空!            NULL

. . . . . .

200215126 6    不及格               55

200215122 2    良                   80

200215122 1    优                   92

(11 行受影响)

select Sno,Cno,

case

        when Grade<60 then '不及格'

        when Grade>=60 and Grade<70 then '及格'

        when Grade>=70 and Grade<80 then '中'

        when Grade>=80 and Grade<90 then '良'

        when Grade>=90 and Grade<=100 then '优'

        else '成绩为空! '

end as 'Grade Classified ',Grade

from SC;

  1. 用Transact-SQL语言编写程序计算1~100之间所有能被7整除的数的总和。

declare @a int,@b int

set @a=0

set @b=0

while @a<=100

            begin

                    if(@a%7=0)

                       set @b+=@a

                    set @a+=1

       end

print '1~100之间所有能被7整除的数的总和为:'+cast(@b as char(5))

  1. *自选实例,实践并掌握Transact-SQL以下控制流语言的使用方法:
    BEGIN...END、WHILE、BREAK、CONTINUE、IF...ELSE、WAITFOR

如:求十以内的奇数积

declare @a int,@b int

set @a=1

set @b=1

while @a<=10

            begin

                    set @b*=((@a%2)*@a)

                     set @a+=2

            end

print '十以内的奇数积为:'+cast(@b as char(5))

  1. *自选实例,实践并掌握以下Transact-SQL语句:
    /*...*/(注释)、--(注释)、PRINT

/*这是一段注释*/

-- 这也是一段注释

--下面是求十以内的奇数积

declare @a int,@b int

set @a=1

set @b=1

while @a<=10

            begin

                    set @b*=((@a%2)*@a)

                     set @a+=2

            end

print '十以内的奇数积为:'+cast(@b as char(5))

  1. 利用游标逐条地打印出所有读者(显示信息包括读者号,姓名,所在部门)的借阅情况,列出图书号、图书名、借阅日期和还书日期等信息;若读者无借阅情况,则给出提示'此读者无借阅!'。表结构如下:

reader(dzh,dzxm, nl,bm) 说明:读者表(读者号,读者姓名,年龄,所在部门)

books(tsh,tsm,zz,cbs,cbsj,jg) 说明:图书表(图书号,图书名,作者,出版社,出版时间,价格)

borrow(dzh,tsh,jyrq,hsrq) 说明:借阅表(读者号,图书号,借阅日期,还书日期)。

create table reader

(dzh char(8) primary key ,dzxm char(20), nl int,bm char(20))

insert into reader values('j0010001','木子',21,'信息学院');

insert into reader values('j0010002','朴树人',20,'数计学院');

insert into reader values('j0010003','单名',20,'数计学院');

insert into reader values('j0010004','欢喜',22,'信息学院');

create table books

(tsh varchar(6) primary key,tsm varchar(50) not null,zz char(20),

 cbs varchar(20),cbsj datetime,jg money)

insert into books values('BU1021','The Busy Executive''s Database Guide',

'李承德','清华大学出版社','2011-06-12',39);

insert into books values('TC4203','Fifty Years in Buckingham Palace Kitchens',

'费翔','高等教育出版社','2018-08-12',41);

insert into books values('BU1022','Secrets of Silicon Valley',

'Jason','人民出版社','2019-11-12',29);

create table borrow (dzh char(8),tsh varchar(6),jyrq datetime,hsrq datetime,

primary key (dzh,tsh,jyrq))

insert into borrow values('j0010001','BU1021',getdate(),'2020-06-12');

insert into borrow values('j0010001','BU1022',getdate()-3,'2020-05-22');

insert into borrow values('j0010001','TC4203',getdate()-30,'2020-04-28');

insert into borrow values('j0010002','TC4203',getdate()-10,'2020-05-28');

insert into borrow values('j0010002','BU1021',getdate(),null);

insert into borrow values('j0010003','BU1021',getdate()-200,'2020-01-28');

insert into borrow values('j0010003','BU1022',getdate()-300,'2020-02-28');

DECLARE @dzh char(8),@dzxm char(20),@bm char(20)

DECLARE  REDCUR CURSOR FOR SELECT dzh,dzxm,bm FROM reader

OPEN REDCUR

FETCH NEXT FROM REDCUR INTO @dzh,@dzxm,@bm

WHILE @@FETCH_STATUS=0

BEGIN

   PRINT '读者号:'+CAST(@dzh AS CHAR(8))+'   姓名:'+CAST(@dzxm AS CHAR(20))+' 部门:'+CAST(@bm AS CHAR(20))

   DECLARE @borrowtsh VARCHAR(6),@jyrq datetime,@hsrq datetime,@tsm varchar(50)

   DECLARE BORCUR CURSOR

     FOR SELECT borrow.tsh,tsm,jyrq,hsrq

         FROM  borrow,books

         WHERE @dzh=borrow.dzh and books.tsh=borrow.tsh

   OPEN BORCUR

   FETCH NEXT FROM BORCUR INTO @borrowtsh,@tsm,@jyrq,@hsrq

   IF @@FETCH_STATUS<>0

    PRINT '   此读者无借阅!'

   WHILE @@FETCH_STATUS=0

     BEGIN

            IF @hsrq is null

                         PRINT CAST(@borrowtsh AS CHAR(6))+' '+CAST(@tsm AS CHAR(50))+CONVERT(varchar(10),@jyrq,0)+'  此书还未还!'

                 ELSE

                         PRINT CAST(@borrowtsh AS CHAR(6))+' '+CAST(@tsm AS CHAR(50))+CONVERT(varchar(10),@jyrq,0)+'  '+CONVERT(varchar(10),@hsrq ,0)

       FETCH NEXT FROM BORCUR INTO @borrowtsh,@tsm,@jyrq,@hsrq

     END

   CLOSE BORCUR

   DEALLOCATE BORCUR

  

   FETCH NEXT FROM REDCUR INTO @dzh,@dzxm,@bm

   print char(13)+char(10)

END

CLOSE REDCUR

DEALLOCATE REDCUR

附加题:

用 @@ERROR 检测INSERT 和 DELETE 语句的成功操作与否。

insert student values(200000000,'王建','男',22,'MA')

select @@ERROR 错误信息

delete from student where sname='王建'

select @@ERROR 错误信息

delete from student where sname='王建'and sno=200000000     

select @@ERROR 错误信息

出现的问题:

对于变量、函数、流程控制与游标理解不够

解决方案(列出遇到的主要问题和解决办法,列出没有解决的问题):

--游标

--create table #Temp1(username varchar(20))      --待测试的数据表

--create table #Temp2(username varchar(20))           --结果表 

--如果可以的话,可以创建类似上面两个表来存数据

DECLARE 游标名称 (@xxx)--定义游标

DECLARE 游标名称 CURSOR FOR SELECT 字段1,字段2,字段3,... FROM 表名 WHERE ...

OPEN 游标名称

FETCH NEXT FROM 游标名称 INTO 变量名1,变量名2,变量名3,... 

--提取操作的列数据放到局部变量中

--@@FETCH_STATUS =0       FETCH 语句成功

--@@FETCH_STATUS =-1        FETCH 语句失败或此行不在结果集中

--@@FETCH_STATUS =-2        被提取的行不存在

WHILE @@FETCH_STATUS=0   --返回被 FETCH 语句执行的最后游标的状态

        BEGIN

                 SQL语句执行过程... ...  --当满足条件时执行语句

                 FETCH NEXT FROM 游标名称 INTO 变量名1,变量名2,变量名3,...

        END

CLOSE 游标名称

DEALLOCATE 游标名称

另外,在判断的时候   使用 IF @xxx is null 来判断空值

变量、函数、流程控制与游标相关推荐

  1. MySql基础篇---004 其它数据库对象篇:视图,存储过程与函数,变量、流程控制与游标 ,触发器

    第14章_视图 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 常见的数据库对象 对象 描述 表(TABLE) 表是存储数据的逻辑单元,以行和列的形 ...

  2. 一条一条来,MySQL变量、流程控制与游标,完整详细可收藏

    文章目录 1. 变量 2. 定义条件与处理程序 3. 流程控制 4. 游标 MySQL8的新特性-全局变量的持久化 1. 变量 在MySQL数据库的存储过程和函数中,可以使用变量来存储查询或计算的中间 ...

  3. Mysql基础篇(8)—— 变量、流程控制和游标

    变量 变量分为系统变量和用户自定义变量 系统变量 由系统定义,属于服务器层面.这些系统变量定义了当前Mysql服务实例的属性.特征.系统变量分为全局系统变量(需要加global关键字)和会话级系统变量 ...

  4. MySql基础篇——变量、流程控制与游标

    一.变量 在mysql数据库中,变量分为系统变量以及用户自定义变量. 1.系统变量 1.1 介绍 系统变量由系统定义,属于服务器层面.启动mysql服务,生成mysql服务实例期间,mysql将为my ...

  5. MySQL-视图-触发器-事务-存储过程-函数-流程控制-索引与慢查询优化-06

    目录 视图*** 什么是视图 为什么要用视图 如何生成视图 修改视图 --> 最好(千万)不要 关联表数据改动前 关联表数据改动之后 触发器 什么是触发器 触发条件 触发器语法结构 修改mysq ...

  6. mysql存储过程,函数,变量与流程控制

    文章链接:https://codemouse.online/archives/354846877687 存储过程 存储过程和自定义函数是事先经过编译并存储在数据库中的一段SQL语句集合 存储过程参数可 ...

  7. VBScript基础,变量,函数,流程

    文章目录 1 VBScript基础 1.1 Option Explicit 2 函数和过程 2.1 过程 2.2 函数 2.3 调用过程和函数 2.3.1 过程调用 2.3.2 函数调用 2.4 退出 ...

  8. MySQL变量,存储过程,函数,流程控制详解(小白都能懂哦)

    1.系统变量 2.自定义变量 3.存储过程 4.函数 5.流程控制结构 1.系统变量 1.1系统变量的分类 系统变量:分为全局变量和会话变量 1.2系统变量的介绍 系统变量由系统提供,不是用户定义,属 ...

  9. MySQL(视图、存储过程与函数、流程控制、触发器)

    第一章 视图 1 什么是视图 为了提高复杂的SQL语句的复用性和表的操作的安全性 ,MySQL数据库管理系统提高了视图特性,所谓视图,本质上是一种虚拟表,其内容与真实的表相似,包含一系列带有名称的列和 ...

最新文章

  1. 美团BERT的探索和实践 | CSDN原力计划
  2. Linux C编程--进程间通信(IPC)5--System V IPC 机制1--消息队列
  3. Vue—上手实践—快速入门
  4. 0100-Same Tree(相同的树)
  5. spring依赖注入_Spring3:类型安全依赖项注入
  6. pb11 打印 自定义纸张_pb自定义纸张(连续走纸)
  7. 马云卸任浙江阿里小额贷款股份有限公司法定代表人、董事长
  8. JDBC Driver
  9. maven eclipse 编译错误 Dynamic Web Module 3.0 requires Java 1.6 or new
  10. Google 搜索的基本语法
  11. 博文视点大讲堂第40期第一讲:美国TOP60名校逐一点评 圆满结束
  12. java集合uml_Java开源UML建模集合
  13. 黑白简约个人网页制作 大学生个人网页设计模板 学生个人博客网页成品 简单个人网站作品下载 静态HTML CSS个人网页作业源代码
  14. 总体分布概况符合无界约翰逊分布(johnsonsu)的情况
  15. c# 计算一年有多少周
  16. svg图片调整大小和颜色
  17. Web服务器技术的优缺点有哪些?
  18. 曝光过度和曝光不足_过度思考,进化心理学和编程
  19. 【理科】2020年高考数学(第八章 立体几何)考点与题型全归纳
  20. TCP/IP卷一:06---Internet地址之(IP前缀和聚合)

热门文章

  1. ERP收付款的操作与设计--开源软件诞生22
  2. 银行业务中的清算和结算分别是什么样的过程?
  3. linux系统的7种banding方式
  4. Ubuntu和win10系统(N卡)
  5. 线程间共享 部分变量 Spring框架下向异步线程传递HttpServletRequest参数
  6. 流量压力折射移动互联网困局
  7. 学会感恩,学会分享,开始总结自己的职场经验
  8. 手机计算机数字游戏怎么玩,计算器游戏攻略
  9. 政务云迁移服务项目预算制定
  10. 开发者工具 箱 编程工具 dns加速器 LingMax https抓包改包劫持