在说明多表查询之前,需要先介绍笛卡尔积。
什么是笛卡尔积?
笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成 员而第二个对象是Y的所有可能有序对的其中一个成员。下图可以说明两个数据表之间的笛卡尔积:
这个结果是没有意义的,因为部门id都不同,所以要筛选条件
emp.deptno = dept.deptno;
笛卡尔积(多表查询)的几种筛选方式:
1、等值连接:查询员工信息以及员工号,姓名,月薪,部门
select e.id,e.name,e.salary,e.dept from emp e,dept d where e.deptno = e.deptno;
2、不等值连接:查询员工信息以及员工号,姓名,月薪,等级
select e.id,e.name,e.salary,s.grade from emp e,salgrade s where e.salary between s.losal and s.histal;
3、外连接:把某些不成立的记录仍然包含在最后的结果中(where ...=...不成立的记录)
(1)左外连接:当where A = B 不成立的时候,等号左边的表仍然被包含在最后的结果中
where A = B(+);
(2)右外连接:当where A = B 不成立的时候,等号右边的表仍然被包含在最后的结果中
where A(+) = B;
4、自连接:对同一张表的多个关联字段进行查询(假设有多张表)
select * from A a1,A a2 where a1.aid = a2.bid;