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的表吗?
在 JOIN 的 ON 条件中,可以引用:
- 当前
JOIN表的字段。 FROM表的字段。- 其他已经连接的表的字段。
多个Join on(表连接) 和Where间的执行顺序(nest loop join机制)
join的表关联数据有多条,怎么只匹配一条