7.多表查询
7.1笛卡尔集【使用Excel图表】
|
|
7.2连接类型
|
等值连接 |
查询员工信息: 员工号 姓名 月薪 部门名称 SQL> select e.empno,e.ename,e.sal,d.dname from emp e,dept d where e.deptno=d.deptno; |
|
不等值连接 |
查询员工信息: 员工号 姓名 月薪 工资级别【员工表和级别表是没有外键关联的】
SQL> select * from salgrade; SQL>select e.empno,e.ename,e.sal,s.grade from emp e,salgrade s where e.sal between s.losal and s.hisal |
|
外连接 |
1.按部门统计员工人数:部门号 部门名称 人数 SQL> select d.deptno,d.dname,count(e.empno) from emp e,dept d where e.deptno=d.deptno group by d.deptno,d.dname;
左外连接:当where e.deptno=d.deptno不成立的时候,等号左边的表任然被包含 写法:where e.deptno=d.deptno(+) 右外连接:当where e.deptno=d.deptno不成立的时候,等号右边的表任然被包含 写法: where e.deptno(+)=d.deptno SQL> select d.deptno,d.dname,count(e.empno) from emp e,dept d where e.deptno(+)=d.deptno group by d.deptno,d.dname; |
|
自连接 |
自连接: 通过表的别名,将同一张表视为多张表 查询员工信息:员工姓名 老板(上级)姓名 SQL> select e.ename 员工,b.ename 老板 from emp e,emp b where e.mgr = b.empno; |
|
笛卡尔集总数 |
select count(*) from emp e,emp b; |
|
|
|
7.3 层次查询
|
|
|
from 表 connect by prior 条件 start with 开始条件 |
|
|
select level,empno,ename,mgr from emp connect by prior empno=mgr start with mgr=7566 order by 1 |
level是伪列 |
|
select level,empno,ename,mgr from emp connect by prior empno=mgr start with mgr is null order by 1 |
|