表a:
表b:
1、全连接
将各个表用逗号隔开,就指定了一个全连接。全连接得到的数据是两个表的行数的乘积
select * from a,b ;
select count(*) from a,b ;
select * from a,b where a.id = b.id;
指定连接条件的全连接叫等值连接,得到的数据是只满足条件的数据。
2、join连接
(1)内连接
内连接在不指定连接条件时,得到的数据也是两表数据行数的乘积。
select * from a INNER JOIN b;
select COUNT(*) from a inner join b;
select * from a INNER JOIN b on a.id = b.id;
指定连接条件的内连接得到的结果与指定连接条件的全连接结果相同,但内连接使用on添加连接条件,全连接使用where添加连接条件。
(2)左外连接
select * from a LEFT OUTER JOIN b on a.id = b.id ;
左外连接除了满足条件的匹配行外,还包括左表中不匹配的行,此时右表中选择的列设置为null,得到的数据量是左表中的行数。
(3)右外连接
select * from a right OUTER JOIN b on a.id = b.id ;
右外连接除了满足条件的匹配行外,还包括右表中不匹配的行,此时左表中选择的列设置为null,得到的数据量是右表中的行数。
(4)自然连接
自然连接还包括自然左外连接、自然右外连接。
select语句中只选取一个用来连接表的列时,自然连接可以代替内连接,同样在只选取一个列用来连接表时,可以使用自然左外连接代替左外连接,使用自然右外连接代替右外连接,区别在于自然连接会将连接表的列合并为一列,而外连接会将两表中的连接表的列仍然作为两列。
select * from a NATURAL JOIN b ;
自然左外连接
select * from a NATURAL LEFT OUTER JOIN b ;
自然右外连接
select * from a NATURAL right OUTER JOIN b ;
3、交叉连接
交叉连接的结果和全连接记忆不加连接条件的内连接结果相同,数据量为两表行数乘积。
select * from a cross JOIN b ;
select COUNT(*) from a cross join b ;