问题一:、有三张表,学生表S,课程表C,学生课程表SC
01:写出建表语句 答: create table s(id integer primary key,name varchar(20)); create table c(id integer primary key,name varchar(20)); create table sc( sid integer references s(id), cid integer references c(id), primary key(sid,cid) ) 02:写出SQL语句,查询选修了所以选修课程的学生 答: select stu.id,stu.name from s stu where( select COUNT(*) from sc where sc.sid=stu.id )=( select COUNT(*) from c ) 03:写出SQL语句,查询选修了至少5门以上的课程的学生 答: select stu.id,stu.name from s stu where ( select COUNT(*) from sc where sid=stu.id )>=5问题二:有三张表、Student学生表(学号、姓名、性别、组织部门)、
Course课程表(编号、课程名称)、 Sc选课表(学号、课程编号、成绩) 01、写一个SQL语句,查询选修了'计算机原理'的学生学号和姓名 答: select stu.sno,stu.sname from Student stu where( select COUNT(*)from sc where sno=stu.sno and cno=( select cno from Course where cname='计算机原理' ) )!=0 02、写一个SQL语句,查询'周星驰'同学选修的课程名称 答: select cname from Course where cno in( select cno from sc where sno=( select sno from Student where sname='周星驰' ) ) 03、写一个SQL语句,查询选修了5门课程的学生学号和姓名 答: select stu.sno,stu.sname from Student stu where ( select COUNT(*) from sc where sno=stu.sno ) =5 04、查询两门以上(包括两门)课程不及格的学生名称以及平均成绩 答: select s.sno,s,sname,AVG(sc.score) from Student s,sc where s.sno=sc.sno group by s.sno,s.sname having COUNT( case when sc.score<60 then 1 end )>2问题三:数据库表Test结构如下:
ID NAME AGE MANAGER(所属主管人ID)
106 A 30 104 107 B 20 108 108 C 19 104 109 D 25 109 116 E 40 120 119 F 45 null 要求:列出所有年龄比所属主管年龄大的人的id和姓名? 答: select employee.name from test employee where employee.age>( select manager.age from test manager where manager.id=employee.manager )问题四:有如下两张表
表city: CityNo CityName StateNo bj 北京 null sh 上海 null gz 广州 gd dl 大连 ln 表state: StateNo StateName gd 广东 ln 辽宁 sd 山东 nmg 内蒙古欲得到结果如下: CityNo CityName StateNo StateName bj 北京 null null dl 大连 ln 辽宁 gz 广州 gd 广东 sh 上海 null null 答: select c.cityno,c.cityname,c.stateno,s.statename from city c,state s where c.stateno=s.stateno order by c.cityno问题五:有三张表 S(SNO,SNAME)学生关系。学号、姓名 C(CNO,CNAME,CTEACHER)课程关系。课程号、课程名称、任课老师 SC(SNO,CNO,SCGRADE)选课关系。SCGRADE成绩 01、找出没有选修过'张三'老师讲授的所有学生姓名 答: select sname from s where sno not in( select sno from sc where cno in( select cno from c where cname='张三' ) ) 02、列出有二门以上(含二门)不及格课程的学生姓名和学号 答: select sname,( select AVG(scgrade) from sc where sno=s.sno ) from s where (select COUNT(*) from sc where sno=s.sno and scgrade<60 )>=2 03、列出既学过'1'号课程,又学过'2'号课程的所有学生学号和姓名 答: select sname from s where sno in(select sno from where cno=1 or cno=2) 04、列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号及姓名 答: select sname from s where sno in( select sno from sc where cno=1 and scgrade>( select scgrade from sc where sno=2 and cno=1 ) ) 05、列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩 答: select sname from s where (select scgrade from sc where sno=s.no and cno=1 )>(select scgrade from sc where sno=s.sno and cno=2 )