多表查询就是使用两张表及其以上的查询。首先需要知道几个名词,笛卡尔积,内连接,外连接,子查询。
1)笛卡尔积
所谓笛卡尔积其实就是两张表数据的条数相乘得到的最后结果,例如表1有10条数据,表2有4条数据,那么经过笛卡尔积之后最后的结果为40条数据,使用笛卡尔积缺点比较多,会产生很多没有用的数据。
2)内连接
内连接分为隐式和显示两种,显示就是使用inner join关键字,而隐式就是使用where关键字,根据关联字段建立的条件,例如where t1.id=t2.id 这就是隐式。
3)外连接
外连接也分两种,左外连接,右外连接。
左外连接:使用left join 关键字,它返回的是左表的所有记录,如果右表中没有满足条件的记录,则返回空值。
右外连接:使用right join 关键字,意思和左外连接相反。
在oracle中有一个特殊的符号(+),用它也可以达到左右外连接的效果,用法例如:e2.empno(+) =e3.empno,表示如果e3表在e2表中没有满足关系的记录,就返回空值。
4)子查询
子查询就是嵌套查询,例如 select .. from (selec....) where(select....),写法不一样,但就是这样的。
5)exists 关键字
exists(查询语句):数据量大时非常高效,当查询语句有结果的时候返回true否则返回false
例如查询有员工的部门信息
select *
from dept d
where exists
(select * from emp e where e.deptno=d.deptno);
6)集合运算
集合运算:(将查询结果合并,应用场景:应用在来自不同数据的表时)
交集:intersect
并集:union(去除重复的,并且排序)/union all(不去除重复的)
差集:minus关键字
集合运算的注意事项:
1.列的类型要一致
2.按照顺序书写
3.列的数量要一致,如果不足用null空值补全。