这段代码有哪位高手看过?解析听听

这段代码有谁看过?解析听听
<%
ResultSet rs_sort=connDB.executeQuery("select * from (select top 10 * from ( select sum(number) as amount,ISBN from tb_Order_detail group by ISBN )as tab order by amount desc) o inner join tb_bookinfo b on o.ISBN=b.ISBN order by o.amount desc");
%>

------解决方案--------------------
JDBC的数据库操作,获取结果集保存到rs_sort中了。。SQL语句有点复杂、用到了子查询加内连接、分组排序。
------解决方案--------------------
首先要知道,select返回的是一个结果集,可以把这个结果集看作一个表,然后再用select从这个结果集的表选取数据
所以
SQL code
select * from --select top 10 *的结果集作为这个select的表
(select top 10 * from --select sum(number) ...的结果集作为这个select的表
( select sum(number) as amount,ISBN from tb_Order_detail group by ISBN )as tab --select sum(number) ... 结果集作为一个表
order by amount desc) o --select top 10 *的结果集作为一个表
inner join tb_bookinfo b on o.ISBN=b.ISBN order by o.amount desc

------解决方案--------------------
探讨

首先要知道,select返回的是一个结果集,可以把这个结果集看作一个表,然后再用select从这个结果集的表选取数据
所以
SQL code
select * from --select top 10 *的结果集作为这个select的表
(select top 10 * from --select sum(number) ...的结果集作为这个select的表
( select sum(n……

------解决方案--------------------
select * from (
/**
*从 tb_Order_detail表中找到10 记录 ,sum(number) 即数量和最少的10记录 的数量和 和 ISBN 
*
*/
select top 10 * from ( 
select sum(number) as amount,ISBN from tb_Order_detail group by ISBN )as tab order by amount desc) 

/**
*上面的数据 和 tb_bookinfo内连接 ,取得 ISBN 和该ISBN的数量和 ,同时取出 tb_bookinfo中的字段 
*按照 倒序输出 desc
*/
o inner join tb_bookinfo b on o.ISBN=b.ISBN order by o.amount desc
------解决方案--------------------
Resultset 是一个结果集,从数据中查询出来的数据可能是对象,也可能是基本数据类型等多种方式,于是在不知情的情况下我们便把那些数据先存放在Resultset这个结果集中,要用的时候只要这样
while(rs_sort.next()){//表示循环获取数据
p.setProductID(rs_sort.getInt(1));
p.setSerialNumber(rs_sort.getString(2));
p.setPname(rs_sort.getString(3));//这只是个获取数据的例子
}

而你上面的connDB是一个连接数据库的通道,executeQuery是要通过这个通道到数据库去做事的方法,里面放入的是你要执行的任务
而这里你要执行的数据库语句可以分开去看
select sum(number) as amount,ISBN from tb_Order_detail group by ISBN 
这一句是说根据ISBN这个列查询tb_Order_detail获得这个列中每一组的总和,得到一个新的列叫做amount

然后as tab order by amount desc,这句话是说,把你前面获得的amount列当成tab 表,然后根据amount这一列降序排列

然后select top 10 * from ( select sum(number) as amount,ISBN from tb_Order_detail group by ISBN )as tab order by amount desc) 
这句是说根据你上面获得的降序排列的数据,获得排名前面10条数据

然后select * from (select top 10 * from ( select sum(number) as amount,ISBN from tb_Order_detail group by ISBN )as tab order by amount desc) o inner join tb_bookinfo b on o.ISBN=b.ISBN order by o.amount desc
说的就是根据你上面获得的10条数据去跟tb_bookinfo表 连接查询,把tb_bookinfo中有的数据并且这10条数据中也存在的那些数据查询出来 ,并且降序排列

不知道能不能看懂!
------解决方案--------------------
好像是数据库里的,看看
------解决方案--------------------
其实把SQL语句写在命令里面看看就能明白的!!这个是数据库的基础来这的!!不要怕复杂!!