oracle 自身连接查询,Oracle 连接查询

结果如下图:

test.jsp?url=http%3A%2F%2Fimg.blog.csdn.net%2F20140208162745703%3Fwatermark%2F2%2Ftext%2FaHR0cDovL2Jsb2cuY3Nkbi5uZXQvamlhbmt1bmtpbmc%3D%2Ffont%2F5a6L5L2T%2Ffontsize%2F400%2Ffill%2FI0JBQkFCMA%3D%3D%2Fdissolve%2F70%2Fgravity%2FSouthEast&refer=http%3A%2F%2Fblog.csdn.net%2Fxunzaosiyecao%2Farticle%2Fdetails%2F18988167

3、自身连接

自身连接是指在同一个表或者视图中进行连接,相当于同一个表作为两个或多个表使用。

例如:查询所有员工的员工号、员工名与该员工领导的员工名、员工号:

select work.empno,work.ename,manager.empno,manager.ename

from emp work

join emp manager

on work.mgr=manager.empno结果如下图:

test.jsp?url=http%3A%2F%2Fimg.blog.csdn.net%2F20140208162938031%3Fwatermark%2F2%2Ftext%2FaHR0cDovL2Jsb2cuY3Nkbi5uZXQvamlhbmt1bmtpbmc%3D%2Ffont%2F5a6L5L2T%2Ffontsize%2F400%2Ffill%2FI0JBQkFCMA%3D%3D%2Fdissolve%2F70%2Fgravity%2FSouthEast&refer=http%3A%2F%2Fblog.csdn.net%2Fxunzaosiyecao%2Farticle%2Fdetails%2F18988167

三、外连接

外连接是指在内连接的基础上,将某个连接表中不符合连接条件的记录加入到结果集中。

在左外连接和右外连接时都会以一张表为基表,该表的内容会全部显示,然后加上两张表匹配的内容。 如果基表的数据在另一张表没有记录。 那么在相关联的结果集行中列显示为空值(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条件的数据。

结果如下图:

test.jsp?url=http%3A%2F%2Fimg.blog.csdn.net%2F20140208163120031%3Fwatermark%2F2%2Ftext%2FaHR0cDovL2Jsb2cuY3Nkbi5uZXQvamlhbmt1bmtpbmc%3D%2Ffont%2F5a6L5L2T%2Ffontsize%2F400%2Ffill%2FI0JBQkFCMA%3D%3D%2Fdissolve%2F70%2Fgravity%2FSouthEast&refer=http%3A%2F%2Fblog.csdn.net%2Fxunzaosiyecao%2Farticle%2Fdetails%2F18988167

小注:关于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;结果如下图:

test.jsp?url=http%3A%2F%2Fimg.blog.csdn.net%2F20140208163139312%3Fwatermark%2F2%2Ftext%2FaHR0cDovL2Jsb2cuY3Nkbi5uZXQvamlhbmt1bmtpbmc%3D%2Ffont%2F5a6L5L2T%2Ffontsize%2F400%2Ffill%2FI0JBQkFCMA%3D%3D%2Fdissolve%2F70%2Fgravity%2FSouthEast&refer=http%3A%2F%2Fblog.csdn.net%2Fxunzaosiyecao%2Farticle%2Fdetails%2F18988167

3、 全连接

全外连接是指在内外连接的基础上,将连接操作符两侧表中不符合的记录加入到结果集中。

例如,查询所有的部门名和员工名:

select dname,ename

from emp

full join dept

on emp.deptno=dept.deptno结果如下图:

test.jsp?url=http%3A%2F%2Fimg.blog.csdn.net%2F20140208163231500%3Fwatermark%2F2%2Ftext%2FaHR0cDovL2Jsb2cuY3Nkbi5uZXQvamlhbmt1bmtpbmc%3D%2Ffont%2F5a6L5L2T%2Ffontsize%2F400%2Ffill%2FI0JBQkFCMA%3D%3D%2Fdissolve%2F70%2Fgravity%2FSouthEast&refer=http%3A%2F%2Fblog.csdn.net%2Fxunzaosiyecao%2Farticle%2Fdetails%2F18988167

小注:

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中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值