--网上有好多这套题的答案,但是经过我的验证,有很多都是错的,误人子弟
--这是我自己纠正以后的版本 然后呢如果我写的还有不对的欢迎批评指正!
--(1)查询2006年以后(包括2006年)的投稿情况,列出作者名、期刊名、文章名称和投稿日期。
select zzm,qkm,wzmc,tgrq from tgb,qkb,zzb
where tgrq>year(2006)
--(2)查询姓哪个姓的作者最多,列出这个姓氏和姓这个姓氏的作者人数,包含并列的情况。
select top 1 with ties left(zzm,1) xingshi,count(*) num from zzb
WHERE zzh IN (SELECT zzh FROM TGB)
group by left(zzm,1)
order by num desc
--with ties 保留并列第一
SELECT SUBSTRING(zzm,0,2) 姓氏, COUNT(SUBSTRING(zzm,0,2)) 人数
FROM ZZB
WHERE zzh IN (SELECT zzh FROM TGB)
GROUP BY SUBSTRING(zzm,0,2)
ORDER BY 人数 DESC
--(3)查询作者“杨伍华”没有投过稿的核心期刊的名称。
use kcdb
--投稿表里面并不包含所有核心期刊所以下面这个是错的
select distinct qkm from tgb,qkb
where lb='是' and tgb.qkh=qkb.qkh and tgb.qkh not in(
select qkh from tgb
where zzh=(
select zzh from zzb
where zzm='杨伍华'
)
)
--这个是对的 = =
select qkm from qkb
where lb='是' and qkh not in (select qkh from tgb
where zzh=(select zzh from zzb
where zzm='杨伍华'))
--(4)查询“杨伍华”投过稿的期刊的投稿情况,显示期刊号,审稿通过总次数,版面费总金额(说明:只有审稿结果为"通过"时,作者才需向期刊缴纳相应版面费),要求只列出投稿次数超过5次(不包括5次)且版面费总金额大于7000的情况。
select tgb.qkh,sum(case when sgjg='通过' then 1 when sgjg='未通过' then 0 end),sum(case when sgjg='通过' then bmf when sgjg='未通过' then 0 end) money from tgb,qkb
where zzh=(select zzh from zzb
where zzm='杨伍华')
group by tgb.qkh having sum(case when sgjg='通过' then bmf when sgjg='未通过' then 0 end)>7000 and count(*)>5 /*select sum(case when zzh in(select zzh from tgb) then 1 else 0 end) from zzb*/
--(5)查询全体作者(包括还没有投过稿的作者)的人均投稿次数,列出总投稿次数、总人数和人均投稿次数。要求平均投稿次数保存到小数点后2位。
select count(tgb.zzh),count(distinct zzb.zzh),cast(1.0*count(tgb.zzh)/count(distinct zzb.zzh)
as numeric(3,2)) from tgb,zzb where tgb.zzh=zzb.zzh
alter table tgb
--(6)向投稿表中插入一条记录,作者号为“zz01”,期刊号为“qk02”,文章名称为“地铁限界系统的研究”,投稿日期和审稿结果为默认值。
add constraint DF_SGJG default('未通过') for sgjg
insert into tgb(zzh,qkh,wzmc)
values('zz01','qk02','地铁限界系统的研究')
--(7)删除投稿表中2000年以前(包括2000年),期刊名为"哲学研究"中审稿未通过的的投稿记录。
select * from tgb
where qkh=(
select qkh from qkb
where qkm='哲学研究'
)
delete tgb where qkh=(
select qkh from qkb
where qkm='哲学研究'
) and sgjg='通过' and datepart(yyyy,tgrq)<=2007
select * from tgb
where qkh=(
select qkh from qkb
where qkm='哲学研究'
)
--这样就真的删了一条记录
--(8)统计每位作者的投稿情况,列出作者名,投稿通过率(保留到小数点后2位),评价。其中,当投稿通过率高于0.7,评价为“高”;当投稿通过率在0.4到0.7之间,评价为“中”;当投稿通过率低于0.4,评价为“低”。(可分步骤实现)
go
if (OBJECT_ID('tgzs','V') is not null)
drop view tgzs
if(OBJECT_ID('tgtgzs','V') is not null)
drop view tgtgzs
if(object_id('tgtgl','V') is not null)
drop view tgtgl
go
create view tgzs(zzh,tgzsn) as
select zzh,count(zzh) from tgb
group by zzh
go
create view tgtgzs(zzh,tgtgzsn) as
select zzh,count(zzh) from tgb
where sgjg='通过'
group by zzh
go
create view tgtgl(zzh,tgtgln) as
select tgzs.zzh,cast(tgtgzsn*1.0/tgzsn as numeric(3,2)) from tgzs,tgtgzs
where tgzs.zzh=tgtgzs.zzh
go
select zzm 作者名,tgtgln 投稿通过率,(case when tgtgln>0.7 then '优' when tgtgln>=0.4 and tgtgln<=0.7 then '中' when tgtgln<0.4 then '良' end) as 评价 from tgtgl,zzb
where zzb.zzh=tgtgl.zzh
select sgjg from tgb
where zzh=(
select zzh from zzb
where zzm='田令洋'
)--验证一下结果
--(9)查询投了作者‘杨伍华’所投所有期刊的作者名。
use kcdb
select distinct zzm from zzb,tgb tgbx
where zzb.zzh=tgbx.zzh and not exists(
select * from tgb tgby,zzb
where tgby.zzh=zzb.zzh and zzm='杨伍华'
and not exists(
select * from tgb tgbz,zzb
where tgbz.zzh=zzb.zzh and tgbz.zzh=tgbx.zzh and tgbz.qkh=tgby.qkh
)
)
go
select * from tgb
where qkh=(
select qkh from qkb
where qkm='计算机应用研究'
)
go
declare xg scroll cursor for --key
select * from tgb,qkb
where tgb.qkh=qkb.qkh and qkm='计算机应用研究' and sgjg='通过'
open xg
fetch absolute -1 from xg --key
update tgb
set sgjg = '未通过'
where current of xg --key
close xg
deallocate xg
go
select * from tgb
where qkh=(
select qkh from qkb
where qkm='计算机应用研究'
)
go
--三.建立教师表teacher(tid(教师编号), tname(教师姓名),职称(job),salary(工资)),请为teacher表设计一触发器,实现完整性规则“教授的工资不得低于8000元,如果低于8000元,自动改为8000元”,并显示“※※(教师姓名)教师工资改为※※(修改后工资)元”的提示信息。输入若干数据,验证触发器的执行。
create table teacher(
tid char(10) primary key,
tname nchar(10) not null,
job nchar(10),
salary int
)
go
if(OBJECT_ID('tgtc','TR')is not null)--注意参数类型和对象类型
drop trigger tgtc
go
create trigger tgtc on teacher
for update
as
declare @tid nchar(4)
declare @tnm nchar(10)
declare @gz int
if update(salary)
select @tid=tid,@tnm=tname,@gz=salary from inserted
if(@gz<8000)
begin
set @gz=8000
update teacher
set salary = 8000
where teacher.tid=@tid
end
print @tnm+'教师工资改为'
print @gz go
insert into teacher
values(002,'黄俊','教授',8500)
update teacher
set salary=6000
where tid=002
--ctrl+k+c 注释快捷键
-- 四.在数据库中建立如下三张表:
--借书表:lend(学号,索书号,借书日期,应还日期,是否续借)
--欠款表:student(学号,日期,欠款金额)
--还书表:return(学号,索书号,还书日期)
--并输入若干数据。
--请设计一个存储过程实现还书操作,要求还书时删除lend表内的借阅记录,并向还书表中插入一条还书记录,注意还书日期为当前日期,并且根据应还日期和当前日期来判断该书是否超期,如果超期按照超期的天数计算出罚款金额(每天每本书罚款0.1元),并将罚款信息插入到student表中。
create table lend(
学号 char(10) primary key,
索书号 char(20),
借书日期 datetime,
还书日期 datetime,
是否续借 char(4)
)
create table student(
学号 char(10) primary key,
欠款金额 float,
日期 datetime
)
create table rreturn(
学号 char(10) primary key,
索书号 char(20),
还书日期 datetime
)
go
insert into lend values(100,234,'2014-08-09',null,null) --日期是有引号的
insert into lend values(040,334,'2014-09-06','2014-10-8',null)
--select * from lend where 学号=032
go
if (object_id('pro_1', 'P') is not null)
drop proc pro_1
go
select * from lend
select *from rreturn
select * from student
go
create proc pro_1 (@sno char(10),@lendno char(20),@returntime datetime)
as
insert into rreturn values(@sno,@lendno,@returntime)
declare @hsrq datetime select @hsrq=还书日期 from lend where 学号=@sno and 索书号=@lendno
delete lend where 学号=@sno and 索书号=@lendno
declare @yqts float set @yqts=0.0 --变量初始化
declare @temp datetime set @temp=@hsrq --变量初始化
while(@temp<@returntime)
begin
set @temp=dateadd(dd,1,@temp)
print @temp
set @yqts=@yqts+0.1
end
--set @yqts=cast((datepart(dd,@returntime)-datepart(dd,@hsrq)+(datepart(yyyy,@returntime)-datepart(yyyy,@hsrq))*365+(datepart(mm,@returntime)-datepart(mm,@hsrq))*30)
--*0.1 as numeric(10,2))
insert into student values(@sno,@yqts,@returntime)
go
exec pro_1 40,334,'2015-11-20'
select * from lend
select *from rreturn
select * from student

sql经典习题及其答案(纠正错误版)的更多相关文章

  1. 最强最全面的大数据SQL经典面试题(由31位大佬共同协作完成)

    本套SQL题的答案是由许多小伙伴共同贡献的,1+1的力量是远远大于2的,有不少题目都采用了非常巧妙的解法,也有不少题目有多种解法.本套大数据SQL题不仅题目丰富多样,答案更是精彩绝伦! 注:以下参考答 ...

  2. sql语句练习50题(Mysql版-详加注释)

    表名和字段 1.学生表       Student(s_id,s_name,s_birth,s_sex) --学生编号,学生姓名, 出生年月,学生性别 2.课程表       Course(c_id, ...

  3. web实验指导书和课后习题参考答案

    实验指导书 :http://course.baidu.com/view/daf55bd026fff705cc170add.html 课后习题参考答案:http://wenku.baidu.com/li ...

  4. Sql Server专题:SQL 经典实例

    SQL 经典实例 1.实例表: Student(S#,Sname,Sage,Ssex) 学生表 S#:学号:Sname:学生姓名:Sage:学生年龄:Ssex:学生性别 Course(C#,Cname ...

  5. MySQL基本语句与经典习题

    [SQL语句大全] 本文用到的数据(5张表): customers: orders: orderitems: Products:  Vendors: 一.检索数据-select语句select pro ...

  6. Python编程快速上手-让繁琐工作自动化-第二章习题及其答案

    Python编程快速上手-让繁琐工作自动化-第二章习题及其答案 1.布尔数据类型的两个值是什么?如何拼写? 答:True和False,使用大写的T和大写的F,其他字母是小写. 2.3个布尔操作符是什么 ...

  7. SQL经典实例笔记

    目录 前言 第一章:检索记录 在Where字句中使用别名 前言 本文是根据我阅读的书籍SQL经典实例而写的笔记,只记载我觉得有价值的内容 第一章:检索记录 在Where字句中使用别名 --错误实例 s ...

  8. sql注入知识点整理(基础版)

    sql注入知识点整理(基础版) 基本步骤 判断是否报错 判断闭合符号 判断注入类型 构建payload 手工注入或者编写脚本 基本注入类型 报错型注入 floor公式(结果多出一个1):and (se ...

  9. 《python编程:从入门到实践》课后习题及答案

    转载: <Python编程:从入门到实践>课后习题及答案-码农之家 (xz577.com) <Python编程:从入门到实践>课后习题及答案 - 信德维拉 - 博客园 (cnb ...

随机推荐

  1. java源代码分析----jvm.dll装载过程

    简述众所周知java.exe是java class文件的执行程序,但实际上java.exe程序只是一个执行的外壳,它会装载jvm.dll(windows下,以下皆以windows平台为例,linux下 ...

  2. ajax原理,验证码生成原理

    什么是ajax AJAX:”Asynchronous JavaScript and XML” 中文意思:异步JavaScript和XML 指一种创建交互式网页应用的网页开发技术.   不是指一种单一的 ...

  3. VIM、GVIM在WINDOWS下中文乱码的终极解决方案

    文章转自:http://www.liuhuadong.com/archives/68 vim.gvim在windows下中文乱码的终极解决方案在windows下vim的中文字体显示并不好,所以我们需要 ...

  4. ssi技术初探

    http://blog.sina.com.cn/s/blog_765941620100wiir.html

  5. StreamReader和StreamWrite和FileStream区别和用法

    一.<1>StreamReader类共有10个构造函数 StreamReader (Stream)    //  为指定的流初始化 StreamReader 类的新实例. FileStre ...

  6. 我所理解cocos2d-x 3.6 lua --使用Cocos Studio

    Cocos是触控科技推出的游戏开发一站式解决方案,包含了从新建立项.游戏制作.到打包上线的全套流程. 开发者可以通过cocos快速生成代码.编辑资源和动画,最终输出适合于多个平台的游戏产品. Coco ...

  7. 腾讯即时聊天sdk

    一. 初始化 腾讯即时通讯sdk 1. 程序日志注册 2. 连接通知回调  专门的类管理 3. 信息通知回调 专门的类 4. 初始化sdk 5. 注册推送 分ios8/ios以前 注册推送成功回调 发 ...

  8. [BZOJ2423][HAOI2010]最长公共子序列

    [BZOJ2423][HAOI2010]最长公共子序列 试题描述 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X=“x ...

  9. sql注入学习小结

    /* 转载请注明出处,By:珍惜少年时 小知识,只是放在博客吃饭时无聊看看,大牛勿喷. */ 珍惜少年时博客,专注网络安全 web渗透测试 00x1爆所有库: mysql> select sch ...

  10. CVPR2015文章下载

    http://www.cv-foundation.org/openaccess/content_cvpr_2015/html/Liu_Real-Time_Part-Based_Visual_2015_ ...