Oracle中连接与加号(+)的使用

转自:https://www.cnblogs.com/langtianya/p/7516045.html

 

1、左外连接(Left outer join/ left join)

      left join是以左表的记录为基础的,左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录。右表记录不足的地方均为NULL.

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

例子:select a.*,b.bname from student_drb a, class_drb b where a.bno=b.bno(+)  -------------- 左连接,注意: 用(+) 就要用关键字where

2、右外连接(right outer join/ right join)

和left join的结果刚好相反,是以右表为基础的, 显示右表的所有记录,在加上左表和右表匹配的结果。 左表不足的地方用NULL填充.

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

例子:select a.*,b.bname from student_drb a, class_drb b where a.bno(+)=b.bno ---------------- 右连接,注意: 用(+) 就要用关键字where

3、全连接(full join)

        左表和右表都不做限制,所有的记录都显示,两表不足的地方用null 填充。 全外连接不支持(+)这种写法。

4、等值查询

例子:select a.*,b.bname from student_drb a, class_drb b where a.bno=b.bno

查询出的结果是左表和右表中bno字段相等的显示出来。也即出来的结果肯定比左、右、全连接的结果要少或相等。

5、内联接查询   inner join  on (与等值查询结果是一样的),但效率要比等值查询高,因为等值查询是先笛卡尔积,再根据条件查找。

6、交叉查询cross join (如果需要条件则用where而不用on)

交叉查询是用的笛卡尔积,效率较慢select * from student_drb cross join class_drb

等价于select * from student_drb,class_drb

posted @ 2019-01-07 15:09  爱睡觉的Koala  阅读(940)  评论(0编辑  收藏  举报