Skip to content

db - join

A表与B表所显示的记录数为 1:1 或 1:0,A表的所有记录都会显示,B表只显示符合条件的记录。

如果B表符合条件的记录数大于1条,就会出现1:n的情况,这样left join后的结果,记录数会多于A表的记录数。

内连接

内连接查询的是表的交集,也就是表的公共部分

就是ON后面的条件都有的数据

sql
SELECT * from A join B on A.id=B.id
SELECT * from A inner join B on A.id=B.id
SELECT * from A,B on A.id=B.id

左连接

左连接以左表为基础(全部返回),根据on 后给出的条件将两表连接起来(没有匹配的返回null),最终的结果会将左表所有的信息列出,而右表只列出on条件与左表满足的部分,其余部分为空。

sql
SELECT * from A 
left join B on A.id=B.id;

右连接

右连接以右表为基础(全部返回),根据on 后给出的条件将两表连接起来(没有匹配的返回null),最终的结果会将右表所有的信息列出,而左表只列出on条件与右表满足的部分,其余部分为空。

SELECT * from A 
RIGHT join B on A.id=B.id;

全连接

MySQL暂不支持这种语句,不过可以使用union将两个结果集“堆一起”,利用左连接,右连接分两次将数据取出,然后用union将数据合并去重

使用多个JOIN

问题

join语法后的on条件,只能是join的表和from的表吗?

JOINON 条件中,可以引用:

  1. 当前 JOIN 表的字段。
  2. FROM 表的字段。
  3. 其他已经连接的表的字段。

多个Join on(表连接) 和Where间的执行顺序(nest loop join机制)

join的表关联数据有多条,怎么只匹配一条

上次更新时间:

最近更新