SQL题:sql语句查询(三)

 
第一题:创建如下三个基本表,表结构如下:
borrower

借书证号  姓名  系名     班级
03001       
李垒     信息系    03-1     
03002              信息      03-1     
03003              计算机    03-2     
03004              计算机    03-3     
......
loans:
借书证号  图书登记号  借书日期
03001        t01           2004     
03001        t02           2004     
03001        t03           2004     
03002        t01           2005     
03002        t02           2005     
03003        t03           2006     
03003        t04           2006     
03004        t05           2007     
.......
BOOKS:
索书号  书名    作者   图书登记号  出版社  价格
TP311.13
 数据结构  李卫    T01     科学    19.00
TP311.13
 数据结构  李卫    T02     科学    19.00
TP.065
  数据结构导论 李卫     T03     北航    16.50
TP.1599
 数据通信   杨志    T04     清华    28.50

(1)
、检索借了 3 本书以下的学生的借书证号,姓名,系名和借书数量。
--- 正解如下 ------------
select *
from borrower B,(select count(*) as 借书数量 , 借书证号 as 借书证号
                    from loans
                    group by 借书证号
                    having count(*)<3) A
where B. 借书证号 = A. 借书证号

(2)
、检索借书和赵垒同学所借书中的任意一本相同的学生的姓名,系名,书名,借书日期。
--- 正解如下 ------------
select 姓名 , 系名 , 图书登记号 , 借书日期
from borrower bb,loans ll
where bb. 借书证号 = ll. 借书证号 and 姓名 <> ' 李垒 '
and 图书登记号 in (select 图书登记号
                    from borrower b,loans l
                    where b. 借书证号 = l. 借书证号 and b. 姓名 = ' 李垒 ' )

(3)
、建立信管系学生借书的视图 SB ,该视图的属性列由借书证号,姓名,班级,图书登记号,书号,出版社和借书日期组成
 
第二题:
现有一个学生选修课程的数据库,其中存放以下三个表:
学生(学号,姓名,性别,年龄,系别)
课程(课程号,课程名,任课教师);
选修(学号,课程号,分数);
请用 SQL 完成以下功能:
1 )、建表,在定义中要求声明:
  A 、每个表的主外码。
  B 、学生的年龄介于 16 30
  C 、学生的姓名和课程名不能为空。
  D 、选课成绩要么为空值,要么取 0 100 的整数。
2 )、插入如下数据:
 学生( 101 ,张三,男, 16 ,数学
        102 ,李四,男, 18 ,计算机
        103 ,王玲,女, 17 ,中文
        105 ,李飞,男, 19 ,计算机
        109 ,赵四,女, 18 ,历史
        110 ,李平,男, 20 ,化学)
课程( 203 ,操作系统,程羽
    279 ,高等数学,王备
    210 ,现代文学,王林
    243 ,有机化学,沈同
    204 ,数据结构,张青 )
选修( 101,203,82
    105,203,59
    102,279,90
    101,279,88
    105,279,82
    110,279,68
    109,210,72
    103,210,90
    110,243,92
    101,204,85
    105,204,91
    102,204,56
101,210,77
101,243,88
3 )、用 SQL 语然完成下列查询:
1
、列出张三同学选修的所有课程的名称和成绩
------ 正解如下 ----------------
select 课程名 , 分数
from 学生 , 选修 , 课程
where 学生 . 学号 = 选修 . 学号 and 选修 . 课程号 = 课程 . 课程号 and 姓名 = ' 张三 '

2
、列出所有课程都及格了的同学的名字
------ 正解如下 ----------------
select t1. 姓名
from 学生 t1,(select 学号
           from 选修
           where 分数 >= 60
           group by 学号
           having count(*)=(select count(*) from (select distinct 课程号 from 课程 ) A)) t2
where t1. 学号 = t2. 学号

3
、列出在选修张青老师所教授课程的学生中,成绩最高的学生姓名和成绩
------ 正解如下 ----------------
select top 1 姓名 , 分数
from 学生 , 选修
where 学生 . 学号 = 选修 . 学号 and 学生 . 学号 in (select 学号 from 课程 , 选修 where 选修 . 课程号 = 课程 . 课程号 and 任课教师 = ' 张青 ' )
order by 分数 desc

4)、删除所有成绩不及格的选课记录
delete from 选修 where 分数 < 60

5 )、将 105 号同学选修 203 号课程的成绩改为该门课程的平均成绩
  
update 选修
set 分数 =( select avg( 分数 ) from 选修 where 课程号 = '203' )
from 选修
where 学号 = '105' and 课程号 = '203'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值