1、内连接

1-1.等值连接

含义:连接时两个表都只返回符合条件的记录。
MySQL:
关键字:inner join on
语句:select * from A_table a inner join B_table b on a.a_id = b.b_id;
SQL sever:同上
Oracle:可简写为join

1-2.不等值连接

where 或者on 后面列比较不是用=,而是用一下这些 <>,>,<,>=,<=,like,in,between on,not 等等

1-3.自然连接

含义:即自然连接是在两张表中寻找那些数据类型和列名都相同的字段,然后自动地将他们连接起来,并返回所有符合条件的结果。(重复属性被合并)
MySQL:
1-3-1.关键词:natural (left/right)join(不能加限定条件)
语句:select *from T_student natural join T_class
1-3-2.关键词:using(基于两表有同名列 ,数据类型列名都相同)
语句:select * from A join B using(同名列【同名列,……】)
注意事项:查询必须是等值连接.,在select字句或者using字句中都不能为同名列指定表名或别名 。
SQL sever:同上
Oracle:同上

2、外连接

2-1.左(外)连接

含义:左表记录不管符不符合条件全显示;右表只显示符合搜索条件的记录,和左表连接的空地方显示NULL。
MySQL
关键字:left (outer) join on
语句:select * from A_table a left join B_table b on a.a_id = b.b_id;
SQL sever:同上
Oracle:select * from t_A a,t_B b where a.id(+)=b.id;
对于外连接, 也可以使用“(+) ”来表示。 关于使用(+)的一些注意事项:
(+)操作符只能出现在WHERE子句中,并且不能与OUTER JOIN语法同时使用。当使用(+)操作符执行外连接时,如果在WHERE子句中包含有多个条件,则必须在所有条件中都包含(+)操作符。
(+)操作符只适用于列,而不能用在表达式上。
(+)操作符不能与OR和IN操作符一起使用。
(+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。

2-2.右(外)连接

含义:左表只显示符合搜索条件的记录,和右表连接的空地方显示NULL;右表全显示。
MySQL
关键字:right (outer) join on
语句:select * from A_table a right outer join B_table b on a.a_id = b.b_id;
SQL sever:同上
Oracle:select * from t_A a,t_B b where a.id=b.id(+);

2-3.全(外)连接

含义:左右表记录都显示,空的地方都显示NULL。
MySQL
目前暂不支持。但可以通过先左右外连接,然后union将重复数据合并达到全连接目的。
SQL sever
关键词:full (outer) join on
语句:select * from T_student s full join T_class c on s.classId = c.classId
Oracle:同上

3、交叉连接(笛卡儿积)

含义:不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积(如a表3行*b表4行=12行);如果带WHERE,往往会先生成两个表行数乘积的数据表,然后才根据where条件从中选择。
MySQL
关键词:cross join where(不用ON子句)
语句:select *from T_student cross join T_class
SQL sever:同上
Oracle:同上

4、自连接

含义:连接的表是同一张表,使用自连接可以将自身表的一个镜像当作另一个表来对待,从而能够得到一些特殊的数据。
经典例子:
对公交线路表route进行自连接。你可以知道每条公交线路的任意两个可联通的车站。
SELECT * FROM route R1, route R2 WHERE R1.num=R2.num AND R1.company=R2.company