select filed_name from table_name
1.上面的查询语句需要用到子查询时,每个参数(部分)都可以通过子查询语句得到,包括表的字段以及字段之间的比较或者是跟在 from 后面的来源表。例如:
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)
注:其中将分组查询的结果-最低分与平均分的比较采用了子查询方式。
2.连接查询的思想,逐层递推。首先分析查询结果涉及了几张表,如果是多张表就要连接查询,这多张表之间一定存在着关联。 顺序一般是从里到外,先查子表字段,根据子表与父表之间的主外键关系,再查父表字段。例:
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.连接查询与子查询配合使用时,注意表别名的引用以及表中字段别名的使用。碰到聚合函数表示的列时,必须给与该列别名。例:
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.右外连接表示显示右表的全部数据,特别是用于显示左表中字段值为空的情况。左外连接同理。例:
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.自连接用法含有一定的技巧,应灵活使用。多用于查询含有相同值的记录例:
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;