select filed_name from table_name
1.1要查询 score (选修表)中,学生选修的课程数量占 course (课程表)中所有课程数量的比例. 格式: 学号/姓名/选修占比%
select st.sno,st.sname,re.p percent from (select sno,(count(sno)/(selectcount(*) from course)) p from score,course where score.cno=course.cno group by sno) re,student st where re.sno=st.sno;
注:其中子表中的 p (比例)字段是通过子查询得到的,而整个连接查询的结果作为子查询的来源表。
1.2查询各年级的最低分低于全校平均分的年级与成绩信息 格式:年级/最低分
select st.sgrade,min(score) from score sc,student st where sc.sno=st.sno group by st.sgrade having min(score)<(select avg(score) from score);
注:其中将分组查询的结果-最低分与平均分的比较采用了子查询方式。
2.1查询至少选修了2门课的学生信息,要求使用子查询 格式:格式:学号/姓名/性别
select st.sno,st.sname,st.ssex from (select count(*),sno from score group by sno having count(*)>=2) re,student st where re.sno=st.sno;
3.1查询参加考试了的学生,所有课程的平均分在60以上的学生信息,并按平均分降序排序
select re.sno,st.sname,re.sv from (select avg(score) sv,sno from score group by sno having avg(score)>60) re,student st where re.sno=st.sno order by re.sv desc;
注:其中 sv (平均分)字段采用别名,在最后查询结果中被引用。
4.1查询所有学生选修(表 score )课程的信息,要求没有选修任何课程的学生( 表student )相应的课程栏显示空值 SQL> select * from student st left join score sc on st.sno=sc.sno; Oracle 中还可表示为:
select * from student st,score sc where st.sno=sc.sno(+);
注:左外连接的右表字段作加号标记,表示空值也显示。
5.1查询学生表中学生姓名相同,学号不同的学生信息 格式:学号/姓名/性别/年级(自连接)
select s1.sno,s1.sname,s1.ssex,s1.sgrade from student s1,student s2 where s1.sno<>s2.sno and s1.sname=s2.sname;