--①查询信息管理系学生的学号和姓名。
 --select sno,sname from Student where sdept = 'IS'
--②查询选修了课程的学生的学号。
 --select distinct sc.sno from sc,student
--③查询选修了课程号为C001的学生的学号和成绩,并对查询结果按成绩降序排列,如果成绩相同,则按学号升序排列。
 --SELECT sc.sno, sc.grade 
 --FROM sc 
 --JOIN course ON sc.cno = course.cno 
 --JOIN student ON sc.sno = student.sno 
 --WHERE sc.cno = 'C001' 
 --ORDER BY sc.grade DESC, sc.sno ASC;
--④查询选修课程号为C001的成绩在80-90分的学生的学号和成绩,并将成绩乘以系数0.8输出。
 --select sc.Sno,sc.grade*0.8 as grade
 --from sc 
 --JOIN course ON sc.cno = course.cno 
 --join student ON sc.sno = student.sno 
 --where sc.cno = 'C001' and sc.grade between 80 and 90
--⑤查询通信工程系或计算机系中姓张的学生的信息。
 --select *from student where (sdept = 'IM' or sdept = 'IS') and sname like '张%'
 --⑥查询缺少了成绩的学生的学号和课程号。
 --select sno,Cno from sc where grade is null
--⑦查询成绩最高的前3名学生的学号、成绩。
 --select top 3 sno,grade from sc order by grade desc 
--⑧查询选修了课程号为C001的课程的成绩最差的3名学生的学号和成绩。
 --select top 3 sno,grade from sc where cno = 'C001' order by grade asc
--⑨统计各系2000年以后出生的学生的总人数,并按总人数进行降序排列。
 --SELECT sdept, COUNT(*) as total_students
 --FROM student
 --WHERE DATEDIFF(YEAR, '2000-01-01', GETDATE()) - sage >= 0
 --GROUP BY sdept
 --ORDER BY total_students DESC;
--(2)连接查询:参见实验指导书P40
 --①查询每个学生的情况以及他(她)所选修的课程。
 --select student.sno,sname,sgender,sage,sc.cno,cname,Ccredit,grade from sc 
 --JOIN course ON sc.cno = course.cno 
 --join student ON sc.sno = student.sno 
--②查询学生的学号、姓名、选修的课程名及成绩。
 --SELECT student.sno, student.sname, course.cname, sc.grade
 --FROM student
 --JOIN sc ON student.sno = sc.sno
 --JOIN course ON sc.cno = course.cno;
  
 --③查询选修了JAVA课程且成绩在90分以上的学生的学号、姓名及成绩。
 --select sc.sno,sname,grade from sc 
 --join student on sc.sno = student.Sno 
 --join course on sc.cno = course.cno
 --and cname = 'JAVA' and grade>90
--④查询每一门课程的间接先修课(即先修课的先修课)。
 --select b.Cpno from course a,course b where a.Cpno = b.cno
--⑤查询选修了课程名以“计算机”开头的课程的学生信息。
 --select sc.sno,sname,sgender,sage,sdept from sc 
 --join student on sc.sno = student.Sno 
 --join course on sc.cno = course.cno
 --where cname like '计算机%'
--⑥查询各系各门课程的平均成绩。
 --select Sdept,cname,AVG(grade) from sc 
 --join student on sc.sno = student.Sno
 --join course on sc.cno = course.cno 
 --group by Sdept,cname
--⑦查询选修Java和计算机文化学的学生的学号、姓名和这两门课的平均成绩。
 --SELECT sc.sno, student.sname, 
 --  (AVG(CASE WHEN course.cname = 'JAVA' THEN sc.grade ELSE NULL END) + 
 --   AVG(CASE WHEN course.cname = '计算机文化学' THEN sc.grade ELSE NULL END)) / 2 AS avg_grade
 --FROM sc
 --JOIN student ON sc.sno = student.sno
 --JOIN course ON sc.cno = course.cno
 --WHERE course.cname IN ('Java', '计算机文化学')
 --GROUP BY sc.sno, student.sname
 --HAVING COUNT(DISTINCT course.cname) >= 2;
--⑧统计每个学生的选课门数(包括没选课的学生),列出学号、选课门数和选课情况,其中选课情况显示规则为:
 --a.如果选课门数大于或等于6门,则选课情况为:较多;
 --b.如果选课门数在3-5门之间,则选课情况为:一般;
 --c.如果选课门数在1-2门,则选课情况为:较少;
 --d.如果没有选课,则选课情况为:未选课。
 --select student.sno,count(sc.cno),
 --(case when count(sc.Cno)>=6 then '较多' 
 --when count(sc.Cno)>=3 and count(sc.Cno)<=5 then'一般'
 -- when count(sc.Cno)>=1 and count(sc.Cno)<=2 then'较少'
 --  else '未选课' end)from student 
 -- LEFT JOIN sc ON student.sno = sc.sno
 --group by student.sno
--(3)嵌套查询:参见实验指导书P40
 --①查询选修了JAVA课程的学生的学号和姓名。
 --方法一
 --select sc.sno,sname from sc
 --join student on sc.sno = student.sno 
 --join course on course.cno = sc.cno
 --and cname = 'JAVA'
--方法二
 --select sno,sname from student where sno = 
 --(select sno from sc where cno = 
 --(select cno from course where cname = 'JAVA') )
--②查询其它系中年龄小于计算机系年龄最大者的学生信息。
 --select  * from student where sage<(select max(sage) from student where sdept = 'IS') and sdept !='IS'
 --③查询其它系中比计算机系的学生年龄都小的学生信息。
 --select  * from student where sage<(select min(sage) from student where sdept = 'IS') and sdept !='IS'
 --④查询选修课程号为C001的课程的成绩高于张海的学生的学号和成绩。
 --select sno,grade from sc where cno = 'C001'
 -- and grade>(select grade from sc where cno = 'C001' 
 -- and sno =(select sno from student where sname = '张海'))
 -- 子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,
 -- 或子查询用作表达式时,这种情况是不允许的。
--⑤查询和李勇的高等数学课程分数相同的学生的学号。
 --select sno from sc where grade = 
 --(select grade from sc where sno = 
 --(select sno from student where sname = '李勇')
 --and cno = (select cno from course where cname = '高等数学'))
--⑥查询没有选修c002课程的学生的姓名。
 --select sname from student where sno!=(select sno from sc where cno = 'C002')
--⑦查询年龄大于女同学平均年龄的男同学的姓名和年龄。
 --select sname,sage from student where
 -- sage>(select AVG(sage) from student where sgender = '女') and sgender = '男'
--⑧查询选修JAVA课程的学生成绩比此课程的平均成绩高的学生的学号和成绩。
 --select sno,grade from sc where
 -- grade>(select AVG(grade) from sc 
 -- where cno = (select cno from course where cname = 'JAVA')) 
 -- and cno = (select cno from course where cname = 'JAVA')
--(4)增加、删除、修改记录
 --① 向表Student中插入一个学生元组,属性值自拟。
 --insert into student values ('98008','刘备','男','35','MA')
--② 从表SC中删除尚无成绩的选课元组。
 --delete sc where grade is null
--③ 检索每门课程成绩都大于80分的学生学号、姓名和性别,结果存入Stu表。
 --SELECT student.sno, sname, sgender
 --FROM student 
 --JOIN sc ON student.sno = sc.sno
 --GROUP BY student.sno, sname, sgender
 --HAVING MIN(grade) > 80;
 -- group by 有一个原则,就是 select 
 -- 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面。
--④ 把低于总平均成绩的女同学成绩提高5%。
 --UPDATE sc
 --SET grade = grade * 1.05
 --WHERE sno IN (
 --  SELECT sno
 --  FROM student
 --  WHERE sgender = '女'
 --) AND grade < (
 --  SELECT AVG(grade)
 --  FROM sc
 --  JOIN student ON sc.sno = student.sno
 --  WHERE student.sgender = '女'
 --);
 --⑤ 把钱小平同学的有关信息全部删掉。
 --delete from student where sname = '钱小平'
 --⑥ 把选修JAVA课不及格的成绩全改为0。
 --update sc set grade = 0 where grade<60 and
 -- cno = (select cno from course where cname='JAVA')