#web开发/czh_blog/数据库
2017年8月30日 下午2:39
相关子查询:子查询中会使用外部表
两种情况会出现先查询外部产生表的第一条信息,用这条信息中的内容在内部表中匹配查询信息
- 这个可以作为我原先总结的第三种写sql思维的补充
- select
- 使用情形:当我们的需要对中间表(视图)中的每一条数据进行处理时
- 例子
- 这里可以很容的查出来每个学生的总分zcj对应的表
select sc.s,sum(sc.score) zcj from sc group by sc.s- 然后,在这个表的基础上进行查询,查询出来的内容中的具体某个人的信息中的总分都要和整个表中的所有人的总分进行比较,然后看看有几个人比他大。
- 最后的数值,就是他的排名
- 这里的关键是:select到from之间的语句是:可以进行单独的sql语句执行的。这条是这种写法成立的本质原因
- 执行的时候,a.zcj就是一个具体的数值。
1
2
3
4
5
6
7
8
9
10--18、查询学生的总成绩并进行排名
select a.s,a.zcj,
(select count(1) from
(select sc.s,sum(sc.score) zcj from sc group by sc.s) b where b.zcj>a.zcj
)+1 mc
from
(
select sc.s,sum(sc.score) zcj from sc group by sc.s
) a
order by mc;
- 另外一种写法:
1
SELECT b.s,b.zcj,count(1) mc from (select sc.s,sum(sc.score) zcj from sc group by sc.s) b , (select sc.s,sum(sc.score) zcj from sc group by sc.s) a where b.zcj<=a.zcj GROUP BY b.s ORDER BY mc
- 区别在于:b.zcj<=a.zcj 这是由于主表不一样,上面的是a,下面的是b
- 体现的重要知识点是:b.zcj<=a.zcj 两个变量可以直接比较,平常我们都是其中一个是变量
- exit
- 以前的文章写过SQL书本笔记摘抄
表的结构
图
总体的结构
的 的用法
主干
拼
4+2
select
group
6
7
datetime Oracle没有
select 中使用group by ,那么select能查出来的结果一定要使用goup by 来分组
Rownum
null count
数据类型