在数据库原理之中对于多表查询实际上给出了两种表连接的概念。
内连接:等值连接。只有条件判断满足了才会显示出相应的数据信息;
外连接:数据表记录的全部显示,外连接分为三种,左外连接,右外连接,全外连接。
tbl_dept表中一共有两条记录,其中“测试部”没有任何的员工,所以这个一个没有员工的部门。
在tbl_emp中添加一条没有部门的员工数据。
使用emp表与dept表进行内连接处理:
select * from tbl_emp e join tbl_dept d on e.d_id=d.dept_id;
此时是一个等值判断“e.d_id=d.dept_id”(内连接)。通过结果我们可以发现只要不满足于此条件的数据都不会显示。
左外连接是要求左表的数据全部显示:
select * from tbl_emp e left join tbl_dept d on e.d_id=d.dept_id;
右外连接是要求右表的数据全部显示:
select * from tbl_emp e right join tbl_dept d on e.d_id=d.dept_id;
下面就利用外连接来做一个自身连接的处理操作,所谓的自身连接值的是数据表自己来关联自己。emp表中有一个mgr字段表示领导编号。
通过emp表得到雇员的姓名。
通过emp表找到领导的姓名。
第一步:查询每个雇员姓名、email。
select e.emp_name,e.email from tbl_emp e ;
第二步:查询领导的姓名,领导需要再次引入emp表,所以追加一个条件删除掉笛卡尔积。
select e.emp_name,e.email,m.emp_name from tbl_emp e join tbl_emp m
on e.mgr=m.emp_id
以上的操作使用的内连接,所以只要mgr字段的数据为空的雇员那么就不再进行显示了,所以这个是有问题的,所以应该使用外连接来进行控制。
select e.emp_name,e.email,m.emp_name from tbl_emp e left join tbl_emp m
on e.mgr=m.emp_id
外连接一定要根据你具体的程序查询要求来定义。
领取专属 10元无门槛券
私享最新 技术干货