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
(显示两个表全部内容)