关闭

T-SQL中的Select查询

1211人阅读 评论(0) 收藏 举报
T-SQL中的Select查询
Select是SQL中功能最为强大的命令。对于Select---这个最重要的数据操作命令(DML)可以有无尽的话题。要明白,了解和掌握Select为我们提供的多种选择以及一些创造行动技术方法,是成为一个成功的SQL Server开发人员或者DBA的关键。
在SQL Server中所提供的两种主要的用户工具:企业管理器和查询分析器,都是用于开发和测试select语句的出色工具。但,我认为,如果要想精通T-SQL和学会编写存储过程,就不要过分依赖企业管理器。
(一)从单个表中查询数据
在select语句的基本语法格式中,它通知SQL Server要检索什么样的数据,包括从哪些表中检索数据,选择其中的哪些列、行,对于查询结果应当如何排序等。下面是简化了的select命令语法:
   SELECT *,Columns, or expressions
     [FROM table]
     [JOIN table
     ON condition]
     [WHERE conditions]
     [GROUP BY columns]
     [HAVING conditions]
     [ORDER BY Columns]
Select语句有一个列或者表达式的列表开始(选择列表),这个列表中应当至少包含一个表达式---而其他的所有的子句都是可选的。如:
   SELECT a
Select语句的from子句将所有的数据源组装为一个结果集合,然后由select语句的其他部分对这个结果稽核作进一步的处理。在from子句中,可以使用多种连接类型(如:内连接、外连接、自身连接、交叉连接和特殊连接等)中的某一种来连接多个表
Where子句基于指定的条件对由from子句组装的结果集合进行筛选,从中选择出满足条件的那些行。
聚合函数用于对数据集合中的数据进行汇总计算。Group by子句可以根据指定的分组列将较大的数据集合分成多个较小的数据集合。然后,可以对这些新的较小的数据组分别使用聚合函数。对于聚合函数计算的结果,还可以进一步使用having子句来加以筛选。
最后,使用order by子句指明结果集的排序顺序。
1.    Select Distinct
Select命令的第一个谓词选项是distinct关键字,使用它可以从查询的结果集合中消除重复的记录行。与distinct相对的谓词是all。但因为all是select语句的默认谓词,所以也就通常用不着写它。
注:①这里所说的重复是指在查询结果输出的那些列上的重复,而非在所查询的表中重复。
②在查询计划中,实现distinct确实需要进行其他额外的操作,但是,他对性能的影响并不大,如果在逻辑上distinct确实是必要的,就没有必要因为它对性能的影响而对它避而不用。
2.    选取前n行数据
在默认情况下,SQL Server将返回select语句所查询到的所有行。而使用可选的top谓词,则可以基于指定的选项来控制SQL Server只返回少量的行(可以使用固定的数字,或者百分比来指定返回的行数)
Top可以与order by配合工作,order by子句可以控制哪些行应当排在结果集的前面。如果select语句没有使用order by子句,top语句仍然可以正常工作,它将返回未排序的结果集中的前n行数据。
如:①在price表中,每种商品依据不同的有效日期可以具有多种价格,下面的查询用于聪price表中找出价格最高的前3%的商品:
SELECT TOP 3 PERCENT Code, ProductName,Price,
CONVERT(VARCHAR(10),EffectiveDate,1) AS PriceDate
           FROM Product,Price
           WHERE Product.ProductID=Price.ProductID
           ORDER BY Price
           ②而下面的查询,则是查找Price表中价格最便宜的前三种商品:
           SELECT TOP 3 Code,ProductName,Price,
CONVERT(VARCHAR(10),EffectiveDate,1) AS PriceDate
           FROM Product,Price
           WHERE Product.ProductID=Price.ProductID
           ORDER BY Price DESC
           注意:(1)With Ties选项。对于TOP谓词来说,with ties选项很重要。它可以在top谓词返回的结果集之后附加多个行,这些行与top谓词返回的结果集的最后一行在order by子句的排序列上具有相同的值。如:
           SELECT TOP 3 WITH TIES Code,...
           FROM TABLE
           ORDER BY Price
                        (2)动态TOP谓词。在select语句中必须明确写明top谓词应当返回的行数量或者百分比,不能使用变量或者表达式来替代top谓词中的数字和百分比。限定返回行数的另一种方法就是对rowcount全局变量进行设置,它可以指定所有后续的DML语句最多能够处理的行数。要取消rowcount的限制作用,可以将它设置为0,此时后续的DML语句又将对所有的行进行处理。如:
         SET ROWCOUNT 3
         SELECT ...
          虽然,在动态设置返回的行数方面,rowcount具有很大的灵活性,但是由于它没有with ties选项,所以可能会生成不完整的结果。
             警告:Top是不可移植的。如果必须将数据库移植到另一个数据库平台,使用top就会带来转换上的问题。相反,rowcount变量是可以移植的。
           
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:46849次
    • 积分:775
    • 等级:
    • 排名:千里之外
    • 原创:26篇
    • 转载:6篇
    • 译文:1篇
    • 评论:21条
    文章分类
    最新评论