in,exists,=
in是把外表和内表作hash 连接
exists是对外表作loop循环,每次loop循环再对内表进行查询
name in ('a','b','c') <==> name='a' or name='b' or name='c'
better performance:
1. in小表
select * from 大表 where column1 in (select column1 from 小表)
2. exists大表
select * from 小表 where exists (select column1 from 大表 where column=小表.column)
3. 相等
两个表大小相当,那么用in和exists差别不大
临时表
1. Oracle中的临时表是全局的,每个登陆用户都使用这一个相同的临时表,但互相之间看不到彼此的数据,也就是说临时表是会话独立的
2. SQL临时表是一种”内存表”,表是存储在内存中的
本地临时表的名称以单个数字符号 (#) 打头,它们仅对当前的用户连接是可见的,当用户从SQL实例断开连接时被删除。
全局临时表的名称以数学符号(##) 打头,创建后对任何用户都是可见的,所有引用该表的用户从 SQL断开连接时被删除。
FOR EXAMPLE:
SELECT column1, column2 INTO #tmpTable FROM xxxTable