sql关联查询

  • Post author:
  • Post category:其他



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


结果:




版权声明:本文为h1244982742原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。