第一章 SELECT
一、使用SELECT
1、使用SELECT
SELECT可从数据库中读取数据列,从一或多列数据表中读取一或多笔数据列或行。它的基本语法如下:
SELECT 逗号分割的数据行名称列表FROM 数据表名称
|
2、查询处理的逻辑顺序
T-SQL语法与其他程序语言较大的区别在于其执行的逻辑处理流程。大部分程序码执行流程都是依照程序码撰写的先后顺序执行,但在T-SQL的逻辑处理过程中,第一个处理的顺序为FROM字句,而SELECT栏位子句则是最后一个步骤,如下表所示。
(8)SELECT (9) [DISTINCT]
(11) [Top n] 传回结果列表[INTO 新数据表名称]
(1) FROM 数据表
(3) [INNER | LFT | RIGHT] JOIN 数据表 (2) ON <数据表JOIN的条件>
(4) [WHERE <过滤条件>]
(5) [GROUP BY <群组语法>]
(6) [WITH {CUBE | ROLLUP}
(7) [HAVING <过滤条件>]
(10) ORDER BY <排序列表> [ASC | DESC]]
|
T-SQL执行之初,通常会先产生虚拟的数据表,也就是由步骤(1)取得执行此查询语法所需的全部数据,然后再通过步骤(2)、(3)找出要参照的其他数据表,进而组成一个总的数据表。如此大的数据表并不是用户所需要的,一般在组成大数据表后,会再经过多个不同的步骤,例如,WHERE字句过滤所需的记录、GROUP BY字句群组过滤后的数据等,缩小要回传的数据量。若部分子句在查询语法中没有被指定,则对应的步骤会被省略。
SQL Server支持UNICODE联盟定义的Unicode2.0标准(也成为UCS 2)。Unicode2.0是经由联盟成员一致同意而制定的标准。这个标准把每个字符关联到一个整数(数值由0到65536)。
Unicode是将字码指标对应到字符的标准语法。由于Unicode主要设计为涵盖世界上所有语言的字符,所以不需要使用不同的字码页(Code Page)来处理不同的字符集。SQL Server 2005支持Unicode Standard 3.2版。
3、过滤数据(WHRE 子句)
使用WHERE子句查询时,应注意以下事项:
(1) 当数据行的数据类型为char、nchar、varchar、nvarchar、text、datetime、smalldatetime等时,请记得前后加上单引号
(2) 当使用SELECT子句查询数据时,应尽量避免在内使用万用字符(*),传回所有数据行。并利用WHERE子句进一步限制查询结果,以确保所得的数据是有用的数据,降低传送过多数据所造成的负荷。
(3) 可以使用单引号(’)或双引号(“)括住字符串,但在此建议使用单引号括住字符串。当SET QUOTED IDENTIFIER选项设成ON时,双引号表示的是物件,就不允许将字符串括在其中。
3.1 使用万用字符
LIKE关键字可查询符合指定模式(pattern)的字符串、日期或时间数值。通过规则运算符来包含可供比对的模式。模式包含了所要查询的字符/串,它可以包含四种万用字符的任意组合。
万用字符
|
意义
|
%
|
任何具有零或多个字符的字符串
|
-
|
任何单一字符
|
[]
|
指定范围中的任何单一字符(例如[a-f]或集合[abcdef])
|
[^]
|
不在指定范围中的任何单一字符(例如[^a-f]或集合[^abcdef])
|
使用时,请将万用字符与字符串括在单引号中,例如:
(1)LIKE ‘Mc%’:查询以字母Mc开头的所有字符串,如Mcsadfsad。
(2)LIKE ‘_hery’:查询以字符串hery结尾、并且长度为5个字母的所有字符串,例如ahery。
(3)LIKE ‘[M-Z]ing’:查询以字符串ing结尾,并以M到Z之间的任何单一字母开头的字符串,如Ring。
(4)LIKE ‘M[^C]%’:查询以字母M开头,但并未以字母C作为第二个字母的所有字符串,如Macsfdasf。
若万用字符没有与LIKE关键字搭配使用,则它们将被误解成常数,而非模式(pattern),也就说,它们只代表本身的数值。
3.2 使用逻辑运算符
逻辑运算符有AND、OR及NOT。AND与OR用在WHERE子句中连接查询条件,NOT则是代表与布尔运算相反的结果。
(1) AND:结合两个布尔运算符,并在两个运算符都是TRUE时,传回TRUE,当在陈述语句中使用一个以上的逻辑运算符时,会先评估AND运算符,可以使用小括号来变更运算的顺序。
(2) OR:结合两个条件。如果任一布尔运算符是TRUE,便是TRUE。当在陈述语句中使用一个以上的逻辑运算符时,OR运算符会在AND运算符之后评估。此外,也可以使用小括号来变更运算的顺序。
(3) NOT:反转任何其他布尔运算符的值。
当陈述语句中使用一个以上的逻辑运算符时,NOT会第一个计算,接下来是AND,最后才是OR。先处理算术及位运算符,接着才处理逻辑运算符。
3.3 取回未知的值
NULL值表示是未知的值。NULL值与空值或零值不同。两个NULL值永远不会相等,因为每个NULL值都是未知的,两个NULL值之间、或是一个NULL与其他任何值的比较,都会传回未知。NULL值通常代表未知的、不适用的,或之后将要加入的数据。
若要在查询中测试NULL值,请在WHERE子句中使用IS NULL或IS NOT NULL。若要直观地以=NULL或<>NULL来判断,可以更改连接设定ANSI_NULLS为OFF,否则与=NULL或<>NULL比较的结果为UNKNOWN,无法正确地判断。但建议使用默认的ANSI_NULLS为ON,并用IS运算符来判断,因为这是处理NULL的惯例。
4、集合数据与分组
在一般的情况下,集合函数只会传回一个计算之后的值。使用集合函数的优点是在server端计算统计,等到数据统计出来之后,SQL Server只将结果传回给使用者,而不传回整个细节的结果集。
集合函数
|
语法定义
|
使用时限制
|
MIN或MAX
|
MIN([ALL|DISTINCT]运算式
MAX([ALL|DISTINCT]运算式
|
运算式不可以使用于bit数据类型
会忽略任何Null值,如果是字元数据行,MAX会在定序顺序中寻找最高值,而MIN反之。DISTINCT对MAX、MIN没意义,只适用于SQL-92相容性。
|
SUM或AVG
|
AVG([ALL|DISTINCT]运算式
SUM([ALL|DISTINCT]运算式
|
只能使用在以下数据类型:Int,smallint,tinyint,decimal,numeric,float,real,money,smallmoney
|
COUNT
|
COUNT([ALL|DISTINCT]运算式
|
使用COUNT(*)这个函数时要特别小心如果栏位值含有NULL的影响。几乎可以使用在任何数据类型,包括text、ntext、image。
|
4.1 分组数据与HAVING指令
Group By 子句可将多个数据列结合成单一的数据列,并使用集合函数计算分组后的结果。当指定GROUP BY时,GROUP BY 清单应该包括 SELECT 子句栏位清单中,任何非经集合运算的数据行,否则,GROUP BY 运算式必须完全符合运取清单。
使用Group By子句时,必须注意以下几点:
(1)SQL Server 会针对每一群组的数据计算出一个统计值;(2)如果SELECT子句中含有GROUP BY子句以及WHERE子句,则WHERE子句一定要放在GROUP BY子句之前;(3)在GROUP BY子句之后所列出的栏位内最好不要含有NULL值,因为GROUP BY子句会将所有NULL值归纳在同一组内;(4)如果想要利用分组后,集合函数的计算值来过滤,必须使用GROUP BY子句,并搭配HAVING子句限制传回的数据结果。
当使用GROUP BY子句搭配集合函数来查询数据时,如果想要进一步限制查询后的结果,可以使用WHERE子句或HAVING子句。
例如:
select vDepCode from HREmployee group by vDepCode HAVING COUNT(*)>1
4.2 利用附加指令产生额外集合数据
当SELECT语法中使用GROUP BY子句分组数据时,可以搭配ROLLUP和CUBE运算符一起使用,以得到完整的统计信息。
4.2.1 使用GROUP BY指令与ROLLUP运算符
通常在GROUP BY子句中使用两个以上的栏位搭配集合函数运算时,可以利用ROLLUP运算符整理出进一步的统计信息。
在GROUP BY子句之后加上CUBE或ROLLUP运算符时,必须注意一下几点(1)SQL Server分组的规则为“由左至右”,分完组才会进行统计计算;(2)GROUP BY子句之后最多不能超过10行。
例如:
select vDepCode,vEmpCode,count(vEmpCode) as empNumber
from HREmployee
group by vDepCode,vEmpCode
with ROLLUP
4.2.2 使用GROUP BY指令与CUBE运算符
如果在GROUP BY子句中使用两个以上的栏位搭配集合函数运算,并且希望统计之后的结果包含所有群组可能的组合时,就可以利用CUBE运算符。
例如:
select vDepCode,vEmpCode,count(vEmpCode) as empNumber
from HREmployee
group by vDepCode,vEmpCode
with CUBE
4.2.3 使用GROUPING函数
可以使用GROUPING函数区别哪些值是由WITH CUBE或是WITH ROLLUP所产生出来,以判断由这两个指令所产生出来的新值,在使用GROUPING函数时,应注意(1)提供一个新栏位放置GROUPING函数;(2)回传1代表该栏位值是由WITH CUBE或是WITH ROLLUP所产生;(3)回传0代表明细数据。
例如:
select vDepCode,GROUPING(vDepCode),
vEmpCode,GROUPING(vEmpCode),
count(vEmpCode) as empNumber
from HREmployee
margin-top: 0cm; margin-right: 0cm; margin-left: 0cm; text-align
分享到:
相关推荐
本文将深入探讨“使用select的UDP和TCP回射程序”,这是《UNIX网络编程》一书中第8章的一个实践案例。该程序旨在展示如何通过select系统调用来同时管理多个网络连接,无论是基于用户数据报协议(UDP)还是传输控制...
在本主题中,我们将深入探讨如何使用`select`机制和线程池来构建高效的TCP、UDP服务器,以及客户端的实现。 首先,TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,而UDP(用户数据报...
在你的项目中使用Select2,首先需要下载或通过CDN引入所需文件。在这个压缩包中,我们有`select2.min.css`(样式文件)和`select2.min.js`(JavaScript 文件)。将这两个文件放入你的项目目录,并在HTML文件中引用...
实验报告主要围绕数据库查询展开,涉及SQL语言中的SELECT语句及其相关子句的使用,包括基本查询、条件查询、GROUP BY、ORDER BY、UNION、嵌套查询和连接查询等。以下是具体的知识点详解: 1. **SELECT基本查询**: ...
以下将详细介绍如何使用`select`函数实现这个功能。 首先,了解`select`的基本结构。`select`函数接收三个文件描述符集作为参数:`readfds`、`writefds`和`exceptfds`,以及一个`timeout`结构体。当指定的文件描述...
可以复制我的文件的代码到你自己的工程中,也可以使用我的文件替换掉你的image工程中的userAppInit.c文件。该代码实现了使用select监测串口是否接收到了数据,串口收发都已调通。
Select 语句的基本使用 Select 语句是 Transact-SQL 中最基本也是最重要的一种查询语句,用于从数据库中检索数据。下面将详细介绍 Select 语句的基本使用。 一、 简单查询 简单的 Transact-SQL 查询只包括选择...
同时,"网络有模板,喜欢请点赞"提示我们,网上可能还有其他开发者分享的关于如何使用Select2的示例代码或模板,可以作为参考和学习。 标签"java js 下拉框"表明了这个话题涉及到的技术栈,其中"java"可能是用来...
《使用select实现的UDP/TCP组合服务器》 网络编程中,服务器通常被设计为只处理一种类型的通信协议,如TCP或UDP。然而,在某些场景下,服务器可能需要同时支持这两种协议,以满足不同类型的客户端需求。本文将介绍...
以下是关于使用SELECT… INTO OUTFILE导出MySQL数据的详细解释: 1. **基本语法**: SELECT… INTO OUTFILE语句的基本形式是: ```sql SELECT column1, column2, ... INTO OUTFILE 'filename' [FIELDS ...
使用select命令
例如,可以使用select来检查网络数据是否到达,如果没有数据到达,则select会阻塞程序的执行,直到有数据可读或超时发生。在socket编程中,recv()函数经常被用到,当select()检测到网络套接字上有数据可读时,就可以...
使用select模型实现WebSocket实现IM功能,项目中带有测试的网页客户端。具体可查看 https://blog.csdn.net/qq_34950682/article/details/105148477
通过阅读和理解这段代码,开发者可以学习到如何在C++中构建一个功能完备的TCP客户端,并使用select模型来实现高效的并发连接。 总结来说,这个TCP测试客户端代码是学习网络编程和C++多路复用I/O的一个好例子。通过...
最近在开发im服务器 需要大并发链接 QT默认的是使用select模型的 这种轮询方式非常慢 在高并发连接 我们需要epoll才能发挥linux服务器的性能 而且使用简单 整个服务端代码架构无需修改 直接可以使用 只要在 main...
《unix网络编程》第六章,使用select的客户服务器程序
为了解决这个问题,我们可以创建一个自定义的组件,如`lzy-custom-select`,这个组件将`<select>`元素包装在一个更可控的容器中,然后使用JavaScript来模拟原生的下拉行为。 `lzy-custom-select`可能的实现思路是:...
本项目涉及的主题是一个使用`select`函数实现的服务端,重点在于数据包的控制。`select`函数在Unix-like操作系统中广泛用于多路复用I/O,允许程序同时监控多个文件描述符(如套接字)的状态,从而实现高效的并发处理...
这个"angularjs中select2使用demo"应该是一个示例项目,展示了如何在AngularJS应用中集成和使用Select2。 首先,让我们了解AngularJS和Select2的基础知识。AngularJS是由Google维护的一个JavaScript框架,用于构建...
Vue 不使用 Select 实现下拉框功能 在本篇文章中,我们将主要介绍 Vue 不使用 Select 实现下拉框功能的方法。在 Vue 中,我们可以使用 Vue Select 组件来实现下拉框功能,但是如果我们不想使用 Select 组件,该如何...