SQLoracle.docx

上传人:b****3 文档编号:2851330 上传时间:2022-11-15 格式:DOCX 页数:149 大小:809.44KB
下载 相关 举报
SQLoracle.docx_第1页
第1页 / 共149页
SQLoracle.docx_第2页
第2页 / 共149页
SQLoracle.docx_第3页
第3页 / 共149页
SQLoracle.docx_第4页
第4页 / 共149页
SQLoracle.docx_第5页
第5页 / 共149页
点击查看更多>>
下载资源
资源描述

SQLoracle.docx

《SQLoracle.docx》由会员分享,可在线阅读,更多相关《SQLoracle.docx(149页珍藏版)》请在冰豆网上搜索。

SQLoracle.docx

SQLoracle

SQL的学习资料

SELECT

名称

SELECT—从表或视图中取出若干行.

SELECT[ALL|DISTINCT[ON(expression[,...])]]

expression[ASname][,...]

[INTO[TEMPORARY|TEMP][TABLE]new_table]

[FROMtable[alias][,...]]

[WHEREcondition]

[GROUPBYcolumn[,...]]

[HAVINGcondition[,...]]

[{UNION[ALL]|INTERSECT|EXCEPT}select]

[ORDERBYcolumn[ASC|DESC|USINGoperator][,...]]

[FORUPDATE[OFclass_name[,...]]]

LIMIT{count|ALL}[{OFFSET|,}start]

输入

expression

表的列/字段名或一个表达式.

name

使用AS子句为一个列/字段或一个表达式声明另一个名称.这个名称主要用于标记输出列。

name不能在WHERE,GROUPBY或HAVING子句中使用。

但是它可以在与ORDERBY子句里引用。

TEMPORARY,TEMP

该表是在这次会话中唯一的,并且将在会话结束后自动删除。

new_table

如果声明了INTOTABLE子句,查询的结果将存储在指出名称的另一个表中.目标表(new_table)将被自动创建并且在此命令执行之前不应该存在。

请参考SELECTINTO获取更多信息.

注意:

CREATETABLEAS语句也将从选择查询中创建新表.

table

FORM子句引用的一个现存的表的名称.

alias

正在处理的表table的别名,用于缩写或消除一个表内部联合时的含混.

condition

一个结果为真或假布尔表达式.参阅WHERE子句获取更多信息.

column

表的列/字段的名称.

select

一个可以有除ORDERBY子句外的所有特性的选择语句.

输出

Rows

查询返回的所有结果集的行.

count

查询返回的行的记数.

描述

SELECT将从一个或更多表中返回记录行。

选择的侯选行是满足WHERE条件的所有行。

或者如果省略了WHERE语句则选择表中的所有行.(参阅WHERE子句)

DISTINCT将从选择出来的结果集中删除所有的重复的行。

ALL(缺省)将返回所有侯选行,包括重复的行。

DISTINCTON删除匹配所有表达式的行,只保留每个重复集的第一行。

注意这里每个重复集的"第一行"是不可预料的,除非我们用ORDERBY来保证我们希望的行最先出现。

例如,

SELECTDISTINCTON(location)location,time,report

FROMweatherReports

ORDERBYlocation,timeDESC;

检索出每个地区的最近的天气预报。

但是如果我们没有使用ORDERBY来强制每个地区按时间值降续排列,我们得到的将是每个地区的不可预料的时间的报告。

GROUPBY子句允许用户将一个表分成概念上的组.(参阅GROUPBY子句。

HAVING子句声明一个分组了的表,该表是从前面声明的子句的结果集中去除了一些组后生成的.(参阅HAVING子句。

ORDERBY子句允许用户根据模式操作符(ASCending或DESCending)来表明他/她所希望的行的排序模式(参阅ORDERBY子句)。

UNION操作符允许结果集是那些涉及到的查询所返回的行的集合。

(参阅UNION子句。

INTERSECT给出两个查询公共的行。

(参阅INTERSECT子句。

EXCEPT给出存在于第一个查询而不存在于第二个查询的行。

(参阅EXCEPT子句。

FORUPDATE子句允许SELECT语句对选出的行执行排他锁。

LIMIT子句允许给用户返回一个查询生成的结果的子集。

(参阅LIMIT子句。

你必须有SELECT权限用来从表中读取数值(参阅GRANT/REVOKE语句).

WHERE子句

可选的WHERE条件有如下常见的形式:

WHEREboolean_expr

boolean_expr可以包含任意个得出布尔值的表达式。

通常表达式会是

exprcond_opexpr

log_opexpr

这里cond_op可以是下面之一:

=,<,<=,>,>=,<>或条件操作符象ALL,ANY,IN,LIKE等,或者用户定义的操作符,而log_op可以为:

AND,OR,NOT.比较返回的结果要么是TRUE要么是FALSET并且如果表达式的值是FALSE,所有记录都将被丢弃.

GROUPBY子句

GROUPBY声明一个分了组的表,该表源于应用使用下面的子句:

GROUPBYcolumn[,...]

GROUPBY将把所有在组合了的列上共享同样的值的行压缩成一行。

如果存在聚集函数,这些聚集函数将计算每个组的所有行,并且为每个组计算一个独立的值(如果没有GROUPBY,聚集函数对选出的所有行计算出一个数值)。

存在GROUPBY时,除了在聚集函数里面,对任何非组合列的引用都是非法的,因为对一个非组合列会有多于一个可能的返回值。

HAVING子句

可选的HAVING条件有如下形式:

HAVINGcond_expr

这里cond_expr与为WHERE子句里声明的相同.

HAVING子句声明一个从前面的子句的结果集中去除了一些不符合cond_expr组后分组的表.

在cond_expr里引用的每个列/字段应该清晰地指明一个组的列/字段,除非引用在一个聚集函数里。

ORDERBY子句

ORDERBYcolumn[ASC|DESC][,...]

column既可以是一个列/字段名也可以是一个序数。

序数指的是列/字段按顺序(从左到右)的位置.这个特性可以使得对没有一个合适名称的列/字段的排序成为可能.这一点可能永远没有用,因为总是可以通过AS子句给一个要计算的列/字段赋予一个名称,例如:

SELECTtitle,date_prod+1ASnewlenFROMfilmsORDERBYnewlen;

从PostgreSQL版本6.4开始,还可以ORDERBY任意表达式,包括那些没有出现在SELECT结果列表里面的域。

因此下面的语句现在是合法的:

SELECTnameFROMdistributorsORDERBYcode;

我们可以给ORDERBY子句里每个列/字段加一个关键字DESC(降序)或ASC(升序).如果不声明,ASC是缺省.我们还可以声明一个排序操作符来实现排序。

ASC等效于使用'<'而DESC等效于使用'>'。

UNION子句

table_queryUNION[ALL]table_query

[ORDERBYcolumn[ASC|DESC][,...]]

这里table_query表明任何没有ORDERBY子句的选择表达式.

UNION操作符允许结果集是那些涉及到的查询所返回的结果的集合。

两个做为UNION直接操作数的SELECT必须生成相同数目的字段,并且对应的字段必须有兼容的数据类型。

缺省地,UNION的结果不包含任何重复的行,除非声明了ALL子句.

同一SELECT语句中的多个UNION操作符是从左向右计算的.注意ALL关键字不一定是全局的,只是应用在当前一对表的结果上.

INTERSECT子句

table_queryINTERSECTtable_query

[ORDERBYcolumn[ASC|DESC][,...]]

这里table_query声明任何没有ORDERBY子句的选择表达式。

INTERSECT给出两个查询公共的行。

两个做为INTERSECT直接操作数的SELECT的结果必须有相同数目的字段,并且对应的字段必须有兼容的数据类型。

除非用圆括号指明顺序,同一SELECT语句中的多个INTERSECT操作符是从左向右计算的。

EXCEPT子句

table_queryEXCEPTtable_query

[ORDERBYcolumn[ASC|DESC][,...]]

这里table_query声明任何没有ORDERBY子句的选择表达式。

EXCEPT给出存在于第一个查询而不存在于第二个查询的行。

(参阅EXCEPT子句)。

两个做为EXCEPT直接操作数的SELECT的结果必须有相同数目的字段,并且对应的字段必须有兼容的数据类型。

除非用圆括号指明顺序,同一SELECT语句中的多个EXCEPT操作符是从左向右计算的。

LIMIT子句

LIMIT{count|ALL}[{OFFSET|,}start]

OFFSETstart

这里count声明返回的最大行数,而start声明开始返回行之前忽略的行数。

LIMIT允许你检索有查询其他部分生成的行的某一部分。

如果给出了限制计数,那么返回的行数不会超过哪个限制。

如果给出了一个偏移量,那么开始返回行之前会忽略那个数量的行。

在使用LIMIT时,一个好习惯是使用一个ORDERBY子句把结果行限制成一个唯一的顺序。

否则你会得到无法预料的查询返回的子集---你可能想要第十行到第二十行,但以什么顺序?

除非你声明ORDERBY,否则你不知道什么顺序。

在Postgres7.0,查询优化器在生成查询规划时把LIMIT考虑进去了,所以你很有可能因给出的LIMIT和OFFSET值不同而得到不同的规划(生成不同的行序)。

因此用不同的LIMIT/OFFSET值选择不同的查询结果的子集将不会产生一致的结果,除非你用ORDERBY强制生成一个可预计的结果顺序。

这可不是毛病;这是SQL生来的特点,因为除非用了ORDERBYE约束顺序,SQL不保证查询生成的结果有任何特定的顺序。

用法

将表films和表distributors联合在一起:

SELECTf.title,f.did,d.name,f.date_prod,f.kind

FROMdistributorsd,filmsf

WHEREf.did=d.did

title|did|name|date_prod|kind

-------------------------+---+----------------+----------+----------

TheThirdMan|101|BritishLion|1949-12-23|Drama

TheAfri

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1