多表查询
笛卡尔积基本原理
两个表如果笛卡尔积运算
1 行数 两个表相乘
2 列数 两个表相加
select count(e.empno)
from emp e,dept d
where e.deptno = d.deptno;
COUNT(E.EMPNO)
--------------
14
select count(e.empno)
from emp e,dept d ;
COUNT(E.EMPNO)
--------------
56
等值连接
查询员工信息,员工号,姓名,月薪,部门名称
select e.ename,e.empno,e.sal,d,dname
from emp e,dept d
where e.deptno = d.deptno;
EMPNO ENAME SAL DNAME
---------- ---------- ---------- --------------
7369 SMITH 800 RESEARCH
7499 ALLEN 1600 SALES
7521 WARD 1250 SALES
7566 JONES 2975 RESEARCH
7654 MARTIN 1250 SALES
7698 BLAKE 2850 SALES
7782 CLARK 2450 ACCOUNTING
7788 SCOTT 3000 RESEARCH
7839 KING 5000 ACCOUNTING
7844 TURNER 1500 SALES
7876 ADAMS 1100 RESEARCH
7900 JAMES 950 SALES
7902 FORD 3000 RESEARCH
7934 MILLER 1300 ACCOUNTING
不等值连接
查询员工信息,员工号,姓名,月薪,薪水级别
select e.empno, e.ename, e.sal, s.grade
from emp e,salgrade s
where e.sal >= s.losal and e.sal <= s.hisal;
EMPNO ENAME SAL GRADE
---------- ---------- ---------- ----------
7369 SMITH 800 1
7900 JAMES 950 1
7876 ADAMS 1100 1
7521 WARD 1250 2
7654 MARTIN 1250 2
7934 MILLER 1300 2
7844 TURNER 1500 3
7499 ALLEN 1600 3
7782 CLARK 2450 4
7698 BLAKE 2850 4
7566 JONES 2975 4
7788 SCOTT 3000 4
7902 FORD 3000 4
7839 KING 5000 5
外连接
按照部门统计员工人数: 部门号 部门名称 各部门人数
要将各个部门划分开 要分组
要使用部门表,员工表 需要多表查询
select d.deptno, d.dname, count(e.empno)
from emp e, dept d
where e.deptno = d.deptno
group by d.deptno,by d.dname;
DEPTNO DNAME COUNT(E.EMPNO)
---------- -------------- --------------
10 ACCOUNTING 3
20 RESEARCH 5
30 SALES 6
我们的期望 想把40号部门给统计出来…
40号部门没有被统计出来的原因: 员工表中没有40号部门的员工…d.deptno = e.deptno (d.40 = e.40)
我想把部门表的所有列都显示出来, 就需要找到部门表
在对方写(+)
select d.deptno, d.dname, count(e.empno)
from emp e,dept d
where e.deptno(+) = d.deptno
group by d.deptno,d.dname;
DEPTNO DNAME COUNT(E.EMPNO)
---------- -------------- --------------
10 ACCOUNTING 3
40 OPERATIONS 0
20 RESEARCH 5
30 SALES 6
自连接
查询员工信息,老板信息 显示*****的老板是******
员工信息要查员工表,老板信息还要查员工表
员工表的老板是在老板表内(也就是老板表的员工)
select e.ename || '的老板是' || b.ename
from emp e,emp d
where e.deptno(+) = d.mgr
E.ENAME||'的老板是'||B.ENAME
----------------------------
SMITH的老板是FORD
ALLEN的老板是BLAKE
WARD的老板是BLAKE
JONES的老板是KING
MARTIN的老板是BLAKE
BLAKE的老板是KING
CLARK的老板是KING
SCOTT的老板是JONES
KING的老板是
TURNER的老板是BLAKE
ADAMS的老板是SCOTT
JAMES的老板是BLAKE
FORD的老板是JONES
MILLER的老板是CLARK