多表查询

一、oracle的连接                                                  sql99的连接

1、等值连接                                                  cross   joins

2、不等值连接                                              natural    joins

3、外连接                                                     using  clause 

4、自连接                                                     full  or  two  sided  outer  joins

连接条件和表的个数的关系:连接条件至少有n-1个条件(n是表的个数)

二、外连接---对于不成立的记录,仍然希望包含在最后的结果中

左外连接: 当where e.deptno=d.deptno 不成立的时候,等号左边的表仍然被包含

写法:where e.deptno=d.deptno(+)

右外连接:当where e.deptno=d.deptno 不成立的时候,等号右边的表仍被包含

写法:where e.deptno(+)=d.deptno

三:自连接---通过表的别名,将同一张表视为多张表

select e.ename 员工姓名,b.ename老板姓名

from emp e, emp b

where e.mgr=b.empno;

--------性能问题:自连接操作一张表,但是是多表查询,所以笛卡尔积是原表的平方,所以不适合操作大表

四:层次查询----伪列 level

select level,empno,ename,mgr  

connect by prior empno=mgr 

start with mgr is null

order by 1;

start with empno=7566;

connect by 上一层的员工号=下一层的老板号

你可能感兴趣的:(多表查询)