IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 数据库上机实验三(游标) -> 正文阅读

[大数据]数据库上机实验三(游标)

关于数据库实验一、二和数据库的创建请参考此处
什么叫游标?游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字,用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。
游标可以类比于C语言文件中的指针,可以根据需要使得选择对应的行。
游标的生命周期包含有五个阶段:声明游标、打开游标、读取游标数据、关闭游标、释放游标。
这些都是固定的格式,对于游标使用还算是比较常规的。
声明游标:

declare st_cursor cursor 
for select colum from table where ...

打开游标:

open st_cursor

读取游标

fetch next from into @你的变量

关闭游标

close st_cursor

释放游标

deallocate st_cursor

本次实验内容是实验三+《数据库原理及应用》书P199 第12-14习

1.对各出版社的图书比例情况进行分析,即图书比例高于50%为“很高”,图书 比例高于30%为“较高”,图书比例高于10%为“一般”,并按图书比例递增排列

-- Test3-1
use Library2128
select
	出版社,cast(cast(cast(count(出版社) as decimal(4,1))/cast((select count(*)
from
	book2128) as decimal(4,1))*100 as decimal(4,1)) as varchar(5)) +'%'  百分比,
case
	when cast(count(出版社)as decimal(4,1)) /cast((select count(*)from book2128) as 	decimal(4,1))>0.5 then '很高'
	when cast(count(出版社)as decimal(4,1)) /cast((select count(*)from book2128) as 	decimal(4,1))>0.3 then '较高'
	when cast(count(出版社)as decimal(4,1)) /cast((select count(*)from book2128) as 	decimal(4,1))>0.1 then '一般'
	when cast(count(出版社)as decimal(4,1)) /cast((select count(*)from book2128) as 	decimal(4,1))<0.1 then '较低'
end 比例
from book2128
group by 出版社
order by cast(count(出版社) as decimal(4,1))/cast((select count(*)from book2128) as 	decimal(4,1))

2.对各系学生的借书比例情况进行分析,即图书比例高于50%的为“很高”,图 书比例高于30%的为“较高”,图书比例高于10%的为“一般”,并按借书比例递减 排序

-- Test3-2
select
	出版社,cast(cast(cast(count(出版社) as decimal(4,1))/cast((select count(*)
from
	book2128) as decimal(4,1))*100 as decimal(4,1)) as varchar(5)) +'%'  百分比,
case
	when cast(count(出版社)as decimal(4,1)) /cast((select count(*)from book2128) as 	decimal(4,1))>0.5 then '很高'
	when cast(count(出版社)as decimal(4,1)) /cast((select count(*)from book2128) as 	decimal(4,1))>0.3 then '较高'
	when cast(count(出版社)as decimal(4,1)) /cast((select count(*)from book2128) as 	decimal(4,1))>0.1 then '一般'
	when cast(count(出版社)as decimal(4,1)) /cast((select count(*)from book2128) as 	decimal(4,1))<0.1 then '较低'
end 比例
from book2128
group by 出版社
order by cast(count(出版社) as decimal(4,1))/cast((select count(*)from book2128) as 	decimal(4,1))
desc

3.采用游标方式对图书价格进行评价

-- Test3-3
declare @bno char(20),@percent char(20),@price int
declare st_cursor cursor
	for select distinct book2128.图书名,book2128.定价
	from book2128
print 'BOOK                      Evaluate'
print '---------------------------------'
open st_cursor
fetch next from st_cursor into @bno,@price
while @@FETCH_STATUS=0
begin
	set @percent= case
	when @price > 50 then 'A'
	when @price > 30 then 'B'
	when @price > 20 then 'C'
	when @price > 10 then 'D'
	else 'E'
	end
print @bno+'  '+@percent
fetch next from st_cursor into @bno,@price
end
close st_cursor
deallocate st_cursor
go

4.采用游标方式统计出每个出版社图书的借出率

-- Test3-4
declare @pub char(20),@percent decimal(4,1)
declare st_cursor cursor
	for select distinct t1.出版社,cast(借阅数*总数 as decimal(4,1)) 借出率
	from
	(
		select count(*) 总数,bk.出版社
		from book2128 bk
		group by bk.出版社
	) t1,
	(
		select bk.出版社,count(bor.图书编号) 借阅数
		from
			borrow2128 bor,book2128 bk
		where bor.图书编号=bk.图书编号
		group by bk.出版社
	) t2
	where t1.出版社=t2.出版社
open st_cursor
fetch next from st_cursor into @pub,@percent
print '出版社                   借出率'
print '----------------------------'
while @@FETCH_STATUS=0
begin
	print @pub+'    '+(CAST(@percent As char(5)))+'%'
	fetch next from st_cursor into @pub,@percent
end
close st_cursor
deallocate st_cursor
go

5.编写一个程序,采用游标方式输出所有课程的平均分

-- P199-12
set nocount  on
declare  @sclass nvarchar(10),@savg float
declare st_cursor cursor
    for select c.课程名,avg(s.分数)
         from course2128 c,score2128 s
         where c.课程号=s.课程号
         group by (c.课程名)
open st_cursor
fetch  next from st_cursor  into @sclass,@savg
print 'class       Avg'
print '-------------'
while @@fetch_status=0
begin
    print  cast(@sclass as nvarchar(8))+'  '+
           cast(@savg as nvarchar(10))
    fetch next  from st_cursor into @sclass,@savg
end
close st_cursor
deallocate  st_cursor
go

6.编写一个程序,采用游标方式输出所有学号、课程号和成绩等级

-- P199-13
declare @fs int,@dj nvarchar(2),@sno int,@cno nvarchar(10)
declare st_cursor cursor
    for select 学号,课程号,分数
        from score2128
        where 分数 is not null
open st_cursor
fetch next from st_cursor into @sno,@cno,@fs
print 'NUM     CLASS     SCORE'
print '-----------------------'
while @@fetch_status=0
begin
    set @dj=case
        when @fs>=90 then 'A'
		when @fs>=80 then 'B'
		when @fs>=70 then 'C'
		when @fs>=60 then 'D'
		else 'E'
end
print cast(@sno as char(8))+' '+@cno+'    '+@dj
	fetch next from st_cursor into @sno,@cno,@fs
end
close st_cursor
deallocate st_cursor
go

7.编写一个程序,采用游标方式输出各班级各课程的平均分

--P199 -14
declare @sclass char(10),@savg float
declare st_cursor cursor
	for select st.班号,avg(sc.分数)
		from student2128 st,score2128 sc
		where st.学号=sc.学号
		group by st.班号
open st_cursor
fetch next from  st_cursor into @sclass,@savg
print 'Class      Score'
print '-----------------'
while @@fetch_status=0
begin
	print @sclass+cast(@savg as char(10))
	fetch next from st_cursor into @sclass,@savg
end
close st_cursor
deallocate st_cursor
go
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:32:03  更:2022-03-30 18:33:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:27:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码