天天看点

表连接

SQL> select * from t1;

        ID NAME

---------- ----------

         1 zs

         2 ls

         3 ww

         1 aaa

SQL> select * from t2;

         1 haha

         2 hehe

一. 内连接(Inner Join/Join)

1.内连接查询

SQL> select a.id,a.name,b.name from t1 a inner join t2 b on a.id=b.id;

        ID NAME       NAME

---------- ---------- ----------

         1 zs         haha

         2 ls         hehe

         1 aaa        haha

2.内连接省略inner

SQL> select a.id,a.name,b.name from t1 a  join t2 b on a.id=b.id;

3.多表查询

SQL> select a.id,a.name,b.name from t1 a,t2 b where a.id=b.id;

(三种查询方法现实的内容是一样的)

========================================================

二. 外连接(Outer Join)

外连接分为三种: 左外连接,右外连接,全外连接。 对应SQL:LEFT/RIGHT/FULL OUTER JOIN。 通常省略outer 这个关键字。 写成:LEFT/RIGHT/FULL JOIN。

对于外连接, 也可以使用“(+) ”来表示

注意:

(+)操作符只能出现在where子句中

 当使用(+)操作符执行外连接时,如果在where子句中包含有多个条件,则必须在所有条件中都包含( +)操作符

(+)操作符只适用于列,而不能用在表达式上。

(+)操作符不能与or和in操作符一起使用。

(+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。 

2.1左外连接(Left outer join/ left join)

SQL> select * from t1 a left join t2 b on a.id=b.id;

        ID NAME               ID NAME

---------- ---------- ---------- ----------

         1 aaa                 1 haha

         1 zs                  1 haha

         2 ls                  2 hehe

(以左面的为基表都显示,右面的只显示匹配的,t1为基表,t2为匹配表)

SQL> select * from t1 a,t2 b where a.id=b.id(+);  (+ 那个表有加号位匹配表)

(上两种结果一致)

2.2 右外连接(right outer join/ right join)

SQL> select * from t1 a right join t2 b on a.id=b.id;

(右面的表为基表,左面的为匹配表)

SQL> select * from t1 a ,t2 b where a.id(+)=b.id;

2.3 全外连接(full outer join/ full join)

SQL> insert into t2 values(5,'heihei');

SQL> select * from t1 a full join t2 b on a.id=b.id;

                               5 heihei

(显示两个表全部内容)

     本文转自陈继松 51CTO博客,原文链接:http://blog.51cto.com/chenjisong/1737386,如需转载请自行联系原作者