一、概念
从多个表中查询数据时,需要在表和表间建立连接,一般使用主外键建立连接
二、连接种类
1.
等连接:连接条件使用等号
非等连接:连接条件使用等号以外的其它符号
2.
内连接:根据指定的连接条件进行连接查询,满足连接条件的数据才会出现在结果集(最常见的等值连接)
外连接:在内连接的基础上,将某个连接表不符合连接条件的记录加入结果集
3.自连接:自身表中的列关联自身表中的其它列
4.集合操作符
union:两个集合的并集,去掉重复内容
union all:两个集合的并集,重复内容取2次
minus:第一个集合减去和第二个集合相交的内容
intersect:两个集合的交集
三、连接查询操作
1).连接查询语法
select last_name,name
from s_emp,s_dept
where s_emp.dept_id=s_dept.id;
左外连接:A left outer join B-----中的(A为基准,遇到A中不符合条件的也加入, B中用null填充,包含左边表的全部行)
基本写法:
1. Select e.last_name,d.name
From s_emp e left outer join s_dept d
On e.dept_id=d.id;
Oracle特有写法:
2. Select e.last_name,d.name
From s_emp e ,s_dept d
Where e.dept_id(+)=d.id;
右外连接:A right outer join B -----(B为基准,遇到B中不符合条件的也加入 , A中用null填充,包含右边表的全部行)
全外连接(包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行)
查询所有员工名、员工部门名(员工没有分配部门、部门没有员工)?
select e.last_name,d.name
from s_emp e full outer join s_dept d
on e.dept_id=d.id;
select e.last_name,d.name
from s_emp e,s_dept d
where e.dept_id(+)=d.id(+); //Error,oracle没有全外连接特有写法
2)集合操作符
eg:
union:两个集合的并集,去掉重复内容
select e.last_name,d.name
from s_emp e,s_dept d
where e.dept_id=d.id(+)
union
select e.last_name,d.name
from s_emp e,s_dept d
where e.dept_id(+)=d.id;