日期:2014-05-16  浏览次数:20903 次

问个简单的sql语句问题
select * from (select * from table)  as t
请问下这句sql是创建了临时表“t”吗?与“select * from table”的区别有多大?
------解决方案--------------------
这样应该没有创建临时表吧。
如果真想创建临时表:
http://blog.csdn.net/wyzxg/article/details/1882347
------解决方案--------------------
没有创建临时表,最终的执行计划是外部查询和子查询合并了。
------解决方案--------------------
没有创建临时表,只是一个嵌套查询吧。
------解决方案--------------------
没有创建临时表,只是一个嵌套查询问题,
在Oracle8i或以上版本中,可以创建以下两种临时表:
1。会话特有的临时表
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification>)
ON COMMIT PRESERVE ROWS;
2。事务特有的临时表
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification>)
ON COMMIT DELETE ROWS;
CREATE GLOBAL TEMPORARY TABLE MyTempTable
所建的临时表虽然是存在的,但是你试一下insert 一条记录然后用别的连接登上去select,记录是空的,明白了吧,我把下面两句话再贴一下:
--ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行)
--ON COMMIT PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表。

------解决方案--------------------
这个不叫临时表, 你可以看看把as放在前边  with t as (select *from dual) select *from t