五、多表查询
提到多表查询,自然不得不说的就是:笛卡尔集
概念不多说,自行百度,下图理解清楚了也就大体知道什么是笛卡尔集:
笛卡尔集产生原理
1.笛卡尔集会在下面条件下产生:
(1)省略连接条件
(2)连接条件无效
(3)所有表中的所有行互相连接
2.为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件。
3.如果要进行n个表的连接那么就至少添加n-1个连接条件
补:Oracle中的sql优化
3.在实际运行环境下,应避免使用全笛卡尔集。
1.验证笛卡尔集的产生
(1)省略连接条件
SQL> select count(*) from emp;
-->结果:14
SQL> select count(*) from dept;
-->结果:4
SQL> select count(*) from emp,dept;
-->结果:56 (=14*4)
(2)连接条件无效
SQL> select count(*) from emp e,dept d where e.ename is not null;
-->结果:56 (=14*4)
-->说明:这里where后的条件一点意义都没得
(3)所有表中的所有行互相连接
-->这就是笛卡尔集的定义
2.多表查询
(1)等值查询
--等值连接
--查询员工信息: 员工号 姓名 月薪 部门名称
SQL> select e.empno,e.ename,e.sal,d.dname
from emp e,dept d
where e.deptno=d.deptno;
(2)不等值查询
--不等值连接