救我 考试我不会啊

/执行以下代码,完成练习/

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和自己的思路:

  1. 查询男女人数的SQL语句:

    select Ssex, count(*)
    from Student1
    group by Ssex
    
  2. 查询最高成绩的SQL语句:

    select max(Score)
    from SC1
    
  3. 查询“李”姓学生的基本信息的SQL语句:

    select *
    from Student1
    where Sname like '%李%'
    
  4. 查询每个学生超出他选修课程平均成绩的课程名的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
    
  5. 查询每位老师的工作天数的SQL语句:

    select Tname, datediff(day, Hireday, getdate()) as workdays
    from Teacher
    
  6. 用IF...ELSE语句对学生成绩进行查询的SQL语句:

    if exists (select * from SC1 where Score < 60)
     select count(*) as num_of_fail from SC1 where Score < 60
    else
     print '全部及格'
    
  7. 在SC1表按学号升序和课程号降序建唯一索引idx_scno的SQL语句:

    create unique index idx_scno on SC1 (SID asc, CID desc)
    
  8. 创建选修了数据库且成绩在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
    
  9. 用DECLARE语句声明一个变长字符型变量@name,用SELECT赋值语句为它赋予从表“Student1”中查询出的编号为'05'的学生姓名,再用SELECT输出语句输出变量@name的值的SQL语句:

    declare @name varchar(max)
    select @name = Sname from Student1 where SID = '05'
    select @name
    
  10. 创建一个查询某学生学号、姓名、选课成绩信息的存储过程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
    
  11. 调用“钱电”同学的选课信息的SQL语句:

    execute ScoreInfo '02'
    
  12. 创建基于表Student1,执行INSERT操作的AFTER触发器。当添加学生信息之后,给出“已成功添加!”的提示的SQL语句:

    create trigger tr_addStudent
    on Student1
    after insert
    as
    begin
    print '已成功添加!'
    end
    
  13. 创建禁止删除SC1表中成绩不及格的学生记录的触发器的SQL语句:

    create trigger tr_deleteFailScore
    on SC1
    for delete
    as
    if exists (select * from deleted where Score < 60)
    begin
    rollback
    print '不能删除成绩不及格的学生记录!'
    end