`

使用 SELECT

阅读更多

第一章 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是经由联盟成员一致同意而制定的标准。这个标准把每个字符关联到一个整数(数值由065536)。

       Unicode是将字码指标对应到字符的标准语法。由于Unicode主要设计为涵盖世界上所有语言的字符,所以不需要使用不同的字码页(Code Page)来处理不同的字符集。SQL Server 2005支持Unicode Standard 3.2版。

3、过滤数据(WHRE 子句)

       使用WHERE子句查询时,应注意以下事项:

(1)       当数据行的数据类型为charncharvarcharnvarchartextdatetimesmalldatetime等时,请记得前后加上单引号

(2)       当使用SELECT子句查询数据时,应尽量避免在内使用万用字符(*),传回所有数据行。并利用WHERE子句进一步限制查询结果,以确保所得的数据是有用的数据,降低传送过多数据所造成的负荷。

(3)       可以使用单引号()或双引号(“)括住字符串,但在此建议使用单引号括住字符串。当SET QUOTED IDENTIFIER选项设成ON时,双引号表示的是物件,就不允许将字符串括在其中。

3.1 使用万用字符

       LIKE关键字可查询符合指定模式(pattern)的字符串、日期或时间数值。通过规则运算符来包含可供比对的模式。模式包含了所要查询的字符/串,它可以包含四种万用字符的任意组合。

万用字符

意义

任何具有零或多个字符的字符串

-

任何单一字符

[]

指定范围中的任何单一字符(例如[a-f]或集合[abcdef]

[^]

不在指定范围中的任何单一字符(例如[^a-f]或集合[^abcdef]

使用时,请将万用字符与字符串括在单引号中,例如:

1LIKE ‘Mc%’:查询以字母Mc开头的所有字符串,如Mcsadfsad

2LIKE ‘_hery’:查询以字符串hery结尾、并且长度为5个字母的所有字符串,例如ahery

3LIKE ‘[M-Z]ing’:查询以字符串ing结尾,并以MZ之间的任何单一字母开头的字符串,如Ring

4LIKE ‘M[^C]%’:查询以字母M开头,但并未以字母C作为第二个字母的所有字符串,如Macsfdasf

       若万用字符没有与LIKE关键字搭配使用,则它们将被误解成常数,而非模式(pattern),也就说,它们只代表本身的数值。

3.2 使用逻辑运算符

       逻辑运算符有ANDORNOTANDOR用在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 NULLIS NOT NULL。若要直观地以=NULL<>NULL来判断,可以更改连接设定ANSI_NULLSOFF,否则与=NULL<>NULL比较的结果为UNKNOWN,无法正确地判断。但建议使用默认的ANSI_NULLSON,并用IS运算符来判断,因为这是处理NULL的惯例。

4、集合数据与分组

       在一般的情况下,集合函数只会传回一个计算之后的值。使用集合函数的优点是在server端计算统计,等到数据统计出来之后,SQL Server只将结果传回给使用者,而不传回整个细节的结果集。

集合函数

语法定义

使用时限制

MINMAX

MIN[ALL|DISTINCT]运算式

MAX[ALL|DISTINCT]运算式

运算式不可以使用于bit数据类型

会忽略任何Null值,如果是字元数据行,MAX会在定序顺序中寻找最高值,而MIN反之。DISTINCTMAXMIN没意义,只适用于SQL-92相容性。

SUMAVG

AVG[ALL|DISTINCT]运算式

SUM[ALL|DISTINCT]运算式

只能使用在以下数据类型:Intsmallinttinyintdecimalnumericfloatrealmoneysmallmoney

COUNT

COUNT[ALL|DISTINCT]运算式

使用COUNT*)这个函数时要特别小心如果栏位值含有NULL的影响。几乎可以使用在任何数据类型,包括textntextimage

4.1 分组数据与HAVING指令

Group By 子句可将多个数据列结合成单一的数据列,并使用集合函数计算分组后的结果。当指定GROUP BY时,GROUP BY 清单应该包括 SELECT 子句栏位清单中,任何非经集合运算的数据行,否则,GROUP BY 运算式必须完全符合运取清单。

   使用Group By子句时,必须注意以下几点:

1SQL 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子句分组数据时,可以搭配ROLLUPCUBE运算符一起使用,以得到完整的统计信息。

4.2.1 使用GROUP BY指令与ROLLUP运算符

       通常在GROUP BY子句中使用两个以上的栏位搭配集合函数运算时,可以利用ROLLUP运算符整理出进一步的统计信息。

       GROUP BY子句之后加上CUBEROLLUP运算符时,必须注意一下几点(1SQL Server分组的规则为“由左至右”,分完组才会进行统计计算;(2GROUP 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回射程序

    本文将深入探讨“使用select的UDP和TCP回射程序”,这是《UNIX网络编程》一书中第8章的一个实践案例。该程序旨在展示如何通过select系统调用来同时管理多个网络连接,无论是基于用户数据报协议(UDP)还是传输控制...

    socket编程 使用select与线程池

    在本主题中,我们将深入探讨如何使用`select`机制和线程池来构建高效的TCP、UDP服务器,以及客户端的实现。 首先,TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,而UDP(用户数据报...

    使用select2实现下拉列表动态模糊查询

    在你的项目中使用Select2,首先需要下载或通过CDN引入所需文件。在这个压缩包中,我们有`select2.min.css`(样式文件)和`select2.min.js`(JavaScript 文件)。将这两个文件放入你的项目目录,并在HTML文件中引用...

    数据库实验2的实验报告1. 在 studentsdb 数据库中使用 SELECT 语句进行基本查询。 (1)在 student

    实验报告主要围绕数据库查询展开,涉及SQL语言中的SELECT语句及其相关子句的使用,包括基本查询、条件查询、GROUP BY、ORDER BY、UNION、嵌套查询和连接查询等。以下是具体的知识点详解: 1. **SELECT基本查询**: ...

    linux使用select 编写简单的计算器运算程序

    以下将详细介绍如何使用`select`函数实现这个功能。 首先,了解`select`的基本结构。`select`函数接收三个文件描述符集作为参数:`readfds`、`writefds`和`exceptfds`,以及一个`timeout`结构体。当指定的文件描述...

    vxworks使用select接收串口数据userAppInit.c

    可以复制我的文件的代码到你自己的工程中,也可以使用我的文件替换掉你的image工程中的userAppInit.c文件。该代码实现了使用select监测串口是否接收到了数据,串口收发都已调通。

    Select 语句的基本使用

    Select 语句的基本使用 Select 语句是 Transact-SQL 中最基本也是最重要的一种查询语句,用于从数据库中检索数据。下面将详细介绍 Select 语句的基本使用。 一、 简单查询 简单的 Transact-SQL 查询只包括选择...

    下拉框带模糊查询引入select2组件.zip

    同时,"网络有模板,喜欢请点赞"提示我们,网上可能还有其他开发者分享的关于如何使用Select2的示例代码或模板,可以作为参考和学习。 标签"java js 下拉框"表明了这个话题涉及到的技术栈,其中"java"可能是用来...

    使用select实现的UDP/TCP组合服务器

    《使用select实现的UDP/TCP组合服务器》 网络编程中,服务器通常被设计为只处理一种类型的通信协议,如TCP或UDP。然而,在某些场景下,服务器可能需要同时支持这两种协议,以满足不同类型的客户端需求。本文将介绍...

    用SELECT… INTO OUTFILE语句导出MySQL数据的教程

    以下是关于使用SELECT… INTO OUTFILE导出MySQL数据的详细解释: 1. **基本语法**: SELECT… INTO OUTFILE语句的基本形式是: ```sql SELECT column1, column2, ... INTO OUTFILE 'filename' [FIELDS ...

    使用select命令.sh

    使用select命令

    深入理解socket中的select模型

    例如,可以使用select来检查网络数据是否到达,如果没有数据到达,则select会阻塞程序的执行,直到有数据可读或超时发生。在socket编程中,recv()函数经常被用到,当select()检测到网络套接字上有数据可读时,就可以...

    PHP使用Select模式实现WebSocket通讯 .zip

    使用select模型实现WebSocket实现IM功能,项目中带有测试的网页客户端。具体可查看 https://blog.csdn.net/qq_34950682/article/details/105148477

    tcp测试客户端代码,实现select模式下客户端tcp连接器

    通过阅读和理解这段代码,开发者可以学习到如何在C++中构建一个功能完备的TCP客户端,并使用select模型来实现高效的并发连接。 总结来说,这个TCP测试客户端代码是学习网络编程和C++多路复用I/O的一个好例子。通过...

    libevent for qt网络模块,直接替换qt的select模型,支持epoll,select,pool.使用非常简单,无需修改以前的代码结构

    最近在开发im服务器 需要大并发链接 QT默认的是使用select模型的 这种轮询方式非常慢 在高并发连接 我们需要epoll才能发挥linux服务器的性能 而且使用简单 整个服务端代码架构无需修改 直接可以使用 只要在 main...

    《unix网络编程》使用select的客户服务器端例程

    《unix网络编程》第六章,使用select的客户服务器程序

    select美化HTML的select标签的原始样式,并且不影响原始select的事件方法调用

    为了解决这个问题,我们可以创建一个自定义的组件,如`lzy-custom-select`,这个组件将`&lt;select&gt;`元素包装在一个更可控的容器中,然后使用JavaScript来模拟原生的下拉行为。 `lzy-custom-select`可能的实现思路是:...

    一个使用select实现的服务端包括数据包控制

    本项目涉及的主题是一个使用`select`函数实现的服务端,重点在于数据包的控制。`select`函数在Unix-like操作系统中广泛用于多路复用I/O,允许程序同时监控多个文件描述符(如套接字)的状态,从而实现高效的并发处理...

    angularjs中select2使用 demo

    这个"angularjs中select2使用demo"应该是一个示例项目,展示了如何在AngularJS应用中集成和使用Select2。 首先,让我们了解AngularJS和Select2的基础知识。AngularJS是由Google维护的一个JavaScript框架,用于构建...

    vue 不使用select实现下拉框功能(推荐)

    Vue 不使用 Select 实现下拉框功能 在本篇文章中,我们将主要介绍 Vue 不使用 Select 实现下拉框功能的方法。在 Vue 中,我们可以使用 Vue Select 组件来实现下拉框功能,但是如果我们不想使用 Select 组件,该如何...

Global site tag (gtag.js) - Google Analytics