`

T-SQL查询学习笔记——TOP子句

阅读更多
在select查询或表表达式中,top结合order by子句用于限制按order by顺序优先返回的结果
在2000中,只能使用常量制定该限制,而2005中支持在top中使用任意的独立表达式,而不仅仅是常量

例子:
SELECT TOP(3) OrderID, CustomerID, OrderDate
FROM dbo.Orders
ORDER BY OrderDate DESC, OrderID DESC;


SELECT TOP(1) PERCENT OrderID, CustomerID, OrderDate
FROM dbo.Orders
ORDER BY OrderDate DESC, OrderID DESC;
GO

因为Sql Server 2005支持把任意独立表达式作为TOP的输入,所以表达式必须被包含在圆括号内。为了向后兼容,仍然支持在select top查询中使用常量时可以不带圆括号

Top和确定性
Top查询并不一定要有Order by字句,然而这样的查询具有不确定性。也就是说,对相同的数据运行两次同样的查询,可能会产生不同的结果。

使用不带order by子句的select top查询的理由:
1、用select top查询快速预览表的结构或列名称
2、用select top(0)创建一个与另一个表或查询具有相同结构的空表

Top和输入表达式

DECLARE @n AS INT;
SET @n = 2;

SELECT TOP(@n) OrderID, OrderDate, CustomerID, EmployeeID
FROM dbo.Orders
ORDER BY OrderDate DESC, OrderID DESC;

Top和修改

Sql Server不支持在数据修改语句中使用order by子句,即使使用了top选项也是如此,所以它不能依赖于排序。Sql Server只影响正好先访问到的指定行数

新增:
Insert top(100) into target_table select col1,col2,col3 from source_table

删除:
DELETE TOP(100) FROM dbo.LargeOrders

修改:
UPDATE TOP(5000) dbo.LargeOrders
    SET CustomerID = N'ABCDE'
  WHERE CustomerID = N'OLDWO';

变相排序
新增:
insert into target_table
select top(10) col1,col2,col3 from source_table order by col1;
删除:
with cte_del as
(
select top(10) * from some_table order by col1
)
delete from cte_del
修改:
with cte_upd as
(
select top(10) * from some_table order by col1
)
update cte_del set col2=col2+1

分享到:
评论

相关推荐

    Microsoft_SQL_Server_2005技术内幕:T-SQL查询.pdf

    本书及其续篇——《Microsoft SQL Server 2005技术内幕:T-SQL程序设计》介绍了SQL Server 2005中高级T-SQL查询、查询优化及编程相关的知识。这两本书侧重于解决实践中的常见问题,并讨论了解决这些问题的方法。它们...

    Microsoft SQL Server 2008技术内幕:T-SQL查询(第二卷)

     作为一本讲述T-SQL高级查询的专业图书,《Microsoft SQL Server 2008技术内幕:T-SQL查询》旨在结合实践中的各种常见问题,教读者如何用SQL作为语言工具来思考问题,揭示基于集合查询的强大威力。《Microsoft SQL ...

    T-SQL中where子句与having子句的对比分析.pdf

    T-SQL中where子句与having子句的对比分析.pdf

    SQLServer2008技术内幕T-SQL查询包含源代码及附录A

    《Microsoft SQL Server 2008技术内幕:T-SQL查询》全面深入地介绍了Microsoft SQL Server 2008中高级T-SQL查询、性能优化等方面的内容,以及SQL Server 2008新增加的一些特性。主要内容包括SQL的基础理论、查询优化...

    (第一卷)Microsoft.SQL.Server.2008技术内幕:T-SQL语言基础

     《Microsoft SQL Server 2008技术内幕:T-SQL语言基础》适合须要学习T-SQL的各级程序员和数据库专业人员,是他们快速掌握T-SQL的必备参考图书。 致谢 引言 第1章 T-SQL查询和编程基础 1.1 理论背景 1.2 SQL ...

    Microsoft+SQL+Server+2008技术内幕:T-SQL查询_源代码及附录 中文版

    《Microsoft SQL Server 2008技术内幕:T-SQL查询》全面深入地介绍了Microsoft SQL Server 2008中高级T-SQL查询、性能优化等方面的内容,以及SQL Server 2008新增加的一些特性。主要内容包括SQL的基础理论、查询优化...

    T-SQL 高级语句

    T-SQL高级语句 SQL TOP 子句 SQL LIKE 操作符 SQL 通配符 SQL IN 操作符

    (第二卷)Microsoft SQL Server 2008技术内幕:T-SQL语言基础

     《Microsoft SQL Server 2008技术内幕:T-SQL语言基础》适合须要学习T-SQL的各级程序员和数据库专业人员,是他们快速掌握T-SQL的必备参考图书。 致谢 引言 第1章 T-SQL查询和编程基础 1.1 理论背景 1.2 ...

    Microsoft SQL Server 2005技术内幕:T-SQL查询

    第1章 T-SQL查询和编程基础  1.1 理论背景  1.2 SQL SERVER体系结构  1.3 创建表和定义数据完整性  1.4 总结 第2章 单表查询  2.1 SELECT语句的元素  2.2 谓词和运算符  2.3 CASE表达式  2.4 NULL...

    T-SQL 查询语句的执行顺序解析

    (5)SELECT (5-2) DISTINCT(5-3)TOP(<top>)(5-1) <select_list> (1)FROM (1-J) <left> <join> JOIN <right> on (2)WHERE (3)GROUP BY (4)HAVING (6)ORDER BY ;  每一步都会生成一个...

    T-SQL学习笔记.chm

    一:简单的语法知识 二:简单的增 删 改 查和一些相关子句 三:复杂一点的查询 四:约束 五:create drop alter 六:视图 七:存储过程与用户自定义函数 八:触发器 九:全文索引 十:游标

    T-SQL高级查询

    --高级查询在数据库中用得是最频繁的,也是应用最广泛的。 Ø 基本常用查询 --select select * from student; --all 查询所有 select all sex from student; --distinct 过滤重复 select distinct sex from ...

    计算机后端-PHP视频教程. php与mysql加强- 07. php加强18-子句查询陷阱.wmv

    计算机后端-PHP视频教程. php与mysql加强- 07. php加强18-子句查询陷阱.wmv

    SQL语言学习循序渐进.rar

    SQL语言学习循序渐进SQL循序渐进(1)-------介绍SQL SQL循序渐进(2)-------表的基础知识 SQL循序渐进(3)-------数据检索 SQL循序渐进(4)-------创建表 SQL循序渐进(5)-------插入数据到表 SQL循序渐进(6)...

    SQL语言学习循序渐进

    循序渐进介绍SQL,主要内容: SQL循序渐进(1)-------介绍SQL SQL循序渐进(2)-------表的基础知识 SQL循序渐进(3)-------数据检索 SQL循序渐进(4)-------创建表 SQL循序渐进(5)-------插入数据到表 SQL循序...

    SQL循序渐进,SQL入门基础

    SQL循序渐进(1)-------介绍SQL SQL循序渐进(2)-------表的基础知识 SQL循序渐进(3)-------数据检索 SQL循序渐进(4)-------创建表 SQL循序渐进(5)-------插入数据到表 SQL循序渐进(6)-------删除表 SQL循...

    SQL循序渐进教程.chm

    SQL循序渐进(1)-------介绍SQL SQL循序渐进(2)-------表的基础知识 SQL循序渐进(3)-------数据检索 SQL循序渐进(4)-------创建表 SQL循序渐进(5)-------插入数据到表 SQL循序渐进(6)-------删除表 SQL循...

    对Transact-SQL中groupby子句异常的分析.pdf

    对Transact-SQL中groupby子句异常的分析.pdf

    array-sql-filter:使用SQL的where子句来过滤对象数组

    向JS对象数组添加类似SQL的查询功能。 包含该库将向对象数组添加where(),select()和orderBy()功能。 where()-接受SQL查询字符串作为参数。 模拟SQL WHERE子句。 处理所有表达式,包括BETWEEN和IN子句。 ...

    用“多叉树”构造SQL查询中的WHERE子句——“多叉树”在VB中的实现及应用.pdf

    用“多叉树”构造SQL查询中的WHERE子句——“多叉树”在VB中的实现及应用.pdf

Global site tag (gtag.js) - Google Analytics