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变量是可以移植的。
           

sql子查询 嵌套SELECT语句

嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值。子查询不但能够出现在Where子句中,也能够出现在from子句中,作为一个临时表使用,也能够出现在sele...
  • wangqi0079
  • wangqi0079
  • 2013年08月23日 15:13
  • 5740

T-SQL动态查询(4)——动态SQL

接上文:T-SQL动态查询(3)——静态SQL 前言: 前面说了很多关于动态查询的内容,本文将介绍使用动态SQL解决动态查询的一些方法。 为什么使用动态SQL: 在很多项目中,动态SQL被广泛使用甚至...
  • DBA_Huangzj
  • DBA_Huangzj
  • 2015年12月09日 09:38
  • 9466

SQL查询区分大小写方法

一、实例介绍 SQL语句大小写到底是否区分呢?我们先从下面的这个例子来看一下: 例: --> 创建表,插入数据: declare @maco table (number int,myvalue ...
  • c13_tianming
  • c13_tianming
  • 2015年12月18日 16:46
  • 1577

T-SQL语句之Select(一)

Operator Description != Tests two expressions not being equal to each other. ...
  • zhanghui_hn
  • zhanghui_hn
  • 2012年03月11日 09:07
  • 905

SQL 基础--SELECT 查询

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

2016.12.08回顾 SQL模块化与子查询 SELECT NULL变换 JOINQUANT探索

1、昨天基本上全天都在弄同盾多头借贷和同盾严重逾期的规则,我想一下学到了哪些东西呢?      - 可以join表,拿相关的字段,也可以直接写子查询根绝关键字段比如customer_id去拿,如果查询...
  • strwolf
  • strwolf
  • 2016年12月09日 10:35
  • 193

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

1.查询所有数据        SQL:SELECT * FROM UserInfo        MongoDB:db.UserInfo.find()       2.查询特定列,其中Mo...
  • a15020059230
  • a15020059230
  • 2017年07月20日 10:58
  • 156

thinkphp3.2【SQL各种查询条件&&select()方法原理追踪】

【各种查询条件设置】 $obj = D();  创建对象 $obj -> select();  查询数据 select  字段,字段  from  表名  where 条件  group 字...
  • qq_33382313
  • qq_33382313
  • 2016年06月20日 23:36
  • 494

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

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

SQL语句之SELECT查询语句

SELECT语句用于查询数据库。一条SELECT命令的返回结果是零或多行每行有固定字段数的数据。字段的数目由在SELECT和FROM之间的表达式列表定义。任意的表达式都可以被用作结果。若表达式是 ...
  • pashanhuxp
  • pashanhuxp
  • 2014年09月28日 17:12
  • 863
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:T-SQL中的Select查询
举报原因:
原因补充:

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