阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle左连接、右连接、全外连接以及(+)号用法

133次阅读
没有评论

共计 2054 个字符,预计需要花费 6 分钟才能阅读完成。

阅读目录

  • 1、准备工作
  • 2、左外连接(LEFT OUTER JOIN/ LEFT JOIN)
  • 3、右外连接(RIGHT OUTER JOIN/RIGHT JOIN)
  • 4、全外连接(FULL OUTER JOIN/FULL JOIN)

1、准备工作

Oracle  外连接 (OUTER JOIN) 包括以下:

  • 左外连接(左边的表不加限制)
  • 右外连接(右边的表不加限制)
  • 全外连接(左右两表都不加限制)

对应 SQL:LEFT/RIGHT/FULL OUTER JOIN。通常省略 OUTER 关键字,写成:LEFT/RIGHT/FULL JOIN。

在左连接和右连接时都会以一张 A 表为基础表,该表的内容会全部显示,然后加上 A 表和 B 表匹配的内容。如果 A 表的数据在 B 表中没有记录。那么在相关联的结果集行中列显示为空值(NULL)。

对于外连接,也可以使用“(+)”来表示。关于使用(+)的一些注意事项:

  1. (+)操作符只能出现在 WHERE 子句中,并且不能与 OUTER JOIN 语法同时使用。
  2.  当使用(+)操作符执行外连接时,如果在 WHERE 子句中包含有多个条件,则必须在所有条件中都包含(+)操作符。
  3. (+)操作符只适用于列,而不能用在表达式上。
  4. (+)操作符不能与 OR 和 IN 操作符一起使用。
  5. (+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。

创建两张表,插入数据用于学习测试:

CREATE TABLE t_A (id   number,
name  VARCHAR2(10)
);

CREATE TABLE t_B (id   number,
name  VARCHAR2(10)
);

INSERT INTO t_A VALUES(1,'A');
INSERT INTO t_A VALUES(2,'B');
INSERT INTO t_A VALUES(3,'C');
INSERT INTO t_A VALUES(4,'D');
INSERT INTO t_A VALUES(5,'E');

INSERT INTO t_B VALUES(1,'AA');
INSERT INTO t_B VALUES(1,'BB');
INSERT INTO t_B VALUES(2,'CC');
INSERT INTO t_B VALUES(1,'DD');

Oracle 左连接、右连接、全外连接以及(+)号用法

2、左外连接(LEFT OUTER JOIN/ LEFT JOIN)

LEFT JOIN 是以左表的记录为基础的, 示例中 t_A 可以看成左表,t_B 可以看成右表, 它的结果集是 t_A 表中的全部数据,再加上 t_A 表和 t_B 表匹配后的数据。换句话说, 左表 (t_A) 的记录将会全部表示出来, 而右表 (t_B) 只会显示符合搜索条件的记录。t_B 表记录不足的地方均为 NULL。

select * from t_A a left join t_B b on a.id = b.id;
或
select * from t_A a left outer join t_B b on a.id = b.id;

Oracle 左连接、右连接、全外连接以及(+)号用法

用(+)来实现,这个 + 号可以这样来理解:+ 表示补充,即哪个表有加号,这个表就是匹配表。如果加号写在右表,左表就是全部显示,所以是左连接。

Select * from t_A a,t_B b where a.id=b.id(+);

Oracle 左连接、右连接、全外连接以及(+)号用法

回到目录

3、右外连接(RIGHT OUTER JOIN/RIGHT JOIN)

和 LEFT JOIN 的结果刚好相反, 是以右表 (t_B) 为基础的。它的结果集是 t_B 表所有记录,再加上 t_A 和 t_B 匹配后的数据。t_A 表记录不足的地方均为 NULL。

select * from t_A a right join t_B b on a.id = b.id;
或
select * from t_A a right outer join t_B b on a.id = b.id;

Oracle 左连接、右连接、全外连接以及(+)号用法

用(+)来实现,这个 + 号可以这样来理解:+ 表示补充,即哪个表有加号,这个表就是匹配表。如果加号写在左表,右表就是全部显示,所以是右连接。

Select * from t_A a,t_B b where a.id(+)=b.id;

Oracle 左连接、右连接、全外连接以及(+)号用法

4、全外连接(FULL OUTER JOIN/FULL JOIN)

    左表和右表都不做限制,所有的记录都显示,两表不足的地方均为 NULL。全外连接不支持(+)写法。

select * from t_A a full join t_B b on a.id = b.id;
或
select * from t_A a full outer join t_B b on a.id = b.id;

Oracle 左连接、右连接、全外连接以及(+)号用法

补充

select * from t_A a,t_B b where a.id = b.id;
select * from t_A a join t_B b on a.id = b.id;

Oracle 左连接、右连接、全外连接以及(+)号用法

select * from t_A a where a.id in (select b.id from t_B b);
select * from t_A a where exists (select 1 from t_B b where a.id = b.id);

Oracle 左连接、右连接、全外连接以及(+)号用法

更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-10/135730.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计2054字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中