表连接的方法+使用表连接而不是多个表查询+from字句表的顺序

来源:互联网 发布:windows10 mac主题 编辑:程序博客网 时间:2024/06/06 03:17

表连接的方法
使用表连接而不是多个表查询
1执行表连接比多个表查询效率更高,因为执行每条sql语句,oracle内部会执行很多工作。比如解析SQL语句,估算索引的利用率,绑定变量,读取数据块等,所以检索访问SQL语句的执行次数
2尽量减少表的查询次数:可以使用一次查询的数据,尽量不要使用多次查询获得。

验证

select empno,deptno,ename from emp where deptno in(select  deptno from dept where   loc='NEW YORK');select e.empno,e.deptno,e.ename from emp e inner join dept d on d.deptno=e.deptno where d.loc='NEW YORK';

这里写图片描述

from字句表的顺序
1oracle解析器处理from字句的表时,按照从右到左的顺序,最后指定的表优先被oracle处理,oracle将它作为驱动表(driving table),并且对该表的数据进行排序。之后再处理倒数第二个表;最后将所有从第二个表中检索出来的纪录与第一个表中的合适纪录进行合并。
2建议:使用表连接查询时候,纪录行数最少的表放在最后,最为驱动表。

验证

emp 有14条纪录,dept有4条纪录

数据太多不好截图
SQL> select e.empno,e.ename ,d.deptno,d.dname
2 from dept d,emp e;
已用时间: 00: 00: 00.05

SQL> select e.empno,e.ename ,d.deptno,d.dname
2 from emp e ,dept d;

已用时间: 00: 00: 00.03

where字句的连接顺序
1.oracle采用从右向左(从下到上)的顺序解析where字句,所以表之间的连接应该写在其他where 条件之前,可以过滤掉最大数量纪录的条件应该写在where 字句的最后面.
验证

select e.empno,e.deptno,e.ename from emp e,dept d where d.deptno=e.deptno and  d.loc='NEW YORK'  ;select e.empno,e.deptno,e.ename from emp e,dept d where  d.loc='NEW YORK' and  d.deptno=e.deptno ;

这里写图片描述