T-SQL中的Select查询

原创 2006年05月30日 21:52:00
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变量是可以移植的。
           

相关文章推荐

T-SQL语句之Select(一)

Operator Description != Tests two expressions not being equal to each other. ...

SQL 基础--SELECT 查询

  • 2013年09月11日 11:21
  • 77KB
  • 下载

管家婆ERP V3Ⅱ采购入库单生成金蝶财务软件K3 V10.3标准凭证引入的SQL select 查询语句

说明:双&括起来的是变量,执行查询前须换为常量,如: &上日& SELECT a.BillDate AS FDate, MAX(YEAR(a.BillDate)) AS FYear,      ...

c# 经验谈:巧用Expression表达式 解决类似于sql中 select in 的查询

我们在项目经常会碰到一些特殊需求 例如下拉框是复选的,查询条件是根据下拉框中复选项进行拼接 看到此图后大家肯定会说,这很简单嘛 将所有的选项 拼成“'1-3','5-9'”  然后...

SQL语句之SELECT查询语句

SELECT语句用于查询数据库。一条SELECT命令的返回结果是零或多行每行有固定字段数的数据。字段的数目由在SELECT和FROM之间的表达式列表定义。任意的表达式都可以被用作结果。若表达式是 ...

MongoDB的查询语法和SQL的SELECT语法对照

1.查询所有数据        SQL:SELECT * FROM UserInfo        MongoDB:db.UserInfo.find()       2.查询特定列,其中Mo...

c# 经验谈:巧用Expression表达式 解决类似于sql中 select in 的查询(适合于中小型项目)

我们在项目经常会碰到一些特殊需求 例如下拉框是复选的,查询条件是根据下拉框中复选项进行拼接 看到此图后大家肯定会说,这很简单嘛 将所有的选项 拼成“'1-3','5-9'”  然后放到 in ...

sql查询原理和Select执行顺序

sql查询原理和Select执行顺序  sql查询原理和Select执行顺序关键字: 数据库 一 sql语句的执行步骤 1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义。 2) 语义...

Lambda表达式 c# 经验谈:巧用Expression表达式 解决类似于sql中 select in 的查询(适合于中小型项目)

我们在项目经常会碰到一些特殊需求 例如下拉框是复选的,查询条件是根据下拉框中复选项进行拼接 看到此图后大家肯定会说,这很简单嘛 将所有的选项 拼成“'1-3','5-9'”  然后放到 in ...

Oracle数据库 —— SQL之select语句(4) 多表查询

desc s_emp;//员工表 desc s_dept;//部门表 desc salgrade;//工资级别
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:T-SQL中的Select查询
举报原因:
原因补充:

(最多只允许输入30个字)