SQL练习题(二)

2014-11-24 13:26:36 · 作者: · 浏览: 1
p (10) 学号,姓名,成绩 from cj join xs on cj.学号 = xs.学号 order by 成绩 desc

2、 计算男女生人数。

use cjgl

go

select count(*) ,sex as 人数 from student group by sex

3、 统计每个人的平均成绩在85分以上同学的平均成绩。

select 学号,AVG(grade)as 平均成绩 from cj group by 学号 having AVG(grade)>85

4、 查询未选修”JAVA”课程的学生的基本情况。

use ks

select * from xs where exists (select * from cj where cj.学号 = 学生.学号 and 课程号 in (select 课程号 from 课程 where 课程名 !='java'))

select * from xs where 学号 not in (select 学号 from cj where 课程号 in (select 课程号 from kc where 课程名='JAVA'))

5、 查询全部学生的学号,姓名,课程号,课程名,成绩。

select xs.学号,studentname ,kc.courseID, kc.coursename,grade from xs join cj

on xs. 学号=cj. 学号join kc on kc . 课程号=cj. 课程号

三、程序设计题目(每题10分,共10分。)

1.

数据库JXGL中的teachers中创建一个触发器,如果添加的教师的工资小于1000,则拒绝插入该记录。(假设每次只插入一条记录即可)(所用到的表结构如下:teachers(tno,tname,dept,pay)其中TNO代表教师编号,TNAME代表教师姓名,DEPT代表教师系别,PAY代表教师的工资)

use jxgl

go

create trigger tri_insert

on teachers

after insert

as

declare @pay tinyint

select @pay=pay from inserted

if @pay<1000

begin

print '工资太低'

rollback transaction

end

2. 设已经存在如下数据库CJGL,表结构与二(三)题目相同,编写代码创建触发器Tg,当向CJ表插入一条记录时,检查该记录的学号在XS表中是否存在,检查课程号在KC表中是否存在,若有一项为否,则不允许插入。

use cjgl

go

Create trigger trig_appeA

On cj

after insert

as

if exists( select * from inserted a where a.学号 not in(select b.学号 from xs b) or

a.课程号 not in(select c.课程号 from kc c))

begin

  use cjgl go create trigger trig_appeA on cj after insert as declare @stuID char(8) declare @courseID char(6) select @stuID=学号,@courseID=课程号 from inserted if @stuID<>any(select 学号 from xs) or @courseID<>any(select 课程号 from kc) begin print'学生或课程不存在,不允许插入!' rollback transaction end