多表查询
仔细看上面的图片
多表操作,首先会生成笛卡尔全集表.多表查询就是按照给定条件(连接条件),从笛卡尔全集中选出正确的结果
根据连接条件的不同可以划分为:等值链接、不等值链接、外链接、自连接
1.等值连接
emp表: 记录了员工姓名,部门ID等,没有部门名
dept表: 记录了部门ID,部门名等
多表: 现在需要,员工名和部门名,很明显需要两张表的信息
所以需要添加where选出真正需要的数据
如果有N张表,至少需要N-1个条件.
2.不等值连接
工资级别表
下面是不等值连接(使用between..and更合适)
3.外连接
统计各部门人数:
也就是包含一些不符合where条件的数据
左外链接:当 where e.deptno=d.deptno 不成立的时候,=左边所表示的信息,仍然被包含。
- 写法:与叫法相反:where e.deptno=d.deptno(+)
右外链接:当 where e.deptno=d.deptno 不成立的时候,=右边所表示的信息,仍然被包含。
- 写法:依然与叫法相反:where e.deptno(+)=d.deptno
4.自连接
核心,通过表的别名,将同一张表视为多张表。
select e.ename || ' 的老板是 ' || nvl(b.ename, '他自己' )from emp e, emp b where e.mgr=b.empno(+)
作者:Ovins