oracle with语句参数,oraclewith语句

SQL中使用WITH 语句的查询

sql with as 用法(适用sqlserver,好像oracle也适用) Server 2005中提供了公用表表达式(CTE),使用CTE,可以使SQL语句的可维护性,同时,CTE要比表变量的效率高得多。

下面是CTE的语法: [ WITH [ ,n ] ] < common_table_expression>::= expression_name [ ( column_name [ ,n ] ) ] AS ( CTE_query_definition ) 现在使用CTE来解决上面的问题,SQL语句如下: with cr as ( select CountryRegionCode from person.CountryRegion where Name like 'C%' ) select * from person.StateProvince where CountryRegionCode in (select * from cr) 其中cr是一个公用表表达式,该表达式在使用上与表变量类似,只是SQL Server 2005在处理公用表表达式的方式上有所不同。 在使用CTE时应注意如下几点: 1. CTE后面必须直接跟使用CTE的SQL语句(如select、insert、update等),否则,CTE将失效。

如下面的SQL语句将无法正常使用CTE: with cr as ( select CountryRegionCode from person.CountryRegion where Name like 'C%' ) select * from person.CountryRegion -- 应将这条SQL语句去掉 -- 使用CTE的SQL语句应紧跟在相关的CTE后面 -- select * from person.StateProvince where CountryRegionCode in (select * from cr) 2. CTE后面也可以跟其他的CTE,但只能使用一个with,多个CTE中间用逗号(,)分隔,如下面的SQL语句所示: with cte1 as ( select * from table1 where name like 'abc%' ), cte2 as ( select * from table2 where id > 20 ), cte3 as ( select * from table3 where price < 100 ) select a.* from cte1 a, cte2 b, cte3 c where a.id = b.id and a.id = c.id 3. 如果CTE的表达式名称与某个数据表或视图重名,则紧跟在该CTE后面的SQL语句使用的仍然是CTE,当然,后面的SQL语句使用的就是数据表或视图了,如下面的SQL语句所示: -- table1是一个实际存在的表 with table1 as ( select * from persons where age < 30 ) select * from table1 -- 使用了名为table1的公共表表达式 select * from table1 -- 使用了名为table1的数据表 4. CTE 可以引用自身,也可以引用在同一 WITH 子句中预先定义的 CTE。不允许前向引用。

5. 不能在 CTE_query_definition 中使用以下子句: (1)COMPUTE 或 COMPUTE BY (2)ORDER BY(除非指定了 TOP 子句) (3)INTO (4)带有查询提示的 OPTION 子句 (5)FOR XML (6)FOR BROWSE 6. 如果将 CTE 用在属于批处理的一部分的语句中,那么在它之前的语句必须以分号结尾,如下面的SQL所示: declare @s nvarchar(3) set @s = 'C%' ; -- 必须加分号 with t_tree as ( select CountryRegionCode from person.CountryRegion where Name like @s ) select * from person.StateProvince where CountryRegionCode in (select * from t_tree) 7、CTE除了可以简化嵌套SQL语句外,还可以进行递归调用。

oracle语句start with connect by prior 效率怎么样

查看当前用户的缺省表空间

SQL>select username,default_tablespace from user_users;

查看当前用户的角色

SQL>select * from user_role_privs;

查看当前用户的系统权限和表级权限

SQL>select * from user_sys_privs;

SQL>select * from user_tab_privs;

oracle 序列,是否有更改START WITH 的语句

理论上ORACLE序列,除了START值外任何参数都可以修改

当然最常用的就是先减去xx,然后增加

ALTER SEQUENCE SEQ INCREMENT -500;

SELECT SEQ.NEXTVAL FROM DUAL; --会得到0

ALTER SEQUENCE SEQ INCREMENT BY 1

还是DB2劲,可以直接修改

ALTER SEQUENCE SEQ RESTART WITH 5

请教大师oracle的with as子句的问题

with as语法–针对一个别名with tmp as (select * from tb_name)–针对多个别名withtmp as (select * from tb_name),tmp2 as (select * from tb_name2),tmp3 as (select * from tb_name3),其实就是把一大堆重复用到的sql语句放在with as里面,取一个别名,后面的查询就可以用它,这样对于大批量的sql语句起到一个优化的作用,而且清楚明了。

举例:1with e as (select * from scott.emp e where e.empno=7499)select * from e;2withs1 as (select rownum c1 from dual connect by rownum <= 10),s2 as (select rownum c2 from dual connect by rownum <= 10)select a.c1, b.c2 from s1 a, s2 b where。;。

oracle中with check option是什么意思

这个主要是在创建视图的时候使用,用来保证数据的完整性。

它的意思是:强制针对视图执行的所有数据修改语句都必须符合在定义视图时的SELECT语句中设置的条件。通过视图修改行时,WITH CHECK OPTION 可确保提交修改后,仍可通过视图看到数据。如果在定义视图的语句中的任何位置使用 TOP,则不能指定 CHECK OPTION。

如果指定了WITH CHECK OPTION,也不能依据视图来验证任何直接对视图的基础表执行的更新。

Oracle sql语句加上with rollup 就报错,个人觉得我写的语法没错-百度知

你第一个截图那张,with用的是sqlserver的语法,你用到oracle里当然不行 oralce里使用是这样的 select a.provider,a.materialno,sum(a.quantity)from tb a group by rollup(a.provider,a.materialno) 后一个cmd下的语法,也是sqlserver或者access,或者mysql,总之不是oracle里的语法 oracle下这样 insert into tb select 'Canon','001',500 from dualunion allselect 'Canon','001',200 from dualunion allselect 'Canon','002',100 from dualunion allselect 'Canon','002',300 from dualunion allselect 'Sony','001',200 from dualunion allselect 'IBM','002',100 from dualunion allselect 'IBM','001',600 from dualunion allselect 'IBM','002',200 from dual;。

在oracle中sql语句和hsql语句的区别是什么

oracle只有sql语句吧。HSQL不是语句,是一个开源的java数据库项目(我大学数据库课就是用的这个玩意),HSQL用的语句也是叫SQL。

sql指的是结构化查询语言,是数据库的查询、编程语言。各种数据库用的语言都叫做sql,只不过细节上是有点不同的,但是一般都遵循sql语句的国际标准。SQL标准是由国际标准组织规定的,现在应该到SQL:2006标准了,数据库厂商不一定会完全支持这些标准,但是基本的东西肯定都支持,只不过部分细节的写法和实现会有差别。

Oracle9i数据库WITH查询语法小议是什么

Oracle9i新增了WITH语法功能,可以将查询中的子查询命名,放到SELECT语句的最前面。

下面看一个简单的例子: SQL> WITH2 SEG AS (SELECT SEGMENT_NAME, SUM(BYTES)/1024 K FROM USER_SEGMENTS GROUP BY SEGMENT_NAME),3 OBJ AS (SELECT OBJECT_NAME, OBJECT_TYPE FROM USER_OBJECTS)4 SELECT O。 OBJECT_NAME, OBJECT_TYPE, NVL(S。

K, 0) SIZE_K5 FROM OBJ O, SEG S6 WHERE O。OBJECT_NAME = S。

SEGMENT_NAME (+)7 ;OBJECT_NAME OBJECT_TYPE SIZE_KDAIJC_TEST TABLE 128P_TEST PROCEDURE 0IND_DAIJC_TEST_C1 INDEX 128通过WITH语句定义了两个子查询SEG和OBJ,在随后的SELECT语句中可以直接对预定义的子查询进行查询。 从上面的例子也可以看出,使用WITH语句,将一个包含聚集、外连接等操作SQL清晰的展现出来。

WITH定义的子查询不仅可以使查询语句更加简单、清晰,而且WITH定义的子查询还具有在SELECT语句的任意层均可见的特点。 即使是在WITH的定义层中,后定义的子查询都可以使用前面已经定义好的子查询: SQL> WITH2 Q1 AS (SELECT 3 + 5 S FROM DUAL),3 Q2 AS (SELECT 3 * 5 M FROM DUAL),4 Q3 AS (SELECT S, M, S + M, S * M FROM Q1, Q2)5 SELECT * FROM Q3;S M S+M S*M8 15 23 120利用WITH定义查询中出现多次的子查询还能带来性能提示。

Oracle会对WITH进行性能优化,当需要多次访问WITH定义的子查询时,Oracle会将子查询的结果放到一个临时表中,避免同样的子查询多次执行,从而有效的减少了查询的IO数量。 看一个简单的例子,首先构造一张大表,现在要取出大表中ID最小、ID最大以及ID等于平均值的记录,看看普通写法和WITH语句的区别: SQL> CREATE TABLE T_WITH AS SELECT ROWNUM ID, A。

* FROM DBA_SOURCE A WHERE ROWNUM SET TIMING ON SQL> SET AUTOT ON SQL> SELECT ID, NAME FROM T_WITH2 WHERE ID IN 3 (4 SELECT MAX(ID) FROM T_WITH 5 UNION ALL6 SELECT MIN(ID) FROM T_WITH7 UNION ALL8 SELECT TRUNC(AVG(ID)) FROM T_WITH9 );ID NAME1 STANDARD50000 DBMS_BACKUP_RESTORE100000 INITJVMAUX已用时间: 00: 00: 00。 09执行计划Plan hash value: 647530712-----------------------------------------------------------| Id | Operation | Name | Rows | Bytes |-----------------------------------------------------------| 0 | SELECT STATEMENT | | 3 | 129 ||* 1 | HASH JOIN | | 3 | 129 || 2 | VIEW | VW_NSO_1 | 3 | 39 || 3 | HASH UNIQUE | | 3 | 39 || 4 | UNION-ALL | | | || 5 | SORT AGGREGATE | | 1 | 13 || 6 | TABLE ACCESS FULL| T_WITH | 112K| 1429K|| 7 | SORT AGGREGATE | | 1 | 13 || 8 | TABLE ACCESS FULL| T_WITH | 112K| 1429K|| 9 | SORT AGGREGATE | | 1 | 13 || 10 | TABLE ACCESS FULL| T_WITH | 112K| 1429K|| 11 | TABLE ACCESS FULL | T_WITH | 112K| 3299K|-----------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------1 - access("ID"="$nso_col_1")Note------ dynamic sampling used for this statement统计信息----------------------------------------------------------0 recursive calls0 db block gets5529 consistent gets0 physical reads0 redo size543 bytes sent via SQL*Net to client385 bytes received via SQL*Net from client2 SQL*Net roundtrips to/from client0 sorts (memory)0 sorts (disk)3 rows processed为了避免第一次执行时物理读的影响,查询结果选取了SQL的第三次运行,物理读为0时的统计信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值