为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 左外连接、右外连接的差别[参考]

左外连接、右外连接的差别[参考]

2018-08-03 7页 doc 20KB 11阅读

用户头像

is_482581

暂无简介

举报
左外连接、右外连接的差别[参考]左外连接、右外连接的差别[参考] 左外连接、右外连接的区别 左外连接、右外连接的区别,,, 外连接: 要把不匹配的记录也要找出来(一个都不能少) 会使用一方表中的所有记录去和另一表中的记录按条件匹配,空值也会匹配,这个表中的所有记录都会显示,数据库会模拟出记录去和那些不匹配的记录匹配。 语法: 左外连接: outer join: from t1 left join t2 on t1.c1=t2.c2 右外连接: from t1 right join t2 on t1.c1=t2.c2 对于外连接(left...
左外连接、右外连接的差别[参考]
左外连接、右外连接的差别[参考] 左外连接、右外连接的区别 左外连接、右外连接的区别,,, 外连接: 要把不匹配的也要找出来(一个都不能少) 会使用一方中的所有记录去和另一表中的记录按条件匹配,空值也会匹配,这个表中的所有记录都会显示,数据库会模拟出记录去和那些不匹配的记录匹配。 语法: 左外连接: outer join: from t1 left join t2 on t1.c1=t2.c2 右外连接: from t1 right join t2 on t1.c1=t2.c2 对于外连接(left)时,t1必须做驱动表 对于外连接 (right) ,t2做驱动表 没有匹配记录的,会依然补一个null,然后将其放入结果集中 外连接的结果集包含内连接,他的结果集是内连接的结果集+匹配不上的记录 一、左外连接:在这里e表是驱动表,m表是匹配表,将前面的e表(驱动表)中所有列全都显示出来 如果换成(+)形式的写法,(+)放在匹配表一方,是要将驱动表中的所有记录全都列出来 select e.first_name employee, m.first_name manager from s_emp e left join s_emp m on e.manager_id = m.id 1 select e.first_name employee, m.first_name manager 2 from s_emp e , s_emp m 3 where e.manager_id = m.id(+); 二、右外连接: 1 select e.ename,e.deptno,d.deptno 2 from emp e right join dept d 3* on e.deptno = d.deptno; d是驱动表,e是匹配表,将d表(驱动表)的所有记录全都显示出来 select e.ename,e.deptno,d.deptno from emp e,dept d where e.deptno(+)=d.deptno; 在这里d表是驱动表,在匹配表后面加(+) d是驱动表,e是匹配表,将d表(驱动表)的所有记录全都显示出来 匹配前过滤,匹配后过滤, 如果加and e.ename(+)='SMITH' select d.dname from emp e,dept d where e.deptno(+)=d.deptno and e.ename(+)='SMITH' and e.empno is null; 这两个过滤条件,如果有(+)在连接前做,没有的在连接后做,相对于where 内连接:匹配 外连接用来解决什么问题,与不匹配有关系的时候就想到外连接 :右外连接使用right join 。。。on,(+)放在=的左边 左外连接使用 left join。。。on,(+)放在=的右边 三、外连接+where is null,解决的是空记录的问题,因为,有的时候,我们就是要使用空的这条记录 1 select e.ename,e.deptno,d.deptno 2 from emp e right join dept d 3 on e.deptno = d.deptno 4* where e.empno is null 注意:4* where e.empno is null,一定是匹配表中的字段 例:右外连接查询员工和领导 1 select e.first_name,m.first_name 2 from s_emp e right join s_emp m 3* on e.manager_id = m.id 结果: FIRST_NAME FIRST_NAME ------------------------- ------------------------- Audry Carmen Mark Carmen Midori Carmen LaDoris Carmen Antoinette LaDoris Ben LaDoris Roberta LaDoris Molly LaDoris Marta LaDoris Yasmin Midori Andre Midori FIRST_NAME FIRST_NAME ------------------------- ------------------------- Mai Midori Henry Midori Colin Midori Mark Audry Elena Molly George Molly Vikram Roberta Akira Roberta Chad Ben Alexander Ben FIRST_NAME FIRST_NAME ------------------------- ------------------------- Radha Antoinette Eddie Antoinette Sylvie Marta Bela Marta Colin Henry Yasmin Mai Andre Elena George FIRST_NAME FIRST_NAME ------------------------- ------------------------- Akira Vikram Chad Alexander Eddie Radha Bela Sylvie 41 rows selected. where 。。。is null。 select e.first_name,m.first_name 2 from s_emp e right join s_emp m 3 on e.manager_id = m.id 4* where e.id is null SQL> / FIRST_NAME FIRST_NAME ------------------------- ------------------------- Mark Audry Colin Henry Yasmin Mai Andre Elena George Akira Vikram FIRST_NAME FIRST_NAME ------------------------- ------------------------- Chad Alexander Eddie Radha Bela Sylvie 17 rows selected. 隐式数据转换: SQL> select first_name,nvl(manager_id,'Boss') 2 from s_emp; select first_name,nvl(manager_id,'Boss');//会报错,因为隐式 数据转换,boss不能被转为数字,所有要: 1 select first_name,coalesce(to_char(manager_id),'Boss') 2* from s_emp 使用to_char来显示转换 将Carmen的manger的名字用boss填充 1 select e.first_name employee, nvl(m.first_name,'Boss') manager 2 from s_emp e left join s_emp m 3* on e.manager_id = m.id
/
本文档为【左外连接、右外连接的差别[参考]】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索