| <subquery> [ <for_update_clause> ]; |
子查询常见用法:
| [ <subquery_factoring_clause>
]
SELECT [ <hint> ] [ ALL | DISTINCT | UNIQUE ] <select_list> FROM <table_reference> [,...] [ <where_clause> ] [ <hierarchical_query_clause> ] [ <group_by_clause> ] [ HAVING condition ] [ { UNION [ALL] | INTERSECT | MINUS } ( <subquery> ) ] [ <order_by_clause> ] |
| 关键词 | 描述 |
|---|---|
| ALL | 返回所有查询的记录集,默认 |
| DISTINCT | UNIQUE | 返回的记录集消除重复行
(不能用在含 LOB 字段的查询) |
| UNION | 返回两个子查询记录的合并 |
| INTERSECT | 返回两个子查询记录的相同部分 |
| MINUS | 返回前个子查询中,不同于后个子查询的记录 |
将一个名称赋予子查询块,在其后用该名称代替子查询块。
不允许嵌套命名子查询,即在被命名的子查询中又命名子块。
在有 SET 操作的查询中,SET 操作的对象不能为命名子查询。
| WITH
query_name AS ( <subquery> ) [, ...] |
| WITH dept_costs AS ( SELECT department_name, SUM(salary) dept_total FROM employees e, departments d WHERE e.department_id = d.department_id GROUP BY department_name), avg_cost AS ( SELECT SUM(dept_total)/COUNT(*) avg FROM dept_costs ) SELECT * FROM dept_costs WHERE dept_total > (SELECT avg FROM avg_cost) ORDER BY department_name; |
指定返回的记录集不重复(重复部分删除)。
{ DISTINCT | UNIQUE }
|
| { * |
{ query_name.* | [schema.]{ table | view | materialized view }.* | expr [[AS] c_alias] } , ... } |
| 关键词 | 描述 |
|---|---|
| c_alias | 列的别名,(可用于 ORDER BY 子句) |
| 如果指定了 GROUP BY 子句,select_list 限制如下: |
|---|
|
| 当不同表有相同的列表时,必须限定列来自哪个表 |
|---|
| 当从一个只连接有一个 key-preserved 表的视图时,可以选择 rowid |
| 如果指定了 GROUP BY 子句,select_list 限制如下: |
|
| { ONLY ( <query_table_expression> )
[ <flashback_clause> ] [ t_alias ]
| <query_table_expression> [ flashback_clause] [ t_alias ] | ( <joined_table> ) } |
| 关键词 | 描述 |
|---|---|
| ONLY | 仅用于视图,Specify ONLY if the view in the FROM
clause is a view belonging to a hierarchy and you do not want to include
rows from any of its subviews. |
回闪子句,可以查询记录更新以前的值。
| AS OF { SCN | TIMESTAMP } expr |
| 关键词 | 描述 |
|---|---|
| SCN | expr 必须为 number 类型 |
| TIMESTAMP | expr 必须为 TIMESTAMP 类型 |
| expr | (时间) |
| SELECT salary FROM employees
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' DAY) WHERE last_name = 'Chung'; |
| {
query_name | [schema.] { table { { PARTITION ( <partition> ) | <subpartition> ( subpartition ) } [ <sample_clause> ] | <sample_clause> | @dblink } | { view | metarialized view } [ @dblink ] } | ( <subquery> [ <subquery_restriction_clause> ] ) | <table_collection_expression> } |
| 关键词 | 描述 |
|---|---|
| schema | 拥有对象的架构名,与用户名一对一 若省略,则为当前登陆用户名 |
| table | 表名 |
| PARTITION | 表的分区名 |
| SUBPARTITION | 表的子分区名 |
| dblink | 数据库链接,不要求必须是 Oracle 数据库
列类型限制:用户定义类型,对象引用,AnyType, AnyData, AnyDataSet |
随机数据抽样。
| SAMPLE [BLOCK] ( <sample_percent> ) |
| 关键词 | 描述 |
|---|---|
| BLOCK | 随机块抽取,默认为随机行 |
| sample_percent | 抽取百分比, 从 0.000001 至 <100 |
| WITH
{ READ ONLY | CHECK OPTION [ CONSTRAINT <constraint> ] } |
| 关键词 | 描述 |
|---|---|
| READ ONLY | 指示表或视图不允许被更新 |
| CHECK OPTION | 指示更新时必须满足的条件 |
| constraint | 约束名称(条件) |
| INSERT INTO (SELECT department_id, department_name, location_id FROM departments WHERE location_id < 2000 WITH CHECK OPTION) VALUES (9999, 'Entertainment', 2500); |
| TABLE ( <collection_expression) [ (+) ] |
| 参数 | 描述 |
|---|---|
| (+) | 左/右连接使用,扩充的记录字段全部为 null |
| <table_reference>
{ [ <join_type> ] JOIN <table_reference> { ON <condition> | USING ( column [,...] ) } | { CROSS JOIN | NATURAL [ <join_type> ] JOIN } } |
| 关键词 | 描述 |
|---|---|
| ON | 指定连接条件 |
| USING | 简化语法,(当连接的字段名/别名相同,且为等于条件时)
待确认: 该语法导致输出时,相同名称的列仅输出一个,否则尽量取两者之中非空的那个 |
| CROSS | 相当于 INNER |
| {
INNER | { LEFT | RIGHT | FULL } [OUTER] } |
| 关键词 | 描述 |
|---|---|
| INNER | 连接,记录满足指定条件 |
| LEFT | 左连接,左表的记录全部取出,不满足条件时,右表字段值全部为 null |
| RIGHT | 右连接,右表的记录全部取出,不满足条件时,左表字段值全部为 null |
| FULL | 全连接 |
| OUTER | 可选,只是看起来比较明确 |
| WHERE <condition> |
分级查询,级别通过 LEVEL 返回。
第一个条件确定第一级的记录。
第二个条件确定上下级的关系。
| [ START WITH <condition> ] CONNECT BY PRIOR <condition> |
| 关键词 | 描述 |
|---|---|
| START WITH | 第一级的记录 |
| CONECT BY | 下一级的条件 |
分组表达式及分组后的条件
| GROUP BY
{ <expr> } [,...] [HAVING <condition> ] |
| {
ROLLUP | CUBE } ( <grouping_expression_list> ) |
| GROUPING SETS (
{ } ) |
| <expression_list> [,...] |
| {
expr [,...] | ( expr [,...] ) } |
| ORDER [SIBLINGS] BY
{ { <expr> | <position> | <c_alias> } [ ASC | DESC ] [ NULLS { FIRST | LAST } ] } [, ...] |
| 关键词 | 描述 |
|---|---|
| SIBLINGS | 用于分层查询 |
| expr | 按表达式的值排序 |
| position | 按结果列号排序,从 1 起 |
| c_alias | 按别名对应的列排序 |
| ASC | 升序,默认 |
| DESC | 降序 |
| FIRST | 空值排在前 |
| LAST | 空值排在后,默认 |
指定查询可更新。
| FOR UPDATE
[ OF [ [schema.]{ table | view }.]column [,...] ] [ { NOWAIT | WAIT integer } ] |
| 关键词 | 描述 |
|---|---|
| OF | 仅锁定给出的真实列所在的表或视图,默认为所有表或视图 |
| NOWAIT | 当记录被其他用户锁定时,不等待 |
| WAIT n | 当记录被其他用户锁定时,等待 n 秒 |
| 无 WAIT | 系统会等待其他用户释放锁定,默认 |