第19章SELECT简单查询.docx

上传人:b****6 文档编号:13686092 上传时间:2023-06-16 格式:DOCX 页数:26 大小:752.25KB
下载 相关 举报
第19章SELECT简单查询.docx_第1页
第1页 / 共26页
第19章SELECT简单查询.docx_第2页
第2页 / 共26页
第19章SELECT简单查询.docx_第3页
第3页 / 共26页
第19章SELECT简单查询.docx_第4页
第4页 / 共26页
第19章SELECT简单查询.docx_第5页
第5页 / 共26页
第19章SELECT简单查询.docx_第6页
第6页 / 共26页
第19章SELECT简单查询.docx_第7页
第7页 / 共26页
第19章SELECT简单查询.docx_第8页
第8页 / 共26页
第19章SELECT简单查询.docx_第9页
第9页 / 共26页
第19章SELECT简单查询.docx_第10页
第10页 / 共26页
第19章SELECT简单查询.docx_第11页
第11页 / 共26页
第19章SELECT简单查询.docx_第12页
第12页 / 共26页
第19章SELECT简单查询.docx_第13页
第13页 / 共26页
第19章SELECT简单查询.docx_第14页
第14页 / 共26页
第19章SELECT简单查询.docx_第15页
第15页 / 共26页
第19章SELECT简单查询.docx_第16页
第16页 / 共26页
第19章SELECT简单查询.docx_第17页
第17页 / 共26页
第19章SELECT简单查询.docx_第18页
第18页 / 共26页
第19章SELECT简单查询.docx_第19页
第19页 / 共26页
第19章SELECT简单查询.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第19章SELECT简单查询.docx

《第19章SELECT简单查询.docx》由会员分享,可在线阅读,更多相关《第19章SELECT简单查询.docx(26页珍藏版)》请在冰点文库上搜索。

第19章SELECT简单查询.docx

第19章SELECT简单查询

第19章SELECT简单查询

SELECT语句是数据库最基本的语句之一,同时也是SQL编程技术最常用的语句。

使用SELECT语句不但可以在数据库中精确地查找某条信息,而且还可以模糊地查找带有某项特征的多条数据。

这在很大程度上方便了用户查找数据信息。

本节将主要介绍SELECT语句的语法基础,并通过实例演示SELECT语句的使用方法。

19.1SELECT基本语法

SELECT语句是一个查询表达式,包括SELECT、FROM、WHERE、GROUPBY和ORDERBY子句。

SELECT语句具有数据查询、统计、分组和排序的功能,可以精确地对数据库进行查找,也可以进行模糊查询。

SELECT语句有自己的语法结构,使用该语句时一定要严格执行其语法结构。

加之其子句有很多,这里只列举它的主要子句格式,如下所示:

SELECT[ALL|DISTINCT]select_list

[INTOnew_table]

FROMtable_source

[WHEREsearch_conditions]

[GROUPBYgroup_by_expression]

[HAVINGsearch_conditions]

[ORDERBYorder_expression[ASC|DESC]]

上面格式中,SELECT查询语句中共有5个子句,其中SELECT和FROM语句为必选子句,而WHERE、GROUPBY和ORDERBY子句为可选子句。

[]内的部分为可选项且大写内容为关键字。

下面对各种参数进行详细说明。

●SELECT子句用来指定由查询返回的列,并且各列在SELECT子句中的顺序决定了它们在结果表中的顺序。

●ALL|DISTINCT用来标识在查询结果集中对相同行的处理方式。

关键字ALL表示返回查询结果集的所有行,其中包括重复行;关键字DISTINCT表示若结果集中有相同的数据行则只保留显示一行,默认值为ALL。

●select_list用来指定要显示的目标列,若要显示多个目标列,则各列名之间用半角逗号隔开;若要返回所有列,则可以用“*”表示。

●INTOnew_table用来创建一个新的数据表,new_table为新表的名称,表的数据为查询的结果集。

●FROMtable_source子句用来指定数据源,table_source为数据源表名称。

●WHEREsearch_conditions子句用来指定限定返回的行的搜索条件,search_conditions为条件表达式。

●GROUPBYgroup_by_expression子句用来指定查询结果的分组条件,即归纳信息类型,group_by_expression为分组所依据的表达式。

●HAVINGsearch_conditions子句用来指定组或聚合的搜索条件,search_conditions为分组后的条件表达式。

●ORDERBYorder_expression[ASC|DESC]子句用来指定结果集的排序方式,ASC表示结果集以升序排列,DESC表示结果集以降序排列,默认情况下结果集以ASC升序排列。

在使用SELECT语句时,还要遵守以下两条规则:

1.SELECT语法中子句的测试顺序

SELECT语句中的FROM、WHERE、GROUPBY和HAVING等子句称为表表达式,它们在执行SELECT语句时首先被测试,并且每个子句按照某种次序被依次测试。

了解了这种测试顺序,在用户创建较复杂的SELECT语句时非常有用。

测试表示SELECT语句在系统中的执行,其结果是一个虚拟表,用于以后的测试。

具体地说,前一个子句的测试结果将用于下一个子句,直到表表达式的每个子句都被测试完毕。

SELECT语句中首先要测试的子句是FROM子句。

如果指定了WHERE子句,那么FROM子句的测试结果将用于WHERE子句。

如果没有WHERE子句,那么FROM子句的测试将用于下一个指定的子句。

在表达式中的最后一个子句被测试完之后,此时的测试结果才用于SELECT子句,而SELECT子句的测试结果用于ORDERBY子句。

总的来说,SELECT语句的测试顺序为:

FROM子句

WHERE子句(可选)

GROUPBY子句(可选)

HAVING子句(可选)

SELECT子句

ORDERBY子句(可选)

了解该测试顺序对于提高查询效率有很大意义,这种效率在简单的查询语句中表现的并不明显。

但是一旦用户使用了复杂的查询语句,尤其是在处理连接和子查询时,不了解SELECT语句的测试顺序将严重影响SELECT语句的查询效率。

2.引用对象名称约定

若使用SELECT语句查询时,所引用对象的数据库不是当前数据库或引用的列名不明确时,为了保证查询的正确性,在引用数据表或列时需要使用数据库或数据表名来限定数据表或列的名称。

●如果要引用某数据表名称,而当前数据库不是所引用对象的数据库,就需要使用USE语句将当前数据库设置为该表所在的数据库。

例如,当前数据库为“网店场管理系统”,而现在要引用“工资管理系统”数据库中的“员工信息”数据表,这时需要在前面加上“USE工资管理系统”语句。

●如果当前使用的列名不明确是哪个数据表中的列,就需要通过给该列指定表名来确定其数据源。

例如,在同一数据表中的多个表中都存在着名为“员工编号”的列,当进行多表操作时,如果只使用“员工编号”指定选择条件,就会出现歧义,所以需要通过表名来明确所要指定的“员工编号”列,即使用“员工信息.员工编号和工资信息.员工编号”表示。

19.2使用SELECT语句

前面已经详细介绍了SELECT及其子句的语法格式,本节将主要列举实例,单独介绍SELECT语句的使用方法而并不涉及它的各个子句。

关于其子句的使用方法及其特点将在后面的章节中详细介绍。

1.使用SELECT获取表中所有信息

SELECT语句可以返回表中所有的内容,并按照表中的顺序与格式进行排列,其语法格式为:

SELECT*

FROMtable_list

其中值得注意的是“*”,它表示源表中所有的信息,而table_list则表示查找数据信息的源表。

由于它并不改变源表中的信息格式,因此使用该语句得到的查询结果可以看到源表的结构。

例如,查询“网店购物系统”数据库中“商品信息”表中的所有列,在数据库引擎查询窗口中输入SELECT语句:

USE网店购物系统

SELECT*

FROM商品信息

执行上面命令后,可以在SQLServer2008窗口中看到如图5-1所示的结果。

图5-1查询表中的所有列

2.使用SELECT获取表中若干列

使用SELECT还可以获取表中指定的一列或者几列数据。

返回结果中列的排列顺序为用户查询语句中指定的顺序,而各列中的数据顺则是源表的排列序列。

使用SELECT获取表中若干列的语法如下所示:

SELECTcolumn1,column2,column3

FROMtable_list

上面信息中column表中源表中某一列,如果需要查询列数较多,各列之间应使用“,”符号分隔。

例如同样在“商品信息”表中,查询“商品名称”、“商品价格”和“库存数量”三列数据,可以使用下面语句:

USE网店购物系统

SELECT商品名称,商品价格,库存数量FROM商品信息

执行完该语句后,结果如图5-2所示。

图5-2查询多列的结果

在获取表中某些列时,在返回结果中用户可以为这些列重命名,这种操作并不改变数据库中表的列名,只显示在返回结果中。

为列重命名的语法格式为:

SELECTcolumn1ASName1,

column2ASName2,

column3ASName3

FROMtable_list

其中ASName为重命名过程,上面格式中将column1命名为Name1.例如将“商品名称”、“商品价格”和“库存数量”三列重命名为“货物名称”、“销售价格”和“剩余数量”,使用如下的语句。

USE网店购物系统

SELECT商品名称AS货物名称,商品价格AS销售价格,库存数量AS剩余数量

FROM商品信息

执行语句后,可以得到如图5-3所示的结果。

图5-3对列名进行重命名

3.使用SELECT获取相异行

在数据库中数据难免会出现重复行的现象,例如“网店购物系统”数据库中“注册会员”表的“会员地址”列记录了注册会员所在的地区或城市,而有些注册会员生活在同一个城市。

如果用户希望在查询返回结果删除重复行,可以在SELECT子句中使用DISTINCT关键字。

首先使用下面的语句查看“网店购物系统”数据库中“注册会员”表“会员地址”列中的信息,查询语句如下所示:

USE网店购物系统

SELECT会员地址FROM注册会员

执行语句后,得到如图5-4所示的结果。

图5-4获取单列信息

此时,用户可以使用DISTINCT关键字重新获得一列值,从而去除了相同的行,语句如下所示。

USE网店购物系统

SELECTDISTINCT会员地址FROM注册会员

执行语句后,得到如图5-5所示的结果。

图5-5获取相异行

4.返回若干行

前面介绍的几种方法可以分别获得表的全部信息或单独获取某个列,使用SELECT还可以指定表中返回的行数,使用方法如下所示。

SELECT[TOPn][*|column]

FROMtable

TOPn用于指定查询结果返回的行数。

该返回值有个特点:

其返回结果一定是返回表中从上往下的n行信息。

TOPn与“*”连用表示返回该表中所有列的前n条信息,而与column连用表示返回某column列的前n条信息。

例如返回“注册会员”表中“会员地址”列的前10条信息,可以使用下面的语句:

USE网店购物系统

SELECTTOP10会员地址

FROM注册会员

执行该语句后,可以得到如图5-6所示的结果。

图5-6获取前10行的信息

19.3使用From子句

FROM子句是SELECT语句中必不可少的子句,该语句用于指定要读取的数据所在的一个表或几个表的名称,使用FROM子句表示要输出信息的来源。

FROM子句的基本语法格式如下所示:

FROMtable_source

其中,table_source指定要在Transact-SQL语句中使用的表、视图或派生表源(有无别名均可)。

虽然语句中可用的表源个数的限值根据可用内存和查询中其他表达式的复杂性而有所不同,但一个语句中最多可使用256个表源。

单个查询可能不支持最多有256个表源。

可将table变量指定为表源。

如果查询中引用了许多表,查询性能会受到影响。

编译和优化时间也受到其他因素的影响。

这些因素包括:

每个是否有索引和索引视图,以及SELECT语句中的大小。

表源在FROM关键字后的顺序不影响返回的结果集。

如果FROM子句中出现重复的名称,SQLServer会返回错误。

在指定table_source表的同时也可以使用AS关键字给该表定义一个别名,别名可带来使用上的方便,也可用于区分自联接或子查询中的表或视图。

别名往往是一个缩短了的表名,用于在联接中引用表的特定列。

如果联接中的多个表中存在相同的列名,SQLServer要求使用表名、视图名或别名来限定列名。

如果定义了别名则不能使用表名。

下面来对“网店购物系统”数据库中的“注册会员”表进行简单查询,并对“注册会员”表定义别名为“会员信息”。

具体查询语句如下所示:

USE网店购物系统

SELECT*FROM注册会员AS会员信息

执行该语句查询,得到结果如图5-7所示。

图5-7查询结果

19.4使用WHERE子句

在SQLServer数据库中查询数据时,有时需要定义严格的查询条件,只查询所需要的数据,而并非是数据表中的所有数据,那么就可以使用SELECT语句中的WHERE子句来实现。

它类似一个筛选器,通过用户定义的查询条件,来保留从FROM子句中返回并满足条件的数据。

WHERE子句被用于选取需要检索的数据行,灵活地使用WHERE子句能够指定许多不同的查询条件,以实现更精确的查询,如精确查询数据库中某条语句的某项数据值或在WHERE子句中使用表达式。

在SELECT查询语句中,使用WHERE子句时一般语法结构为:

SELECTconditionFROMtableWHEREsearchcondition

其中,search_conditions为用户选取所需查询的数据行的条件,即查询返回的行记录的满足条件。

对于用户所需要的所有行,search_conditions条件为true;而对于其他行,search_conditions条件为false或者未知。

WHERE子句使用灵活,searchcondition有多种使用方式,表5-1列出了WHERE子句中可以使用的条件。

表5-1WHERE子句使用的条件

类别

运算符

说明

比较运算符

=、>、<、>=、<=、<>

比较两个表达式

逻辑运算符

AND、OR、NOT

组合两个表达式的运算结果或取反

范围运算符

BETWEEN、NOTBETWEEN

搜索值是否在范围内

列表运算符

IN、NOTIN

查询值是否属于列表值之一

字符匹配符

LIKE、NOTLIKE

字符串是否匹配

未知值

ISNULL、ISNOTNULL

查询值是否为NULL

针对表5-1列举的查询条件,下面将详细介绍他们在WHERE子句中的使用方法及其功能。

1.比较运算符

WHERE子句的比较运算符主要有=、<、>、>=、<=、<>和!

=,分别表示等于、小于、大于、大于等于、小于等于、不等于(<>和!

=都表示不等于),使用他们对查询条件进行限定。

下面通过几个实例,详细介绍这些比较运算符的使用方法。

●等于“=”运算符

在“网店购物系统”数据库“商品信息”表中查询商品编号为45104017的“商品名称”、“商品价格”以及“库存数量”,此时,用户可以使用下面的语句:

USE网店购物系统

SELECT商品名称,商品价格,库存数量FROM商品信息

WHERE商品编号='45104017'

上面语句中使用“商品编号='45104017'”指定查询条件,且该条件中“=”后面的内容使用单引号括起来。

执行该语句后,得到结果如图5-8所示。

图5-8使用等于运算符指定查询条件

●使用小于“<”运算符

小于运算符使用方法和注意事项与等于运算符基本相同,使用小于运算符可以指定查询的某个范围,例如查询“商品信息”表中“商品价格”小于300元的“商品编号”、“商品名称”以及“库存数量”,使用下面语句:

USE网店购物系统

SELECT商品名称,商品价格,库存数量FROM商品信息

WHERE商品价格<'300'

执行该语句后,得到结果如图5-9所示。

图5-9使用小于运算符指定查询条件

●使用不等于运算符

比较运算符中!

=和<>都表示不等于,例如查询“商品信息”表中“商品价格”不等于299元的“商品编号”“商品名称”以及“商品价格”,使用下面语句:

USE网店购物系统

SELECT商品编号,商品名称,商品价格FROM商品信息

WHERE商品价格!

<'299'

执行该语句,得到的结果如图5-10所示。

图5-10使用不等于运算符指定查询条件

上面使用!

=符号,其中!

也是一种运算符,如!

<表示不小于(大于等于),而!

>表示不大于(小于等于)。

2.逻辑运算符

有时,在执行查询任务时,仅仅指定一个查询条件不能够满足用户需求,此时需要指定多个条件来限制查询,那么就要使用逻辑运算符将多个查询条件连接起来,同时指定多个条件进行查询。

WHERE子句中可以使用AND、OR和NOT这三个逻辑运算符,表5-2列举了它们的作用与使用方法。

表5-2逻辑运算符的功能

运算符

功能

示例

AND

在使用AND连接所有条件中,都为true时才会返回查询结果。

Express1ANDExpress2

OR

在使用OR连接的所有条件中,只要其中有一个条件满足就返回查询结果。

Express1ORExpress2

NOT

取反,条件不成立时返回查询结果

NOTExpress,Express不成立时返回结果。

这三个逻辑运算符可以混合使用,在WHERE子句中使用逻辑运算符来限定查询条件的语法格式为:

WHERENOTexpression|expression1logical_operatorexpression2

其中,logical_operator表示逻辑运算符AND和OR中的任意一个。

如果在WHERE子句中使用NOT运算符,则将NOT放在表达式的前面。

例如,在“网店购物系统”数据库中,查询“商品信息”表中商品价格>=300,且商品价格<500的“商品编号”、“商品名称”以及“库存数量”,使用下面语句:

USE网店购物系统

SELECT商品编号,商品名称,库存数量FROM商品信息

WHERE商品价格>=300AND商品价格<500

上面语句中使用了AND连接两个条件,当两个条件都成立时,则可以得到如图5-11所示的结果。

图5-11使用AND运算符

如果使用NOT和OR运算符,查询商品价格>=300,而库存数量<100时,可以使用下面的语句:

USE网店购物系统

SELECT商品编号,商品名称,库存数量FROM商品信息

WHERENOT(商品价格>=300OR库存数量<100)

默认情况下,NOT只对紧跟着它后面的那个条件取反,因此使用NOT运算符时,如果连接多个条件同时取反,需要将这多个条件用括号括起来。

执行上面的语句,得到的结果如图5-12所示。

图5-12使用NOT和OR运算符

NOT运算符使用很灵活,在WHERE子句可以与多种条件共用,例如NOTLIKE、NOTBETWEEN、ISNOTNULL等。

当NOT与AND或OR结合使用时,具有如下规则:

NOT(AANDB)=(NOTA)OR(NOTB)

NOT(AORB)=(NOTA)AND(NOTB)

NOT(NOTA)=A

根据该规则,可以将上面实例中的语句更改为如下形式,执行语句,同样可以得到5-12所示的结果。

USE网店购物系统

SELECT商品编号,商品名称,库存数量FROM商品信息

WHERE(NOT商品价格>=300)AND(NOT库存数量<100)

在使用AND和OR两个逻辑运算符时,它们只对紧挨着它的两个条件有限定作用,如果它们需要连接一组条件时,需要将这一组条件用括号括起来。

例如下面的语句:

USE网店购物系统

SELECT商品编号,商品名称,商品价格FROM商品信息

WHERE库存数量=100AND

(商品价格>250OR商品价格<300)

语句中使用AND连接一组条件,该组条件使用了括号,执行该语句后,得到的结果如图5-13所示。

图5-13执行一组条件后的结果

3.使用IN条件

在SQLServer数据库中,执行查询操作时,会遇到查询某表达式的取值属于某一列表之一的数据,虽然可以结合使用比较运算符和逻辑运算符来满足查询条件,但是这样编写SELECT语句会使SELECT语句的直观性下降。

使用IN或NOTIN关键字限定查询条件,更能直观地查询表达式是否在列表值中,也可作为查询特殊信息集合的方法。

使用IN关键字来限定查询条件的基本语法格式为:

WHEREexpression[NOT]INvalue_list

上述语句中NOT为可选值,而value_list表示列表值,当值不止一个时需要将这些值用括号括起来,各列表值之间使用逗号隔开。

例如在“商品信息”表中查询“商品编号”为100000000484449、100000000501662、100000000305779、100000000538694的“商品名称”、“商品价格”和“库存数量”,可以使用下面语句:

USE网店购物系统

SELECT商品名称,商品价格,库存数量FROM商品信息

WHERE商品编号

IN('100000000484449','100000000501662','100000000305779','100000000538694')

上面语句中

('100000000484449','100000000501662','100000000305779','100000000538694')定义了一个列表值,查询的内容为“商品编号”属于列表值中的内容。

执行语句,得到结果如图5-14所示。

图5-14使用IN条件

从执行语句和返回结果中可以看到,使用IN可以返回一组特定的结果,上面的实例也可以使用逻辑运算符写成下面的形式:

USE网店购物系统

SELECT商品名称,商品价格,库存数量FROM商品信息

WHERE

商品编号='100000000484449'OR

商品编号='100000000501662'OR

商品编号='100000000305779'OR

商品编号='100000000538694'

通过比较两种写法可以看出,在这种情况下使用逻辑运算符明显比较复杂,SELECT也比较长。

因此选用合适的条件进行SELECT查询,能提高语句的可读性并能提高执行效率。

使用IN条件时还应注意,在列表值中各值必须具有相同的数据类型。

另外,列表值中各项不能包含NULL值。

同样,在使用NOTIN时也应该注意这些,例如使用下面的语句查询不属于列表值的内容:

USE网店购物系统

SELECT商品名称,商品价格,库存数量FROM商品信息

WHERE商品编号

NOTIN('100000000484449','100000000501662','100000000305779','100000000538694')

上面语句表示查询返回结果排除了列表值中的内容,可以得到如图5-15所示的结果。

图5-15使用NOTIN条件

4.使用BETWEEN条件

在WHERE子句中使用BETWEEN关键字查找在某一范围内的数据,也可以使用NOBETWEEN关键字查找不在某一范围内的数据。

使用BETWEEN关键字来限定查询条件的语法格式如下所示:

WHEREexpression[NOT]BETWEENvalue1ANDvalue2

其中NOT为可选项,value1表示范围的下限,value2表示范围的上限。

注意value1必须不大于value2,绝对不允许value1大于value2。

例如,在“商品信息”表中查询商品价格在200与300之间商品的“商品编号”、“商品名称”“商品价格”和“库存数量”,可以使用下面语句:

USE网店购物系统

SELECT商品编号,商品名称,商品价格,库存数量FROM商品信息

WHERE商品价格BETWEEN'200'AND'300'

上面的语句中,通过在WHERE子句中使用BETWEEN关键字查询了“商品价格”在200-300之间的所有数据。

执行语句后,得到如图5-16所示的结果。

图5-16使用BETWEEN条件

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2