/*创建studentCourseAndTeacher数据库*/ /*create database studentCourseAndTeacher*/ /*创建Student表*/ --use studentCourseAndTeacher --go --create table Student( --Sno Char(3) not null primary key, --Sname Char(8) not null, --Ssex Char(2) not null, --Sbirthday datetime, --Class Char(5) --) /*创建Teacher表*/ --use studentCourseAndTeacher --go --create table Teacher( --Tno Char(3) not null primary key, --Tname Char(4) not null, --Tsex Char(2) not null, --Tbirthday datetime, --Prof Char(6), --Depart Varchar(10) not null --) /*创建Course表*/ --use studentCourseAndTeacher --go --create table Course( --Cno Char(5) not null primary key, --Cname Varchar(10) not null, --Tno Char(3) not null, --foreign key(Tno) references Teacher(Tno) --) /*创建成绩表*/ --use studentCourseAndTeacher --go --create table Score( --Sno Char(3) not null, --Cno Char(5) not null, --Degree Decimal(4,1), --foreign key(Sno) references Student(Sno), --foreign key(Cno) references Course(Cno), --)
/*查询题目*/ use studentCourseAndTeacher go /*(1)查询student表的所有记录Sname,Ssex,Class*/ --select Sname,Ssex,Class --from Student /*(2)查询教师所在的单位即不重复的Depart列*/ --select distinct Tno,Tname,Depart --from Teacher /*(3)查询Student表的所有记录*/ --select * --from Student /*(4)查询Score表中成绩在60-80之间的所有记录*/ --select * --from Score --where Degree between 60 and 80 /*(5)查询Score表中成绩为85,86,88的成绩*/ --select sno,cno,Degree --from Score --where Degree=85 or Degree=86 or Degree=88 /*(6)查询Student表中“95031”班或性别为“女”的同学记录*/ --select * --from Student --where Class = '95031' or Ssex ='女' /*(7)以Class降序查询Student表的所有记录*/ --select * --from Student --order by Class desc /*(8)以Cno升序、Degree降序查询Score表中所有记录*/ --select * --from Score --order by Cno asc ,Degree desc /*(9)查询“95031”班的学生人数*/ --select Class 班级,COUNT(Sno) 学生人数 --from Student --where Class = '95031' --group by Class /*(10)查询Score表中的最高分的学生的学号和课程号*/ --select Sno,Cno --from Score --where Degree = (select max(Degree)from Score) /*¥¥¥¥¥(11)查询每门课的平均成绩*/ --select Cno 课程,AVG(Degree)平均成绩 --from Score --group by Cno /*¥¥¥¥¥(12)查询Score表中至少有5名学生选修的并以3开头的课程的平均分数*/ --select Cno 以3开头课程,AVG(Degree)平均分数,COUNT(*) 五名学生 --from Score --where Cno like '3%' --group by Cno --having count(Sno)>=5 /*(13)查询分数大于70,小于90的Sno列*/ --select Sno,Degree --from Score --where Degree>70 and Degree<90 --或 --use studentCourseAndTeacher --go --select Sno,Degree --from Score --where Degree between 70 and 90 /*(14)查询所有学生的Sname Cno Degree列*/ --select Student.Sname,Score.Cno,Score.Degree --from Student inner join Score on Student.Sno = Score.Sno --select Sname,Cno,Degree --from Student,Score --where Student.Sno = Score.Sno /*(15)查询所有学生的Sno Cname Degree列*/ --select Score.Sno,Course.Cname,Score.Degree --from Course inner join Score on Course.Cno = Score.Cno --或 --use studentCourseAndTeacher --go --select Sno,Cname,Degree --from Course,Score --where Course.Cno = Score.Cno; /*(16)查询所有学生的Sname Cname Degree列*/ --select Sname,Cname,Degree from Student,Course,Score --where student.Sno=Score.Sno and Course.Cno=Score.Cno; /*(17)查询“950332”班学生的平均分*/ --select Class,AVG(Degree)平均分 --from Score,Student --where Score.Sno = Student.Sno and Student.Class='95032' --group by Class /*(18)查询所有同学的Sno Cno Degree和rank列(其中rank为层级的等级,成绩转换成为等级的规则是:大于等于90分为A 小于90且大于 等于80分为B 小于80且大于等于70分为C 小于70且大于60分为D 小于60分为E)*/ --看不懂 /*(19)查询选修’300’课程的成绩高于’004’号同学’成绩的所有同学的记录*/ --select * --from Score --where Cno = '300' and Degree>(Select degree from score where sno='004' and cno='300') /*(20)查询选修score中选学多门课程的同学中分数为非最高分成绩的记录??????????*/ --select Sno,Max(Degree)非最高分 --from Score --group by Sno --having COUNT(Cno)>1 --select * --from Score a where Degree < --(select MAX(degree) from Score b where a.Cno=b.Cno) and Sno in(select Sno from Score group by Sno having count(*)>1) /*(21)查询成绩高于学号为“004” 课程号为“300”的成绩的所有记录*/ --select * --from Score --where Cno = '300' and Degree>(select Degree from Score where Cno ='300' and sno='004') /*(22)查询和学号为001的同学同年出生的室友学生的Sno Sname Sbirthday列*/ --select Sno,Sname,year(Sbirthday) --from Student --where year(Sbirthday) in (select year(Sbirthday) from Student where Sno = '001') --select Sno,Sname,Sbirthday from student where year(student.Sbirthday)=(select year(Sbirthday) from student where Sno='001') /*(23)查询“张旭”老师听上课程的学生成绩*/ --select Tname,Cname,Degree --from Teacher TC inner join Course C on TC.Tno= C.Tno --from Teacher,Course,Score --where Tname ='张旭' and Teacher.Tno = Course.Tno and Course.Cno = Score.Cno /*(24)查询选秀某课程的同学人数多余5人的教师姓名*/ --select Tname from Teacher where Tno in (select Tno from Course where Cno in (select Cno from Score group by Cno having COUNT(*)>2) ) /*(25)查询95033班和95031班全体学生的记录*/ --select * --from student --where Class='95033' or Class='95031' /*(26)查询存在有85分以上成绩的课程Cno*/ --select Cno,Degree --from Score --where Degree>85 /*(27)查询出"计算机系"教师所教课程的成绩表*/ --select TC.Tno,Tname, Depart --from Teacher TC,Course C --where TC.Tno = C.Tno and Depart ='计算机系' --select sno,Cno ,Degree --from Score --where Cno in (select Cno from Course where Tno in (select tno from Teacher where Depart='计算机系')) /*(28)查询“计算机系”与“电子工程系”不同职称的教师人数*/ --select Tname,Prof --from Teacher a --where Prof not in(select Prof from Teacher b where a.Depart!=b.Depart) /*(29)查询选修编号为“300”课程且成绩至少高于选修编号为“001”的同学的Cno Sno和Degree 并按Degree从高到低次序排序*/ --select Cno,Sno,Degree --from Score a where --(select Degree from Score b where Cno='300' and b.Sno=a.Sno)>=(select Degree from Score c where Cno='001' and c.Sno=a.Sno) order by Degree desc /*(30)查询选修编号为“300”且成绩高于选修编号为“001”课程的同学的Cno Sno Degree*/ --select Cno,Sno,Degree --from Score a where --(select Degree from Score b where Cno='300' and b.Sno=a.Sno)>(select Degree from Score c where Cno='001' and c.Sno=a.Sno) /*(31)查询所有教师和同学的name sex birthday*/ --select distinct Sname as name,Ssex as sex,Sbirthday as birthday from student --union --select distinct Tname as name,Tsex as sex,Tbirthday as birthday from Teacher /*(32)查询所有女教师和女同学的name sex birthday*/ --select distinct Sname as name,Ssex as sex,Sbirthday as birthday from student where Ssex='女' --union --select distinct Tname as name,Tsex as sex,Tbirthday as birthday from Teacher where Tsex='女' /*(33)查询成绩比该课程平均成绩地的同学的成绩表*/ --select Sno,Cno,Degree --from Score a where a.Degree<(select AVG(Degree) from Score b where a.Cno=b.Cno) /*(34)查询所有认可教师的Tname Depart*/ --select Tname,Depart --from Teacher --where Tname in (select distinct Tname from Teacher,Course,Score where Teacher.Tno=Course.Tno and Course.Cno=Score.Cno) --select Tname,Depart --from Teacher where tno in (select tno from course where Cno in (select distinct Cno from Score)) /*(35)查询所有未讲课的教师的Tname Depart*/ --select Tname,Depart --from Teacher --where Tname not in (select distinct Tname from Teacher,Course,Score where Teacher.Tno=Course.Tno and Course.Cno=Score.Cno) /*(36)查询至少有2名男生的班号*/ --select Class --FROM student where Ssex='男' group by Class having COUNT(*)>1 /*(37)查询Student表中不姓王的同学记录*/ --select * from student where Sname not like ('王%') /*(38)查询Student表中每个学生的姓名和年龄*/ --select Sname,YEAR(GETDATE())-year(Sbirthday) --from student /*(39)查询Student表中最大和最小的Sbirthday日期值*/ --select MAX(Sbirthday) as 最大,MIN(Sbirthday) as 最小 from student /*(40)以班号和年龄从大到小的顺序查询Student表中的全部记录*/ --select * from student order by Class desc,Sbirthday asc /*(41)查询“男”教师一起所上的课程*/ --select Tname,Cname from Teacher,Course where Tsex='男' and Teacher.Tno=Course.Tno /*(42)查询最高分同学的Sno Cno Degree列*/ --select Sno,Cno,Degree from Score where degree=(select MAX(Degree)from Score) --select top 1* from Score order by Degree desc /*(43)查询和“李军”同性别的所有同学的Sname*/ --select Sname --from student where Ssex=(select Ssex from student where Sname='李军') and Sname not in ('李军') /*(44)查询和“李军”同性别并同班的同学Sname*/ --select Sname --from student where Ssex=(select Ssex from student where Sname='李军') and Sname not in ('李军') and Class=(select Class from student where Sname='李军') /*(45)查询所有选修“计算机导论”课程的“男”同学的成绩表*/ --select Sno,Degree --from Score where Sno in (select Sno from student where Ssex='男') and Cno in (select Cno from Course where Cname='计算机导论')