1.内连接
是最普遍的一种连接方式,选出相连的两张表都互相满足连接条件的数据。
写法:select a
inner join
b on a.id=b.aid (其中inner可忽略)
举例:a表:
b表:
查询语句:SELECT * from a inner join b on a.id=b.id。
将a表的每一条数据拿出来,遍历b表进行对比,满足条件数据的返回。
结果:
2.外连接
比较常用的且非常有用的连接方式,有3种外连接方式。
2.1左外连接
写法:select * from a
left outer join
b on a.id=b.aid (outer可忽略)
意思就是查询结果显示a表所有数据,加上b表满足a.id=b.aid的数据,若b表没有满足条件的数据,设为null。
举例:a表:
b表:
查询语句:SELECT * from a left outer join b on a.id=b.id。
将a表的每一条数据拿出来,遍历b表进行对比,将b表中满足条件的数据加到a表数据后面作为查询结果,b表中不满足条件的数据把null加到a表数据后面作为查询结果。
结果:
2.2 右外连接
写法:select * from a
right
outer join
b on a.id=b.aid (outer可忽略)
意思就是查询结果显示b表所有数据,加上a表满足a.id=b.aid的数据,若a表没有满足条件的数据,设为null。
举例:a表:
b表:
查询语句:SELECT * from a right outer join b on a.id=b.id。
将b表的每一条数据拿出来,遍历a表进行对比,将a表中满足条件的数据加到b表数据后面作为查询结果,a表中不满足条件的数据把null加到b表数据后面作为查询结果。
结果:
其实右外连接和左外连接都一个模子里刻出来的,将表对换下右外连接马上变左外连接。
2.3 全连接
全连接会返回相关联的两张表的所有关联数据,如果某行在另一张表中没有匹配的值,则设为null。
相当于左外连接+右外连接。
写法示例:
SELECT * from a full outer join b on a.id=b.id。(outer可忽略)
注意:
mysql不支持全连接
3 自连接
自连接意思是把自身表当成另外一张表看待,互相关联查询,连接方式可以使用以上的内外连接。
这种连接方式可以解决很多奇怪的问题。
a表:
b表:
查询语句:SELECT ab.* from a ab,a ac where ab.id>ac.id
结果: