结果如下图:
3、自身连接
自身连接是指在同一个表或者视图中进行连接,相当于同一个表作为两个或多个表使用。
例如:查询所有员工的员工号、员工名与该员工领导的员工名、员工号:
select work.empno,work.ename,manager.empno,manager.ename
from emp work
join emp manager
on work.mgr=manager.empno结果如下图:
三、外连接
外连接是指在内连接的基础上,将某个连接表中不符合连接条件的记录加入到结果集中。
在左外连接和右外连接时都会以一张表为基表,该表的内容会全部显示,然后加上两张表匹配的内容。 如果基表的数据在另一张表没有记录。 那么在相关联的结果集行中列显示为空值(NULL)。
1、 左外连接
左外连接是指在内连接的基础上,将连接操作符左侧表中不符合连接条件的记录加入到结果集中,与之对应的连接操作符右侧表列用NULL填充。
例如,查询10号部门的部门名 、员工号、员工名和所有其他部门的名称:
select dname,empno,ename
from dept
left join emp
on dept.deptno=emp.deptno
and dept.deptno=10;
在这个例子中,首先要保证的是:我要查出10号部门的部门名称,即使10号部门中一个员工也没有,也要显示10号部门所有的部门名称,而部门名称在dept表中,故dept表放在左侧,有匹配数据的前三行就是用Join时,查出的数据,即满足On条件的数据。
结果如下图:
小注:关于left join的个人理解
假如说你有两个表,资金结算单据(JSDJXX)、位信息(DWXX)
一个表用来存放资金结算单据的信息(资金结算单据中肯定有单位嘛,但资金结算单据中得单位信息肯定是编号),另一个表用来存放单位信息(单位表里的数据比如会有:单位编号、单位名称、单位内码等等),现在我要查资金结算单据的信息,同时我又想让资金结算单据中的单位信息不显示编号,而是显示单位名称,这时候,我就需要用left join来关联单位信息表,因为我需要的数据是资金结算单据中的信息,即使在单位信息表表查不到某个单位编号对应的单位名称,这条数据我还是要显示的嘛,所以用left join而不是join。
SELECT JSDJXX_DWBH,DWXX_DWMC
from JSDJXX
left JOIN DWXX ON JSDJXX_DWBH = DWXX_DWBH
通过执行上面的SQL,获取ds,我就可以在往Gridcontrol上绑定数据的时候,绑定单位名称。
比如:
SELECT JSDJXX_DWBH,DWXX_DWMC as DWMC
from JSDJXX
left JOIN DWXX ON JSDJXX_DWBH = DWXX_DWBH 在Dev Gridcontrol上绑定列名的时候就可以用DWMC,即可。
2、 右外连接
右外连接是指在内连接的基础上,将连接操作符右侧表中不符合连接条件的记录加入到结果集中,与之对应的连接操作符左侧表列用NULL填充。
例如,查询20号部门的部门名称及其员工号、员工名和所有其他部门的员工号、员工名:
select empno ,ename,dname
from dept
right join emp
on dept.deptno=emp.deptno
and dept.deptno=20;结果如下图:
3、 全连接
全外连接是指在内外连接的基础上,将连接操作符两侧表中不符合的记录加入到结果集中。
例如,查询所有的部门名和员工名:
select dname,ename
from emp
full join dept
on emp.deptno=dept.deptno结果如下图:
小注:
1、左右外连接小结:
左外连接(LEFT OUTER JOIN)告诉DBMS生成的结果表中,除了包括匹配行外,还包括JOIN关键字(FROM子句中)左边表的不匹配行。左外连接实际上可以表示为:
左外连接 = 内连接 + 左边表中失配的元组
其中,缺少的右边表中的属性值用NULL表示。
右外连接(RIGHT OUTER JOIN)告诉DBMS生成的结果表中,除了包括匹配行外,还包括JOIN关键字(FROM子句中)右边表的不匹配行。右外连接实际上可以表示为:
右外连接 = 内连接 + 右边表中失配的元组
其中,缺少的左边表中的属性值用NULL表示。
全外连接(FULL OUTER JOIN)告诉DBMS生成的结果表中,除了包括匹配行外,还包括JOIN关键字(FROM子句中)左边表和右边表的不匹配行。全外连接实际上可以表示为:
全外连接 = 内连接 + 左边表中失配的元组 + 右边表中失配的元组。
其中,缺少的左边表或者右边表中的属性值用NULL表示。
2、类似文章推荐:点击打开链接
3、小结
下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。
JOIN: 如果表中有至少一个匹配,则返回行。例子:点击打开链接
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行。例子:点击打开链接
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行。例子:点击打开链接
FULL JOIN: 只要其中一个表中存在匹配,就返回行。例子:点击打开链接
本文原创发布php中文网,转载请注明出处,感谢您的尊重!