学习Oracle查询语句难点总结

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)<(select avg(score) from 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;

转载于:https://my.oschina.net/u/2245926/blog/323361

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值