/执行以下代码,完成练习/
CREATE TABLE Student1(SID varchar(10),Sname nvarchar(10),Sage date,Ssex nvarchar(10)) INSERT INTO Student1 VALUES('01','赵雷','1990-01-01','男'), ('02','钱电','1990-12-21','男'), ('03','孙风','1990-05-20','男'), ('04','李云','1990-08-06','男'), ('05','周梅','1991-12-01','女'), ('06','吴兰','1992-03-01','女'), ('07','郑竹','1989-07-01','女'), ('08','王菊','1990-01-20','女')
CREATE TABLE Course1(CID varchar(10),Cname nvarchar(10),TID varchar(10)) INSERT INTO Course1 VALUES('01','高等数学','02'), ('02','数据库','01'), ('03','C语言','03'), ('04','汉语言','04')
CREATE TABLE Teacher(TID varchar(10),Tname nvarchar(10),TRank nvarchar(10),Hireday date) insert into Teacher values('01','李恬','助教','2018-10-09'), ('02','郭彩霞','副教授','2004-01-29'), ('03','王新华','教授','2002-09-01'), ('04','刘政','讲师','2014-07-29')
CREATE TABLE SC1(SID varchar(10),CID varchar(10),Score decimal(7,1)) INSERT INTO SC1 VALUES('01','01',80), ('01','02',90), ('01','03',99), ('02','01',70), ('02','02',60), ('02','04',80), ('03','01',80), ('03','02',80), ('03','04',80), ('04','01',50), ('04','02',30), ('04','03',20), ('05','01',76), ('05','02',87), ('06','01',31), ('06','03',34), ('07','02',89), ('07','03',98)
--查询男女人数 select count(*) from Student1 group by Ssex
--查询最高成绩
--查询“李”姓学生的基本信息 select*from Student1 where Student1.Sname like'%李%'
--查询每个学生超出他选修课程平均成绩的课程名
--查询每位老师的工作天数
/*用IF...ELSE语句对学生成绩进行查询。 查询学生成绩有没有不及格的(小于60), 有则统计人数, 否则显示'全部及格' */
--在SC1表按学号升序和课程号降序建唯一索引idx_scno
--创建选修了数据库且成绩在80分以上的学生信息视图V_S1(Sno,Sname,Score)
/*声明一个变长字符型变量@name, 用SELECT赋值语句为它赋予从表“Student1”中查询出的编号为'05'的学生姓名, 再用SELECT输出语句输出变量@name的值 */
--创建一个查询某学生学号、姓名、选课成绩信息的存储过程ScoreInfo
--调用“钱电”同学的选课信息
--创建基于表Student1,执行INSERT操作的AFTER触发器。当添加学生信息之后,给出“已成功添加!”的提示。
--创建禁止删除SC1表中成绩不及格的学生记录的触发器
参考GPT和自己的思路:
查询男女人数的SQL语句:
select Ssex, count(*)
from Student1
group by Ssex
查询最高成绩的SQL语句:
select max(Score)
from SC1
查询“李”姓学生的基本信息的SQL语句:
select *
from Student1
where Sname like '%李%'
查询每个学生超出他选修课程平均成绩的课程名的SQL语句:
select Sname, CID, Score - (select avg(Score) from SC1 where SC1.SID = Student1.SID) as diff
from Student1, SC1
where Student1.SID = SC1.SID and Score - (select avg(Score) from SC1 where SC1.SID = Student1.SID) > 0
查询每位老师的工作天数的SQL语句:
select Tname, datediff(day, Hireday, getdate()) as workdays
from Teacher
用IF...ELSE语句对学生成绩进行查询的SQL语句:
if exists (select * from SC1 where Score < 60)
select count(*) as num_of_fail from SC1 where Score < 60
else
print '全部及格'
在SC1表按学号升序和课程号降序建唯一索引idx_scno的SQL语句:
create unique index idx_scno on SC1 (SID asc, CID desc)
创建选修了数据库且成绩在80分以上的学生信息视图V_S1(Sno, Sname, Score)的SQL语句:
create view V_S1 as
select SC1.SID as Sno, Sname, Score
from SC1, Course1, Student1
where SC1.CID = Course1.CID and Course1.Cname = '数据库' and SC1.Score > 80 and SC1.SID = Student1.SID
用DECLARE语句声明一个变长字符型变量@name,用SELECT赋值语句为它赋予从表“Student1”中查询出的编号为'05'的学生姓名,再用SELECT输出语句输出变量@name的值的SQL语句:
declare @name varchar(max)
select @name = Sname from Student1 where SID = '05'
select @name
创建一个查询某学生学号、姓名、选课成绩信息的存储过程ScoreInfo的SQL语句:
create procedure ScoreInfo
@SID varchar(10)
as
select SID, Sname, CID, Score
from Student1, SC1
where Student1.SID = @SID and Student1.SID = SC1.SID
调用“钱电”同学的选课信息的SQL语句:
execute ScoreInfo '02'
创建基于表Student1,执行INSERT操作的AFTER触发器。当添加学生信息之后,给出“已成功添加!”的提示的SQL语句:
create trigger tr_addStudent
on Student1
after insert
as
begin
print '已成功添加!'
end
创建禁止删除SC1表中成绩不及格的学生记录的触发器的SQL语句:
create trigger tr_deleteFailScore
on SC1
for delete
as
if exists (select * from deleted where Score < 60)
begin
rollback
print '不能删除成绩不及格的学生记录!'
end