数据库实验—存储过程

news2024/9/21 2:43:52

在这里插入图片描述


  • 创建下列存储过程:
    查询某位学生指定课程的成绩和学分(修正:若该学生的课程成绩小于60分,则学分要显示为0分)
    提示:使用CASE…WHEN
    例如:分别查询’张建国’和’李平方’选修的’数据库系统原理’课程的成绩和学分

    • is_credit是重命名的,可以随便取(符合语法即可)。
    • 你也可以不重命名,直接裸用case when then语句
    create procedure Stu_Proc_SelRepinfo
    @name nvarchar(4),@cname nvarchar(20)
    as
    select R.Grade, 
    is_credit=(case when R.Grade < 60 or R.Grade is null then 0 else C.Ccredit end)
    from Students S inner join Reports R 
    on S.Sno = R.Sno
    inner join Courses C 
    on R.Cno = C.Cno
    where S.Sname = @name and C.Cname = @cname
    
    • 执行下面的语句
    exec Stu_Proc_SelRepInfo '张建国','数据库系统原理'
    exec Stu_Proc_SelRepInfo '李平方','数据库系统原理'
    
  • 创建下列存储过程:
    利用学生学号查询该名学生各学期的选修课程情况,要求显示学生的学号,姓名,选修的学年,学期,选修的课程号,课程名及其成绩,显示结果按学年和学期升序排列。
    例如:查询学号为‘2016115101’的选课情况

    create procedure Stu_Proc_SelSno
    @sno varchar(20)
    as
    select S.Sno, S.Sname,R.Racademicyear, R.Rterm, C.Cno,C.Cname,R.Grade 
    from Students S,Courses C,Reports R 
    where S.Sno = R.Sno and R.Cno = C.Cno and S.Sno = @sno 
    order by R.Racademicyear,R.Rterm 
    
    • 执行下面的语句
    exec Stu_Proc_SelSno '2016115101'
    
  • 创建下列存储过程:
    统计指定入学年级指定学院名中,各省的生源人数,要求显示入学年级,学院名,生源地(只显示省份)及生源人数。(提示:LEFT函数)
    例如:查询2016级计算机与信息工程学院的生源情况

    create procedure Stu_Proc_SelGraDname
    @year int, @dname varchar(20)
    as
    select left(S.Sno,4), D.Dname,left(S.Snative,2), count(S.Sno)
    from Students S, Department D
    where S.Dno = D.Dno and D.Dname = @dname 
    and convert(int,left(S.Sno,4)) = @year
    group by left(S.Snative,2),left(S.Sno,4), D.Dname
    
    • 执行下面的验证语句
    exec Stu_Proc_SelGraDname 2016,'计算机与信息工程学院'
    
  • 创建下列存储过程:
    利用学生学号查询该名学生在指定学年,指定学期所获得的学分数以及还未获得的学分数,若该门课程尚无成绩或成绩小于60分,则为尚未获得的学分,结果以变量形式输出(OUTPUT)。(提示:ISNULL函数)
    例如:分别查询学号为2014112103和2014112104的学生2014年第一学期的学分情况

    create procedure Stu_Proc_SelCredit
    @sno varchar(20),@year int,@term int,
    @GetCredits int output, @NotGetCredits int output
    as
    select @GetCredits=sum(C.Ccredit)
    from Reports R,Courses C
    where R.Cno = C.Cno and R.Sno = @sno 
    and R.Racademicyear = @year and R.Rterm = @term
    and R.Grade > 60 and R.Grade is not null
    
    select @NotGetCredits=sum(C.Ccredit)
    from Reports R,Courses C
    where R.Cno = C.Cno and R.Sno = @sno
    and R.Racademicyear = @year and R.Rterm = @term
    and (R.Grade is null or R.Grade < 60)
    
    
    • 执行下面的验证语句
      • 解释:isnull是内置函数,isnull(表达式,表达式null时候返回的值),如果表达式不为null就返回表达式的值否则就返回第二个参数
    下面的代码块都要全选中然后执行
    
    declare @GetCredits int -- 声明
    declare @NotGetCredits int -- 声明
    exec Stu_Proc_SelCredit '2014112103',2014,1,
    @GetCredits output,@NotGetCredits output
    ----上面代表将结果输出到两个声明的变量中--
    --------下面就是用select将其输出--------因为select可以使用重命名列名=值来输出
    select 学号='2014112103', 已获学分=isnull(@GetCredits,0),
    未获学分=isnull(@NotGetCredits,0)
    
    下面的代码块都要全选中然后执行
    
    declare @GetCredits int
    declare @NotGetCredits int
    exec Stu_Proc_SelCredit '2014112104',2014,1,
    @GetCredits output,@NotGetCredits output
    select 学号='2014112104', 已获学分=isnull(@GetCredits,0),
    未获学分=isnull(@NotGetCredits,0)
    
  • 创建下列存储过程:
    统计指定班级指定课程的考试情况,要求显示出不同分值段(10分为一个分值段)的学生人数,
    如(100 ~ 90,2人;89 ~ 80,7人;…)
    提示:CASE (WHEN… THEN)
    例如:查询20152101班计算机科学概论的考试情况

    create proc Stu_Proc_SelGrade
    @sclass varchar(20), @cname varchar(20)
    as
    select RG.Level_Grade '等级',count(RG.Level_Grade) '人数'
    from
    (select Level_Grade=(case when R.Grade > 90 then 'A' 
     when R.Grade between 80 and 90 then 'B'
     when R.Grade between 70 and 80 then 'C'
     when R.Grade between 60 and 70 then 'D'
     when R.Grade < 60 then 'E' else '未考'end)
    from Reports R, Courses C, Students S
    where R.Cno = C.Cno and S.Sno = R.Sno and S.Sclass = @sclass
    and C.Cname = @cname
    group by (case when R.Grade > 90 then 'A' 
     when R.Grade between 80 and 90 then 'B'
     when R.Grade between 70 and 80 then 'C'
     when R.Grade between 60 and 70 then 'D'
     when R.Grade < 60 then 'E' else '未考'end)
    ) as RG 
    group by RG.Level_Grade 
    
    • 执行下面的验证语句
    exec Stu_Proc_SelGrade '20152101','计算机科学概论'
    
  • 创建下列存储过程:
    统计各学院中指定职称的教师人数,默认给出“讲师”的人数
    例如:统计“讲师”、“教授”的人数
    将存储过程的执行结果截图,图中需标记学号最后两位

    create proc Tea_Proc_SelTeaNum
    @Tprof_Num int output, @Tprof varchar(20) = '讲师'
    as
    select T.Dno,T.Tprof,count(T.Tno)
    from Teachers T
    where T.Tprof = @Tprof
    group by T.Dno, T.Tprof
    
    • 执行下面的验证语句
    -- 默认查询每个学院讲师的人数
    declare @Tnum int
    exec Tea_Proc_SelTeaNum @Tnum output
    if @Tnum IS NULL
        print 0
    else
        print @Tnum
    
    -- 查询每个学院教授的人数
    declare @Tnum int
    exec Tea_Proc_SelTeaNum @Tnum output, '教授'
    if @Tnum IS NULL
        print 0
    else
        print @Tnum
    
  • 创建下列存储过程:
    统计指定教师指定学年的教学工作量(教学工作量=所有教授的课程学时数的总和),教学工作量要求作为输出参数。
    例如:查询教师刘伟2015学年的教学工作量

    create proc Tea_Proc_SelWork
    @tname varchar(20),@year int, @hours int output
    as
    select sum(C.Chours)
    from Tutors Tu, Courses C,Teachers T
    where Tu.Tno = T.Tno and T.Tname = @tname and C.Cno = Tu.Cno
    and Tu.Tacademicyear = @year
    
    • 执行下面的验证语句
    declare @hours int
    exec Tea_Proc_SelWork '刘伟',2015,@hours output
    select @hours '工作量'
    
  • 创建下列存储过程:
    统计指定教师每月需要缴纳的税金是多少,如果是中级以下职称(含中级),则税金=(工资+岗位津贴-1500)*5%;如果是副高级职称,则税金=(工资+岗位津贴-2000)*5%;如果是正高级职称,则税金=(工资+岗位津贴-2500)*5%
    提示:IF… ELSE…
    例如:查询王平、李力的税金情况

    	create proc Tea_Proc_SelTax
    	@tname varchar(20),@tax decimal(10,2) output
    	as
    	declare @tmp int
    	declare @prof varchar(20)
    	select @prof=T.Tprof
    	from Teachers T
    	where T.Tname = @tname
    	if(@prof='教授')
    	set @tmp=2500
    	else
    	if(@prof='副教授')
    	set @tmp=2000
    	else
    	set @tmp=1500
    	select @tax=(Tsal+Tcomm-@tmp)*0.05
    	from Teachers
    	where Tname=@tname
    
    • 执行下面的验证语句
    declare @tax decimal(10,2)
    exec Tea_Proc_SelTax '王平', @tax output
    print @tax
    exec Tea_Proc_SelTax '李力', @tax output
    print @tax
    
  • 创建下列存储过程(选课情况综合查询):
    可分别按:学号,学生姓名,课程编号,课程名称,班级编号,等查询学生的选课情况,查询结果显示(班级编号,学号,学生姓名,课程编号,课程名称,选修学年,选修学期,成绩)
    提示:需要两个输入参数,一个参数用来指定查询的类别,另一个参数用来指定查询的具体信息,存储过程中需要根据查询类别不同,分别写出对应的查询语句

    create proc Rep_Proc_SelRep
    @type varchar(20),@infor varchar(20)
    as
    if (@type='学号')
    begin
    select S.Sclass,S.Sname,C.Cno,C.Cname,R.Racademicyear,R.Rterm,R.Grade
    from Students S,Courses C,Reports R
    where S.Sno = @infor and S.Sno = R.Sno 
    and C.Cno = R.Cno
    return
    end
    if (@type='学生姓名')
    begin
    select S.Sclass,S.Sname,C.Cno,C.Cname,R.Racademicyear,R.Rterm,R.Grade
    from Students S,Courses C,Reports R
    where S.Sname = @infor and S.Sno = R.Sno 
    and C.Cno = R.Cno
    return
    end
    if (@type='课程编号')
    begin
    select S.Sclass,S.Sname,C.Cno,C.Cname,R.Racademicyear,R.Rterm,R.Grade
    from Students S,Courses C,Reports R
    where R.Cno = @infor and S.Sno = R.Sno 
    and C.Cno = R.Cno
    return
    end
    if (@type='课程名称')
    begin
    select S.Sclass,S.Sname,C.Cno,C.Cname,R.Racademicyear,R.Rterm,R.Grade
    from Students S,Courses C,Reports R
    where C.Cname = @infor and S.Sno = R.Sno 
    and C.Cno = R.Cno
    return
    end
    if (@type='班级编号')
    begin
    select S.Sclass,S.Sname,C.Cno,C.Cname,R.Racademicyear,R.Rterm,R.Grade
    from Students S,Courses C,Reports R
    where S.Sclass = @infor and S.Sno = R.Sno 
    and C.Cno = R.Cno
    return
    end
    if (@type='学号')
    begin
    return
    end
    if (@type='学年')
    begin
    select S.Sclass,S.Sname,C.Cno,C.Cname,R.Racademicyear,R.Rterm,R.Grade
    from Students S,Courses C,Reports R
    where R.Racademicyear = convert(int,@infor) and S.Sno = R.Sno 
    and C.Cno = R.Cno
    return
    end
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/698101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python退出venv指南:安全退出虚拟环境

Python退出venv指南&#xff1a;安全退出虚拟环境 作为一名有10年Python编程经验的工程师&#xff0c;我很清楚地明白通过venv管理Python虚拟环境的好处。虚拟环境为每个项目提供了一个独立的Python运行时环境&#xff0c;这可以避免项目之间的依赖冲突&#xff0c;并且可以轻…

canvas图形等距、间距测量

首先定义画线&#xff08;实线、虚线&#xff09;、画面&#xff08;矩形块&#xff09;、值&#xff08;距离&#xff09;等渲染数据结构&#xff08;渲染数据只提供坐标信息和一些基本样式属性&#xff0c;不需要依赖渲染是dom&#xff0c;还是canvas或webgl&#xff09;侦测…

C语言:调整数组使奇数全部都位于偶数前面

题目&#xff1a; 输入一个整数数组&#xff0c;实现一个函数&#xff0c; 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分&#xff0c; 所有偶数位于数组的后半部分。 &#xff08;奇数在数组前面&#xff0c;偶数在数组后面&#xff09; 思路&#xff1a;…

【shell】expect命令详解:用expect实现自动化交互式操作

文章目录 一. 运用场景二. 语法说明三. 例子1. scp文件传输自动化2. ssh远程登录3. 切到root用户4. 创建ssh key5. ssh到一个节点创建用户 一. 运用场景 expect主要应用于自动化交互式操作的场景&#xff0c;借助Expect处理交互的命令&#xff0c;可以将交互过程如&#xff1a…

FPGA的软核、硬核、固核

“核” 现在的FPGA设计&#xff0c;规模巨大而且功能复杂&#xff0c;因此设计的每一个部分都从头开始是不切实际的。一种解决的办法是&#xff1a;对于较为通用的部分可以重用现有的功能模块&#xff0c;而把主要的时间和资源用在设计中的那些全新的、独特的部分。这就像是你在…

Golang:cannot find main module; see ‘go help modules‘解决

出现这个的原因就是之前在Golang语言介绍、环境搭建以及编译工具&#xff08; CDN 加速代理&#xff09;https://mp.csdn.net/mp_blog/creation/editor/131431492 这个部分配置CDN加速代理的时候&#xff0c;开启了GO111MODULEon后&#xff1b; go会忽略GOPATH和vendor文件夹&…

问题杂谈(三十五)Linux中文乱码问题

前言&#xff1a; 如下&#xff0c;系统的中文描述是乱码 步骤&#xff1a; 输入locale&#xff0c;如有zh cn 表示已经安装了中文语言 如果没有&#xff0c;通过yum groupinstall chinese-support下载 临时更换语言&#xff1a;输入LANG"en_US.UTF-8"系统设置&a…

【python docker error】最近出现docker拉取python官方镜像出现运行程序容器无法跑起来的现象

最近出现docker拉取python官方镜像出现运行程序容器无法跑起来的现象 官方在最近也就是2023年6月初将docker的python镜像由debian的buster版本切换到bookworm版本&#xff0c;导致一众的用户发现使用官方python的基础镜像的容器启动报错&#xff0c;我也是受害者之一。解决办法…

机器视觉初步10:目标跟踪

目标跟踪是计算机视觉中的一个重要领域&#xff0c;主要目的是在视频序列中跟踪一个或多个目标对象。常见的目标跟踪方法分为三类&#xff1a;非机器学习方法、机器学习方法和深度学习方法1。 文章目录 1.非机器学习方法a) 光流法&#xff08;Optical Flow&#xff09;b) Haar…

【瑞萨RA_FSP】RTC——实时时钟

文章目录 一、RTC简介1. RTC 特性 二、RTC的结构框图1. RTC引脚2. 时钟分频3. 日历计数器/二进制计数器4. 闹钟功能 三、实验&#xff1a;用RTC提供日历时间1. 硬件设计2. 文件结构3. FSP配置4. 宏定义5. 初始化RTC6. RTC中断回调函数7. hal_entry函数 一、RTC简介 RA6M5 的RT…

虚幻引擎(UE5)-大世界分区WorldPartition教程(一)

文章目录 WC与WP的区别一、如何开启WP1.默认创建WP2.手动创建WP3.转换创建WP 二、设置World Partition参数三、启动流送总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 WC与WP的区别 WorldCompostion&#xff08;WC&#xff09; 是UE4中制作大世界…

【java实战】emoj表情导致mySQL存储错误,完美解决

MySQL表的编码格式为utf-8,现在表内数据量巨大&#xff0c;已不能新建表更改表的编码格式。 采用手动编码将有问题的数据转化为utf8进行存储 工具类 import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; import java.util…

大数据Doris(五十):Export导出原理

文章目录 Export导出原理 一、原理 二、查询计划拆分 三、查询计划执行 Export导出原理 Doris Export、Select Into Outfile、MySQL dump三种方式数据导出。用户可以根据自己的需求导出数据。此外数据还可以以文件形式通过Borker备份到远端存储系统中&#xff0c;之后可以…

Gitlab升级报错一:rails_migration[gitlab-rails] (gitlab::database_migrations line 51)

Gitlab-ce从V14.0.12升级到V14.3.6或V14.10.5时报错&#xff1a;如下图&#xff1a; 解决办法&#xff1a; 先停掉gitlab: gitlab-ctl stop 单独启动数据库&#xff0c;如果不单独启动数据库&#xff0c;就会报以上错误 sudo gitlab-ctl start postgresql 解决办法&#x…

哈工大计算机网络课程网络层协议详解之:互联网控制报文协议(ICMP)

哈工大计算机网络课程网络层协议详解之&#xff1a;互联网控制报文协议&#xff08;ICMP&#xff09; 在互联网中&#xff0c;IP数据报的传输很容易出现差错&#xff0c;当出现差错时&#xff0c;最简单的处理办法就是对该IP数据报进行丢弃。但是&#xff0c;并不是直接丢弃就…

android 如何分析应用的内存(九)——libc回调

android 如何分析应用的内存&#xff08;九&#xff09; 接上文&#xff0c;在前面文章中&#xff0c;介绍了bionic库提供的各种功能&#xff0c;其中包括&#xff1a; 自定义的mallocmalloc hookmalloc debug 接下来&#xff0c;介绍的是bionic库提供的libc回调功能&#x…

【Java】Java核心 77:Dom4j 解析 XML综合案例

文章目录 1、需求2、案例效果3、案例分析4、自定义JDBC框架-代码实现4.1、Configuration4.2、注解4.3、映射类&#xff1a;Mapper4.4、SqlSession类 5、自定义JDBC框架的使用5.1、数据表5.2、创建实体类5.3、UserMapper接口5.4、配置文件&#xff1a;config.xml5.5、测试类5.5、…

当金融风控遇上人工智能,众安金融的实时特征平台实践

导读&#xff1a;随着企业数字化转型升级&#xff0c;线上业务呈现多场景、多渠道、多元化的特征。数据要素价值的挖掘可谓分秒必争&#xff0c;业务也对数据的时效性和灵活性提出了更高的要求。在庞大分散、高并发的数据来源背景下&#xff0c;数据的实时处理能力成为企业提升…

vCenter崩了之后重新搭建处理办法

一、需要重新搭的情况下&#xff0c;vCenter虚拟机是无法使用分布式端口组的&#xff0c;而此时所有的物理网卡都在分布式交换机上&#xff0c;这样vCenter虚拟机的网络是无法访问的&#xff0c;所以需要先找到需要一台esxi。 二、此时可以看到两个分布式交换机 正常情况下分布…

高性能商品秒杀抢购系统

完整资料进入【数字空间】查看——baidu搜索"writebug" Goirisrabbbitmqmysql构建高性能商品秒杀抢购系统 一、项目介绍 1. 课程目标 应用GoWeb快速构建秒杀系统全流程应用开发及架构化设计思维梳理逐级优化&#xff0c;轻松应对“秒杀”及类似高并发场景 2. 知…