SQL> select * from t1;


        ID NAME

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

         1 zs

         2 ls

         3 ww

         1 aaa



SQL> select * from t2;


        ID NAME

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

         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;

        ID NAME       NAME

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

         1 zs         haha

         2 ls         hehe

         1 aaa        haha


3.多表查询


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


        ID NAME       NAME

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

         1 zs         haha

         2 ls         hehe

         1 aaa        haha


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



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

二. 外连接(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

         3 ww

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



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


        ID NAME               ID NAME

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

         1 aaa                 1 haha

         1 zs                  1 haha

         2 ls                  2 hehe

         3 ww

(上两种结果一致)


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



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


        ID NAME               ID NAME

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

         1 zs                  1 haha

         2 ls                  2 hehe

         1 aaa                 1 haha

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



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


        ID NAME               ID NAME

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

         1 zs                  1 haha

         2 ls                  2 hehe

         1 aaa                 1 haha



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;


        ID NAME               ID NAME

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

         1 aaa                 1 haha

         1 zs                  1 haha

         2 ls                  2 hehe

         3 ww

                               5 heihei


(显示两个表全部内容)