0 0

关于SQL子查询中使用order by的问题 0

最近回头看以前的数据库教材《数据库系统概论》人大 王珊 版的

有一段叙述:“需要特别指出的是,子查询的select语句不能使用 order by子句,order by子句只能对最终查询结果排序”

但是正好之前练习碰到个场景,就在子句中用了order by ,结果也是正确的。

所以我很疑惑,是书上说错了还是什么原因
下面是SQL

select userid from (select userid,min(createtime) from LT_BIZORDER t
     where (t.status in (1,2,3,4,5) or (t.status=6 and t.endstatus in (0,1,2))) 
	 and createtime > to_date('2014-06-01','yyyy/MM/dd') 
     group by t.userid order by min(createtime) asc)
     where rownum<=10000
2014年5月22日 17:54

6个答案 按时间排序 按投票排序

0 0

采纳的答案


1.子查询是可以使用order by
2.我测试了 select * from (子查询 order by)
           select * from table A where id not in (子查询 order by )

都是可以的

3、下面截取官档一段order by 和 rownum 一起用的范例!


If you embed the ORDER BY clause in a subquery and place the ROWNUM condition in the top-level query, then you can force the ROWNUM condition to be applied after the ordering of the rows. For example, the following query returns the employees with the 10 smallest employee numbers. This is sometimes referred to as top-N reporting:

SELECT * FROM
   (SELECT * FROM employees ORDER BY employee_id)
   WHERE ROWNUM < 11;

2014年5月22日 20:43
0 0

当order by 与 rownum一起使用时,当然有意义,因为子查询的结果会影响到最终的返回结果集,并且在这种情况下,order by必须写在子查询里。但是就其他的情况而论,在子查询里写order by 没有实际意义,反而影响查询效率。

你可以尝试执行一个子查询中带有Order by,且没有rownum的sql。
执行后查看执行计划,你会发现执行计划里根本没有对子查询做order by操作,因为它也觉得这么做没有必要。

2014年6月15日 13:12
0 0

可以用,只是最终结果不一样

2014年5月23日 09:05
0 0

书上写错了。

SELECT <expression list> [TOP <n>] FROM <model> [WHERE <condition list>] [ORDER BY <expression> [DESC|ASC]]
里面[]表示根据实际需要可写可不写。

最后说一句,书中不可能是都正确,随着对错误的纠正,也就了解的多了。

2014年5月22日 22:11
0 0

当然影响啊,你from的张间接查询出来的表,由于该间接表已排好序,产生的结果当然受”间接表影响

2014年5月22日 19:50
0 0

子查询是可以用order by的,并且这个orderby 会影响主查询的结果顺序。
书上写错了。

2014年5月22日 18:05

相关推荐

    sql子查询总结

    子查询总是写在圆括号中,可以用在使用表达式的任何地方,如 Select、Insert、Update 或 Delete 语句或其他子查询中。 子查询也称为内部查询或内部选择,而包含子查询的语句也称为外部查询或外部选择。许多包含子...

    数据库实验报告 SQL查询 ,子查询组合

    【SQL查询与子查询组合】 SQL (Structured Query Language) 是用于管理和处理数据库的标准语言,而SQL Server 2000是Microsoft提供的一款关系型数据库管理系统。在这个实验中,你将学习如何使用SQL Server 2000的...

    第22讲 SQL语言高级06--子查询.PPT

    3. 子查询中的ORDER BY子句一般不需要,除非你需要进行顶级数据分析。 4. 单行操作符应与返回单行的子查询一起使用,多行操作符则与返回多行的子查询搭配。 根据返回结果的不同,子查询可分为单行子查询和多行子...

    union all与order by用法

    这是因为 UNION ALL 的优先级高于 ORDER BY,ORDER BY 只能在 UNION ALL 的最后一个子查询中使用。 解决方法 为了解决这个问题,我们可以使用以下方法: 1. 将 ORDER BY 子句移动到 UNION ALL 的最后一个子查询中...

    SQL之分组统计和子查询专题

    子查询可以出现在SELECT、FROM、WHERE、ORDER BY、HAVING子句之后。 在WHERE子句中,子查询主要过滤单行单列、多行单列或单行多列的情况。在FROM子句中,子查询主要过滤多行多列的情况,当然也可以包含WHERE过滤的...

    MS_SQL server 多表查询 子查询小总结

    子查询总是被写在圆括号中,并且可以被用在使用表达式的任何地方,例如:嵌套在 `SELECT`、`INSERT`、`UPDATE` 或 `DELETE` 语句中,甚至其他子查询中。 #### 二、子查询的特点与用途 子查询也被称为**内部查询**或...

    sql子查询的一些例子

    ### SQL子查询实例详解 #### 一、基本概念与应用场景 在SQL中,子查询(也称为嵌套查询)是指在一个查询语句中包含另一个查询语句的情况。它是一种非常强大的功能,可以用来解决复杂的查询需求,特别是在处理多表...

    sql子查询总结[参考].pdf

    SQL子查询是指在SQL语言中,一个查询语句嵌套在另一个查询的查询条件之中的查询语句。子查询总是写在圆括号中,可以用在使用表达式的任何地方,如Select、Insert、Update或Delete语句或其他子查询中。子查询也称为...

    SQL数据库 查询语句使用精华

    本文详细介绍了SQL查询语句的基础用法及高级技巧,包括基本查询语句、条件过滤、使用别名、多表联接、聚合函数、子查询、通配符、范围查询、空值处理、结果排序以及结果合并等内容。通过学习这些技巧,你可以更高效...

    SQL的数据查询功能之四---子查询.

    值得注意的是,子查询的SELECT语句不允许使用ORDER BY子句,因为ORDER BY只能对最终查询结果进行排序。 1. 带有IN谓词的子查询 这种类型的子查询用于检查某个属性列的值是否在子查询返回的结果集中。例如,查询与...

    SQL各种查询方法

    6. **子查询**:在SQL中,一个查询可以嵌套在另一个查询的`WHERE`或`FROM`子句中,这样的查询称为子查询。例如,`SELECT * FROM 表1 WHERE 列1 IN (SELECT 列2 FROM 表2)`。 7. **连接查询**:当需要从两个或更多表...

    关于SQL Server SQL语句查询分页数据的解决方案

    ### 方法2:使用子查询 此方法首先选取第300000条记录之后的所有记录,再从中选取前100条。具体SQL语句如下: ```sql SELECT TOP 100 * FROM tblLendList WHERE fldSerialNo &gt; ( SELECT MAX(fldSerialNo) FROM ...

    SQL子查询和嵌套查询[收集].pdf

    SQL子查询和嵌套查询是数据库管理中非常重要的概念,特别是在软件开发领域,它们被广泛应用于数据查询和处理。子查询是指在SQL语句中嵌入另一条完整的SQL查询,通常用于获取临时结果或者作为主查询的一部分来过滤...

    SQL子查询学习[整理].pdf

    SQL子查询是数据库查询中的重要概念,特别是在软件开发领域,理解和熟练掌握子查询能够极大地提升数据处理效率。本文主要介绍了五种子查询类型:标量子查询、多列子查询、相关子查询、使用EXISTS和WITH子句。 1. **...

    sql中文查询手册

    1. 子查询:在查询中嵌套另一个查询,用于获取满足特定条件的结果集。例如: ```sql SELECT * FROM 表1 WHERE 字段 IN (SELECT 字段 FROM 表2 WHERE 条件); ``` 2. 联接查询:包括内连接(INNER JOIN)、外连接...

    SQL查询语句使用

    - 子查询是指在一个查询内部嵌套另一个查询,主要用于在查询过程中执行复杂的逻辑处理。 - 示例:`SELECT t.title FROM titles t WHERE t.ytd_sales &gt; (SELECT AVG(ytd_sales) FROM titles);` 7. **排序结果集:*...

    SQL练习与答案3 视图与子查询

    在SQL中,视图和子查询是两种非常重要的概念,它们在数据管理和分析中起着至关重要的作用。本文将详细探讨这两个主题,并结合提供的练习题目给出解答。 首先,视图是一种虚拟表,它是由一个或多个SQL查询结果组成的...

    SQL 高级查询课件

    你可以学习到如何使用子查询来解决复杂的逻辑问题,例如在WHERE子句中使用子查询来定义条件,或者在SELECT语句中使用子查询来生成计算字段。此外,子查询也可以与其他查询操作结合,如联合(UNION)和INTERSECT,以...

Global site tag (gtag.js) - Google Analytics