首页 理论教育数据库查询语法-数据库技术与应用教程

数据库查询语法-数据库技术与应用教程

【摘要】:SQL的数据查询语句中包括SELECT,FROM,WHERE,GROUP BY和ORDER BY子句。SELECT语句具有数据查询、统计、分组和排序的功能,其语句表达能力非常强大。查询操作需要的数据源指基本表组,表间用“,”分割。当SELECT子句后的目标列中有统计函数,如果查询语句中有分组子句,则统计为分组统计,否则为对整个结果集统计。交查询操作,操作结果为取<查询1>和<查询2>共有的元组。

SQL的数据查询语句中包括SELECT,FROM,WHERE,GROUP BY和ORDER BY子句。SELECT语句具有数据查询、统计、分组和排序的功能,其语句表达能力非常强大。

1.SELECT语句的语法

SELECT语句的语法格式为:

SELECT<目标列组>

FROM<数据源>

[WHERE<元组选择条件>]

[GROUP BY<分列组>[HAVⅠNG<组选择条件>]]

[ORDER BY<排序列1><排序要求1>[,……n];

查询语句的功能是从FROM子句指定的数据源(基本表或视图组)中,选择满足元组选择条件的元组数据,并对它们进行分组、统计、排序和投影,形成查询结果集。

在查询语句中共有5种子句,其中SEL ECT和FROM语句为必选子句,而WHERE、GROUP BY和ORGER BY子句为任选子句。

(1)SELECT子句

SELECT子句用于指明查询结果集的目标列。目标列可以是直接从数据源中投影得到的字段、与字段相关的表达式或数据统计的函数表达式,目标列还可以是常量。如果目标列中使用了两个基本表(或视图)中相同的列名,则要在列名前加表名限定,即使用“<表名>.<列名>”表示。

(2)FROM子句

FROM子句用于指明查询的数据源。查询操作需要的数据源指基本表(或视图表)组,表间用“,”分割。如果查询使用的基本表或视图不在当前数据库中,还需要在表或视图前加上数据库名加以说明,即使用“<数据库名>.<表名>”的形式表示。如果在查询中需要一表多用,则每种使用都需要一个表的别名标识,并在各自使用中用不同的表别名表示。

定义表别名的格式为“<表名>.<别名>”。

(3)WHERE子句

WHERE子句通过条件表达式描述关系中元组的选择条件。DBMS处理语句时,按元组为单位,逐个考察每个元组是否满足条件,将不满足条件的元组筛选掉。

(4)GROUP BY子句

GROUP BY子句的作用是按分组列的值对结果集分组。分组可以使同组的元组集中在一起,也使数据能够分组统计。当SELECT子句后的目标列中有统计函数,如果查询语句中有分组子句,则统计为分组统计,否则为对整个结果集统计。GROUP BY子句后可以带上HAVⅠNG子句表达组选择条件,组选择条件为带有函数的条件表达式,它决定着整个组记录的取舍条件。

(5)ORDER BY子句

ORDER BY子句的作用是对结果集进行排序。查询结果集可以按多个排序列进行排序,每个排序列后都可以跟一个排序要求:当排序要求为ASC时,元组按排序列值的升序排序;排序要求为DESC时,结果集的元组按排序列值的降序排列。

2.SELECT语句的操作符

SELECT语句中使用的操作符包括算术操作符、比较操作符、逻辑操作符、组合查询操作符和在字段中出现的其他操作符。下面介绍这5类操作符。(www.chuimin.cn)

(1)算术操作符

算术操作符在SQL语句中表达数学运算操作。SQL的数学运算操作符只有4种,它们是:+(加好)、-(减号)、×(乘号)和/(除号)。

(2)比较操作符

比较操作符用于测试两个数据是否相等、不相等、小于或大于某个值。SQL中的比较操作符包括:=(等于)、>(大于)、<(小于)、<=(小于等于)、>=(大于等于)、!=或<>(不等于)、!>(不大于)和!<(不小于),共9种操作符。

(3)逻辑操作符(见表4-2)

表4—2 SQL的逻辑操作符

可以看出,SQL的逻辑操作符种类比较多,功能也很强大。在这些逻辑操作符中,有些是在其他计算机语言也曾遇到过的,比如NOT、AND和OR,其语义和使用方法读者应比较清楚。表中的一些逻辑操作符,例如ⅠN、ANY、LⅠKE等,读者可能不太熟悉,后面的例题中会对它们做更详细和更深入的介绍。

(4)组合查询操作符

SQL的组合查询操作符是针对传统关系运算的操作符,它包括UNⅠON(并查询)、MⅠNUS(差查询)和ⅠNTERSECT(交查询),共3种。组合查询操作符的使用格式为:

<查询1><组合操作符><查询2>

①UNⅠON操作符。并查询操作,操作结果为将<查询1>和<查询2>的结果合并,即取(查询1>和<查询2>的元组,并在结果集中去掉重复行。

②MⅠNUS操作符。差查询操作,操作结果为取<查询1>得到的元组,而<查询2>没有的元组。

③ⅠNTERSECT操作符。交查询操作,操作结果为取<查询1>和<查询2>共有的元组。

(5)其他SQL操作符

其他SQL操作符是针对SELECT子句中的字段表设计的,它用于简写结果集的字段表和对字段值的限制说明。其他SQL操作符包括*、ALL和DⅠSTⅠNCT 3种。

①*操作符。*为字段组的省略写法,说明取全部字段或表中的全部字段。使用格式为:

*或<表名.*

②ALL操作符。全部操作符:ALL说明在查询结果中保留重复值,如果查询中有统计函数,ALL要求计算重复值。ALL的使用格式为:

ALL<字段>或ALL<字段组>

③DⅠSTⅠNCT操作符。去掉重复值操作DⅠSTⅠNCT和ALL相反,它说明在查询结果集中去掉重复值,或在统计函数中不计重复值。DⅠSTⅠNCT的使用格式为:

DⅠSTⅠNCT<字段>或DⅠSTⅠNCT<字段组>