也就是说你要写出来两个代码呀
SELECT
studentId,nameId
FROM
StudentTable
ORDEREDBY
studentId,nameId
SELECT
studentId,nameId
FROM
StudentTable
WHERE
nameId IN (1~9999)
SELECT
studentId,nameId
FROM
StudentTable
ORDEREDBY
studentId,nameId
SELECT
studentId,nameId
FROM
StudentTable
WHERE
nameId IN (1~9999)
解决方案 »
- 求解答,谢谢
- 向高手求解
- Rose逆向生成不了与org包有关联的java类怎么办?
- 急急急!!!!!在线等
- 有2个面试题目,很简单,考考大家,顺便散分!!!!!
- Hibernate和Spring关于单向一对多的问题
- 怎么把一个页面上得LIst对象传到我得Action中?(Struts框架)
- 最近老听说maven,它到底在java开发中有什么作用?
- 一个用java连接oracle的问题
- eclipse出错:an error has occurred see the log file
- 小弟很迷惑,EJB这种技术有前途吗,我觉得一般的javabean就够用了,而且ejb配置起来云里雾里的
- 问一个关于RMI的问题
既必须:
SELECT
FROM
WHERE
GROUPBY
ORDEREDBY
而
SELECT
FROM
ORDEREDBY
WHERE
GROUPBY
是错误的?
SELECT
FROM
ORDEREDBY
WHERE
GROUPBY
?
另外,能不能简单说一下
SELECT
FROM
WHERE
GROUPBY
ORDEREDBY
的执行流程?
FROM
ORDEREDBY
WHERE
GROUPBY因为 ORDER BY 在 WHERE 之前,肯定会报错!你指的什么执行流程?
第一个流程问题??
SELECT
studentId,nameId
FROM
StudentTable
WHERE
nameId IN (1~9999)
GROUPBY
studentId,nameId
ORDEREDBY
studentId,nameId 先执行SELECT,生成一个关于studentId,nameId的临时结果集1,再执行WHERE??
上面是按照WHERE的条件从数据表中选择相应的记录放到结果集中,group by是对上面的结果集进行分组。ORDEREDBY则是对以上得到的数据集在group by的基础上排序。不影响group by的结果。。
studentId nameId
1 2
2 6
1 5
1 7
1 3
2 2
2 2执行上面的查询,你会得到
1 2
1 3
1 5
1 7
2 2
2 6这样的结果,因为有两个 2 2 ,所以只取了其中一个。
假设,有一个studentInfor的表,它有四个字段,分别是name,studentId,date,sex.
发一个SQL如下:
SELECT
name,studentId
FROM
studentInfor
WHERE
studentId IN (1~999)
GROUPBY
name,studentId
HAVING
name!='jiaoyong'
ORDEREDBY
name
它的执行流程是不是如下:
1, 数据库先根据WHERE子句,从studentInfor表中将studentId在1到999的记录选出来,形成一个临时表1。
2,再根据GROUPBY子句,将临时表1中的记录按name,studentId分组,name,studentId相同的记录合成一个记录,形成临时表2.该表只有name,student两个字段。
3,然后,再根据HAVING子句将临时表2中符合条件进的记录取出,形成临时表3。
4,根据SELECT,从临时表3中提取符合条件的字段,形成临时结果集。
5,根据ORDEREDBY子句,对临时结果集进行排序,形成结果集。
对不对啊?
也就是说,SELECT子句执行的表是那些符合条件的记录的集合,而不是原表?
书上说,在SELECT子句下直接出现的字段或在集合函数以及其它函数中出现的字段必须出现在GROUPBY子句中,我才有了上述的想法。
可是,书上又列了下面一个例子:
SELECT
studentId,nameId,AVG(date) AS Adate
FROM
StudentTable
WHERE
nameId IN (1~9999)
GROUPBY
studentId,nameId
ORDEREDBY
studentId,nameId
date分明没出现在GROUPBY子句中,书上确说这是对的。把我搞糊涂了。这个例子与我的猜想背道而驰,因为按我的猜想,SELECT子句执行的表既然是已对记录进行选择分组合并后的表,那这个表应不含date字段,那SELECT子句怎麽执行的?若我的猜想不对,正确的对SELECT语句的执行流程是怎样的?
select id,no_groupby from test group by id;这样的是错误的,
但是你可以对这些没有被 GROUP 的字段进行运算,并且返回运算的结果,比如这样就是正确的:
select id,max(no_groupby),min(no_groupby),avg(no_groupby) from test group by id;明白了吗? 所以这样更解释了,你的 SELECT 执行流程根本就是错误的。