一、Oracle连接类型
☆说明:按照自己的理解划分的类型,并不是官方定义。
1、内连接
①等值连接
②非等值连接
③自然连接
2、外连接
①左外连接
②右外连接
③全外连接
二、表数据准备
t表 | |
字段a | 字段b |
1 | 18 |
2 | 28 |
3 | 38 |
4 | NULL |
t1表 | |
字段x | 字段y |
1 | 9 |
2 | 8 |
3 | 7 |
三、内连接
1、内连接是通过inner join进行多表关联,展示查询结果,示例如下:
SQL>select * from t inner join t1 on t.a=t1.x;
效果展示:
说明:通过t表inner join t1表,我们得到了上图的展示效果。
2、同样实现上图中的查询结果,我们还可以利用等值连接的方式实现
SQL>select * from t,t1 where t.a=t1.x;
3、inner join可以简化为join,但是实际使用中不建议这样书写,因为可读性不高。
4、通俗的理解是等值连接、非等值连接、自然连接都是内连接这个大范畴的具体表现形式。
5、不等值连接可以用where和inner join两种方式实现
SQL>select * from t inner join t1 on t.a<>t1.x;
SQL>select * from t,t1 where t.a<>t1.x;
上面这两句sql的展示结果是相同的。
6、自连接(self join)是SQL语句中经常要用的连接方式,使用自连接可以将自身表的一个镜像当作另一个表来对待,从而能够得到一些特殊的数据。
例如:select * from employee worker,employee manger where worker.id=manger.id
四、外连接
1、左外连接:通过关键字left join实现,全写是left out join,实际操作过程中一般写作left join,还可以通过在右侧连接值后加(+)来代替,左连接的意思是两表关联,显示查询数目以左表为准,但是约束受到右表的影响,对于不符合等值的情况,用NULL代替,如下例:
说明:首先通过等值连接,正常把前3行数据关联显示出来,之所以显示第4行是因为sql语句是左连接,正如我们所述,数据展示条数以左表为准,但是不符合要求的统统用NULL进行了填充。
2、右连接:与左连接相反,核心思想相同,只要熟练掌握左连接,右连接自然无师自通。
3、关于(+)使用的注意事项:
(+)操作符只能出现在where子句中,并且不能与outer join语法同时使用。
当使用(+)操作符执行外连接时,如果在where子句中包含有多个条件,则必须在所有条件中都包含(+)操作符
(+)操作符只适用于列,而不能用在表达式上。
(+)操作符不能与or和in操作符一起使用。
(+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。
4、全外连接:通过full join关键字连接实现,左边和右表都不受限制,两表都不满足条件的情况都用NULL填充,全外连接不支持(+)这种写法,即不能在左表和右表两边都写(+)。
SQL> select * from t full join t1 on t.a=t1.x;