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