[ subquery_factoring_clause ]
SELECT [ hint ] [ { { DISTINCT | UNIQUE } | ALL } ] select_list
FROM { table_reference | join_clause | ( join_clause ) }
[ , { table_reference | join_clause | (join_clause) } ] ...
[ where_clause ]
[ hierarchical_query_clause ]
[ group_by_clause ]
[ model_clause ]WITH query_name ([c_alias [, c_alias]...]) AS (subquery) [search__clause] [cycle_clause] [, query_name ([c_alias [, c_alias]...]) AS (subquery) [search_clause] [cycle_clause]]...
{ SEARCH
{ DEPTH FIRST BY c_alias [, c_alias]...
[ ASC | DESC ]
[ NULLS FIRST | NULLS LAST ]
| BREADTH FIRST BY c_alias [, c_alias]...
[ ASC | DESC ]
[ NULLS FIRST | NULLS LAST ]
}
SET ordering_column
}{CYCLE c_alias [, c_alias]...
SET cycle_mark_c_alias TO cycle_value
DEFAULT no_cycle_value
}table_reference
{ ONLY (query_table_expression)
| query_table_expression [ pivot_clause | unpivot_clause ]
} [ flashback_query_clause ]
[ t_alias ]query_table_experssion{ query_name
| [ schema. ]
{ table [ partition_extension_clause
| @ dblink
]
| { view | materialized view } [ @ dblink ]
} ["sample_clause"]
| (subquery [ subquery_restriction_clause ])
| table_collection_expression
}query_table_experssion用来指定查询语句查询的对象,关键字only仅用于你不想查询出被查询的视图的子视图中的数据场合。flashback_query_clause{ VERSIONS BETWEEN
{ SCN | TIMESTAMP }
{ expr | MINVALUE } AND { expr | MAXVALUE }
| AS OF { SCN | TIMESTAMP } expr
}flashback_query_clause可以让你查询表,视图,物化视图过去的数据。它是一个SQL驱动的flash back,用户可以通过为每个查询对象指定SCN和Timestamp来取得历史数据,当让你也可以使用DBMS_FLASHBACK来操纵session-leve的flash back。Flashback query能够查询一行数据的变化历史,通过VERSIONS_XID伪列还可以查到引起每一个变化的事物的的ID,在数据字典FLASHBACK_TRANSACTION_QUERY中,使用该ID可以查到所有事物所有相关的信息。如果versions和as of子句同时出现,那么结果为在按时as of的结果上执行versions。下面是flashback_query_clause的一些限制:
sample_clauseSAMPLE [ BLOCK ]
(sample_percent)
[ SEED (seed_value) ]sample_clause命令oracle执行一次随机的样品查询而不是对整个表的查询。如果指定了BLOCK关键字,oracle将会使用随机块来替代随机行,BLOCK只有在FULL或者INDEX-FFS的时候才会起作用,如果有更优的执行路径,oracle则不会考虑随机block。sample_percent用来指定会被包含在sample中的总行或者块的百分比,取值范围为[0.000001,100),这个值表示每行数据可能被选中的概率而不是oracle将会精确的取得该表总行数的比例。
seed值用来确定2次执行同一个sample可以取得相同的结果,如果seed相同的情况下。忽略seed,每次执行的结果都是变化的。下面是sample_clause的一些限制:
subquery_restriction_clauseWITH { READ ONLY
| CHECK OPTION
} [ CONSTRAINT constraint ]subquery_restriction_clause用来限制子查询的属性。WITH READ ONLY意味着表或者视图不能更新
WITH CHECK OPTION意味oracle将会检查任何针对表或视图的改变是否被包含在子查询中,如果没有包含将会抛出错误。另外如果在子查询中使用,不能使用在where子句的子查询中。
CONSTRAINT是check option指定的constraint的名字,如果没有指定,oracle将会自动生成一个SYS_Cn 。
table_collection_experssionTABLE (collection_expression) [ (+) ]
Table表达式使参数中集合表达式的值可以作为表进行查询和DML操作,集合表达式可以是子查询,列,函数,或者集合构造器。无论何种形式,它必须返回一个嵌套表或者数组类型的值。
Note:不明白+的使用规则。
pivot_clausetable_reference PIVOT [ XML ]
( aggregate_function ( expr ) [[AS] alias ]
[, aggregate_function ( expr ) [[AS] alias ] ]...
pivot_for_clause
pivot_in_clause
)pivot_for_clause
FOR { column
| ( column [, column]... )
} pivot_in_clause
IN ( { { { expr
| ( expr [, expr]... )
} [ [ AS] alias]
}...
| subquery
| ANY [, ANY]...
}
)pivot通过交叉查询将指定的行转换成列,转换过程中按照以下步骤执行:
unpivot clausetable_reference UNPIVOT [ {INCLUDE | EXCLUDE} NULLS ]
( { column | ( column [, column]... ) }
pivot_for_clause
unpivot_in_clause
)unpivot_in_clauseIN
( { column | ( column [, column]... ) }
[ AS { literal | ( literal [, literal]... ) } ]
[, { column | ( column [, column]... ) }
[ AS {literal | ( literal [, literal]... ) } ]
]..
)unpivot的作用刚好与pivot相反,将列转换成行。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7939908/viewspace-766906/ ,如需转载,请注明出处,否则将追究法律责任。