informixselect语句与其子句的详解 1.docx
- 文档编号:28747841
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:23
- 大小:27.35KB
informixselect语句与其子句的详解 1.docx
《informixselect语句与其子句的详解 1.docx》由会员分享,可在线阅读,更多相关《informixselect语句与其子句的详解 1.docx(23页珍藏版)》请在冰豆网上搜索。
informixselect语句与其子句的详解1
SELECT语句与其子句的详解
闲来没事做,整理了一下SELECT语句的一点用法,不过这是SQLSERVER2000下的,整体的语法和informix的SQL语法差不多,仅供参考,对于初学SQL语句的新手来说还是有帮助的,嘿嘿~~~其实我就是新手,以后还请各位大侠多多执教!
!
!
SELECT
从数据库中检索行,并允许从一个或多个表中选择一个或多个行或列。
虽然SELECT语句的完整语法较复杂,但是其主要的子句可归纳如下:
SELECTselect_list
[INTOnew_table]
FROMtable_source
[WHEREsearch_condition]
[GROUPBYgroup_by_expression]
[HAVINGsearch_condition]
[ORDERBYorder_expression[ASC|DESC]]
可以在查询之间使用UNION运算符,以将查询的结果组合成单个结果集。
语法
SELECTstatement:
:
=
[ORDERBY{order_by_expression|column_position[ASC|DESC]}
[,...n] ]
[COMPUTE
{{AVG|COUNT|MAX|MIN|SUM}(expression)}[,...n]
[BYexpression[,...n]]
]
[FOR{BROWSE|XML{RAW|AUTO|EXPLICIT}
[,XMLDATA]
[,ELEMENTS]
[,BINARYbase64]
}
]
[OPTION(
:
=
{
[UNION[ALL]
:
=
SELECT[ALL|DISTINCT]
[{TOPinteger|TOPintegerPERCENT}[WITHTIES]]
[INTOnew_table]
[FROM{
[WHERE
[GROUPBY[ALL]group_by_expression[,...n]
[WITH{CUBE|ROLLUP}]
]
[HAVING
由于SELECT语句的复杂性,下面按子句说明详细的语法元素和参数:
SELECT子句
指定由查询返回的列。
语法
SELECT[ALL|DISTINCT]
[TOPn[PERCENT][WITHTIES]]
:
=
{ *
|{table_name|view_name|table_alias}.*
| {column_name|expression|IDENTITYCOL|ROWGUIDCOL}
[[AS]column_alias]
|column_alias=expression
} [,...n]
参数
ALL
指定在结果集中可以显示重复行。
ALL是默认设置。
DISTINCT
指定在结果集中只能显示唯一行。
为了DISTINCT关键字的用途,空值被认为相等。
TOPn[PERCENT]
指定只从查询结果集中输出前n行。
n是介于0和4294967295之间的整数。
如果还指定了PERCENT,则只从结果集中输出前百分之n行。
当指定时带PERCENT时,n必须是介于0和100之间的整数。
如果查询包含ORDERBY子句,将输出由ORDERBY子句排序的前n行(或前百分之n行)。
如果查询没有ORDERBY子句,行的顺序将任意。
WITHTIES
指定从基本结果集中返回附加的行,这些行包含与出现在TOPn(PERCENT)行最后的ORDERBY列中的值相同的值。
如果指定了ORDERBY子句,则只能指定TOP...WITHTIES。
为结果集选择的列。
选择列表是以逗号分隔的一系列表达式。
*
指定在FROM子句内返回所有表和视图内的所有列。
列按FROM子句所指定的由表或视图返回,并按它们在表或视图中的顺序返回。
table_name|view_name|table_alias.*
将*的作用域限制为指定的表或视图。
column_name
是要返回的列名。
限定column_name以避免二义性引用,当FROM子句中的两个表内有包含重复名的列时会出现这种情况。
例如,Northwind数据库中的Customers和Orders表内都有名为ColumnID的列。
如果在查询中联接这两个表,可以在选择列表中将客户ID指定为Customers.CustomerID。
expression
是列名、常量、函数以及由运算符连接的列名、常量和函数的任意组合,或者是子查询。
IDENTITYCOL
返回标识列。
有关更多信息,请参见IDENTITY(属性)、ALTERTABLE和CREATETABLE。
如果FROM子句中的多个表内有包含IDENTITY属性的列,则必须用特定的表名(如T1.IDENTITYCOL)限定IDENTITYCOL。
ROWGUIDCOL
返回行全局唯一标识列。
如果在FROM子句中有多个表具有ROWGUIDCOL属性,则必须用特定的表名(如T1.ROWGUIDCOL)限定ROWGUIDCOL。
column_alias
是查询结果集内替换列名的可选名。
例如,可以为名为quantity的列指定别名,如"Quantity"或"QuantitytoDate"或"Qty"。
别名还可用于为表达式结果指定名称,例如:
USENorthwind
SELECTAVG(UnitPrice)AS'AveragePrice'
FROM[OrderDetails]
column_alias可用于ORDERBY子句。
然而,不能用于WHERE、GROUPBY或HAVING子句。
如果查询表达式是DECLARECURSOR语句的一部分,则column_alias不能用在FORUPDATE子句中。
INTO子句
创建新表并将结果行从查询插入新表中。
用户若要执行带INTO子句的SELECT语句,必须在目的数据库内具有CREATETABLE权限。
SELECT...INTO不能与COMPUTE子句一起使用。
有关更多信息,请参见事务和显式事务。
通过在WHERE子句中包含FALSE条件,可以使用SELECT...INTO创建没有数据的相同表定义(不同表名)。
语法
[INTOnew_table]
参数
new_table
根据选择列表中的列和WHERE子句选择的行,指定要创建的新表名。
new_table的格式通过对选择列表中的表达式进行取值来确定。
new_table中的列按选择列表指定的顺序创建。
new_table中的每列有与选择列表中的相应表达式相同的名称、数据类型和值。
当选择列表中包含计算列时,新表中的相应列不是计算列。
新列中的值是在执行SELECT...INTO时计算出的。
在此次发布的SQLServer版本中,selectinto/bulkcopy数据库选项对是否可以使用SELECTINTO创建永久表没有影响。
对包括SELECTINTO在内的某些大容量操作的记录量,取决于对数据库有效的恢复模式。
有关更多信息,请参见使用恢复模型。
在以前发布的版本中,如果设置了selectinto/bulkcopy,则可用SELECTINTO创建永久表。
selectinto/bulkcopy用于向后兼容,但在以后的版本中可能不支持该选项。
有关更多信息,请参考"恢复模式"和"向后兼容性"主题以及ALTERDATABASE主题。
FROM子句
指定从其中检索行的表。
需要FROM子句,除非选择列表只包含常量、变量和算术表达式(没有列名)。
有关更多信息,请参见FROM。
语法
[FROM{
:
=
table_name[[AS]table_alias][WITH(
|view_name[[AS]table_alias]
|rowset_function[[AS]table_alias]
|OPENXML
|derived_table[AS]table_alias[(column_alias[,...n])]
|
:
=
|
|
:
=
[INNER|{{LEFT|RIGHT|FULL}[OUTER]}]
[
JOIN
参数
指定用于SELECT语句的表、视图、派生表和联接表。
table_name[[AS]table_alias]
指定表名和可选别名。
view_name[[AS]table_alias]
指定名称、视图和可选别名。
rowset_function[[AS]table_alias]
是行集函数名和可选别名。
有关行集函数列表的更多信息,请参见行集函数。
OPENXML
在XML文档上提供行集视图。
有关更多信息,请参见OPENXML。
WITH(
指定一个或更多表提示。
有关表提示的更多信息,请参见FROM。
derived_table[[AS]table_alias]
是嵌套SELECT语句,可从指定的数据库和表中检索行。
column_alias
替换结果集内列名的可选别名。
是两个或更多表的积的结果集。
例如:
SELECT*
FROMtab1LEFTOUTERJOINtab2ONtab1.c3=tab2.c3
RIGHTOUTERJOINtab3LEFTOUTERJOINtab4
ONtab3.c1=tab4.c1
ONtab2.c3=tab4.c3
对于多个CROSS联接,请使用圆括号来更改联接的自然顺序。
指定联接操作的类型。
INNER
指定返回所有相匹配的行对。
废弃两个表中不匹配的行。
如果未指定联接类型,则这是默认设置。
LEFT[OUTER]
指定除所有由内联接返回的行外,所有来自左表的不符合指定条件的行也包含在结果集内。
来自左表的输出列设置为NULL。
RIGHT[OUTER]
指定除所有由内联接返回的行外,所有来自右表的不符合指定条件的行也包含在结果集内。
来自右表的输出列设置为NULL。
FULL[OUTER]
如果来自左表或右表的某行与选择准则不匹配,则指定在结果集内包含该行,并且将与另一个表对应的输出列设置为NULL。
除此之外,结果集中还包含通常由内联接返回的所有行。
指定联接提示或执行算法。
如果指定了
有关联接提示的更多信息,请参见FROM。
JOIN
表示联接所指定的表或视图。
ON
指定联接所基于的条件。
此条件可指定任何谓词,但通常使用列和比较运算符。
例如:
SELECTProductID,Suppliers.SupplierID
FROMSuppliersJOINProducts
ON(Suppliers.SupplierID=Products.SupplierID)
当条件指定列时,列不必有相同的名称或相同的数据类型。
但是如果数据类型不同,则它们必须是兼容或可由Microsoft?
SQLServer?
进行隐性转换的类型。
如果数据类型不能隐式转换,则条件必须使用CAST函数显式转换数据类型。
有关搜索条件和谓词的更多信息,请参见搜索条件。
CROSSJOIN
指定两个表的矢量积。
返回同样的行,就像要联接的表只列于FROM子句中,并且未指定WHERE子句。
例如,这两个查询返回的结果集都由T1和T2中所有行的完全联接组成:
SELECT*FROMT1,T2
SELECT*FROMT1CROSSJOINT2
WHERE子句
指定用于限制返回的行的搜索条件。
语法
[WHERE
:
=
column_name{*=|=*}column_name
参数
通过使用谓词限制结果集内返回的行。
对搜索条件中可以包含的谓词数量没有限制。
有关搜索条件和谓词的更多信息,请参见搜索条件。
使用不标准的产品专用语法和WHERE子句指定外联接。
*=运算符用于指定左向外联接,=*运算符用于指定右向外联接。
下例指定一个左向外联接,并在结果集内包含Tab1中不满足指定条件的行:
SELECTTab1.name,Tab2.id
FROMTab1,Tab2
WHERETab1.id*=Tab2.id
说明 这种语法具有潜在的二义性解释并且不标准,因此不提倡使用这种语法进行外联接。
而应在FROM子句中指定联接。
可以通过在FROM子句中使用联接运算符,或通过在WHERE子句中使用不标准的*=和=*运算符来指定外联接。
不能在同一语句中同时使用这两种方法。
GROUPBY子句
指定用来放置输出行的组,并且如果SELECT子句
指定GROUPBY时,选择列表中任一非聚合表达式内的所有列都应包含在GROUPBY列表中,或者GROUPBY表达式必须与选择列表表达式完全匹配。
说明 如果未指定ORDERBY子句,则使用GROUPBY子句不按任何特定的顺序返回组。
建议始终使用ORDERBY子句指定具体的数据顺序。
语法
[GROUPBY[ALL]group_by_expression[,...n]
[WITH{CUBE|ROLLUP}]
]
参数
ALL
包含所有组和结果集,甚至包含那些任何行都不满足WHERE子句指定的搜索条件的组和结果集。
如果指定了ALL,将对组中不满足搜索条件的汇总列返回空值。
不能用CUBE或ROLLUP运算符指定ALL。
如果访问远程表的查询中有WHERE子句,则不支持GROUPBYALL操作。
group_by_expression
是对其执行分组的表达式。
group_by_expression也称为分组列。
group_byexpression可以是列或引用列的非聚合表达式。
在选择列表内定义的列的别名不能用于指定分组列。
说明 text、ntext和image类型的列不能用于group_by_expression。
对于不包含CUBE或ROLLUP的GROUPBY子句,group_by_expression的项数受查询所涉及的GROUPBY列的大小、聚合列和聚合值的限制。
该限制从8,060字节的限制开始,对保存中间查询结果所需的中间级工作表有8,060字节的限制。
如果指定了CUBE或ROLLUP,则最多只能有10个分组表达式。
CUBE
指定在结果集内不仅包含由GROUPBY提供的正常行,还包含汇总行。
在结果集内返回每个可能的组和子组组合的GROUPBY
汇总行。
GROUPBY汇总行在结果中显示为NULL,但可用来表示所有值。
使用GROUPING函数确定结果集内的空值是否是GROUPBY汇总值。
结果集内的汇总行数取决于GROUPBY子句内包含的列数。
GROUPBY子句中的每个操作数(列)绑定在分组NULL下,并且分组适用于所有其它操作数(列)。
由于CUBE返回每个可能的组和子组组合,因此不论指定分组列时所使用的是什么顺序,行数都相同。
ROLLUP
指定在结果集内不仅包含由GROUPBY提供的正常行,还包含汇总行。
按层次结构顺序,从组内的最低级别到最高级别汇总组。
组的层次结构取决于指定分组列时所使用的顺序。
更改分组列的顺序会影响在结果集内生成的行数。
重要 使用CUBE或ROLLUP时,不支持区分聚合,如AVG(DISTINCTcolumn_name)、COUNT(DISTINCTcolumn_name)和SUM(DISTINCTcolumn_name)。
如果使用这类聚合,SQLServer将返回错误信息并取消查询。
HAVING子句
指定组或聚合的搜索条件。
HAVING通常与GROUPBY子句一起使用。
如果不使用GROUPBY子句,HAVING的行为与WHERE子句一样。
语法
[HAVING
参数
指定组或聚合应满足的搜索条件。
当HAVING与GROUPBYALL一起使用时,HAVING子句替代ALL。
有关更多信息,请参见搜索条件。
在HAVING子句中不能使用text、image和ntext数据类型。
说明 在SELECT语句中使用HAVING子句不影响CUBE运算符分组结果集和返回汇总聚合行的方式。
UNION运算符
将两个或更多查询的结果组合为单个结果集,该结果集包含联合查询中的所有查询的全部行。
这与使用联接组合两个表中的列不同。
使用UNION组合两个查询的结果集的两个基本规则是:
所有查询中的列数和列的顺序必须相同。
数据类型必须兼容。
语法
{
UNION[ALL]
[UNION[ALL]
[...n]]
参数
是查询规范或查询表达式,用以返回与另一个查询规范或查询表达式所返回的数据组合的数据。
作为UNION运算一部分的列定义可以不相同,但它们必须通过隐性转换实现兼容。
下表说明数据类型与相应(ith)列的选项的比较规则。
ith列的数据类型结果表中ith列的数据类型
非数据兼容类型(数据转换不由Microsoft?
SQLServer?
隐性处理)。
SQLServer返回的错误。
长度为L1和L2的固定长度char。
长度与L1和L2中较长的那个相等的固定长度char。
长度为L1和L2的固定长度binary。
长度与L1和L2中较长的那个相等的固定长度binary。
任一列或两列都是可变长度char。
长度与为ith列指定的最大长度相等的可变长度char。
任一列或两列都是可变长度binary。
长度与为ith列指定的最大长度相等的可变长度binary。
两列都是数字数据类型(如smallint、int、float、money)。
与两列的最大精度相等的数据类型。
例如,如果表A的ith列是int类型,表B的ith列是float类型,则ith列在结果表中的数据类型是float,因为float比int更精确。
两列的描述都指定NOTNULL。
指定NOTNULL。
UNION
指定组合多个结果集并将其作为单个结果集返回。
ALL
在结果中包含所有的行,包括重复行。
如果没有指定,则删除重复行。
ORDERBY子句
指定结果集的排序。
除非同时指定了TOP,否则ORDERBY子句在视图、内嵌函数、派生表和子查询中无效。
语法
[ORDERBY{order_by_expression[ASC|DESC]} [,...n]]
参数
order_by_expression
指定要排序的列。
可以将排序列指定为列名或列的别
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- informixselect语句与其子句的详解 informixselect 语句 与其 子句 详解