mysql两表左关联_mysql中⼀张表LEFTJOIN左关联两张表语
句
先看实例
代码如下
复制代码
SELECT p.price, pd.name, m.manufacturers_name FROM (products p
LEFT JOIN products_description pd ON p.products_id = pd.products_id)
LEFT JOIN manufacturers m ON p.manufacturers_id = m.manufacturers_id
关于 “A LEFT JOIN B ON 条件表达式” 的⼀点提醒
ON 条件(“A LEFT JOIN B ON 条件表达式”中的ON)⽤来决定如何从 B 表中检索数据⾏。
如果 B 表中没有任何⼀⾏数据匹配 ON 的条件,将会额外⽣成⼀⾏所有列为 NULL 的数据
sql left join 多表连接
在匹配阶段 WHERE ⼦句的条件都不会被使⽤。仅在匹配阶段完成以后,WHERE ⼦句条件才会被使⽤。它将从匹配阶段产⽣的数据中检索过滤。
联合查询效率分析
user表:
id | name
---------
1 | libk
2 | zyfon
3 | daodao
user_action表:
user_id | action
---------------
1 | jump
1 | kick
1 | jump
2 | run
4 | swim
sql:
代码如下
复制代码
select id, name, action from user as u
left join user_action a on u.id = a.user_id
result:
id | name | action
--------------------------------
1 | libk | jump ①
1 | libk | kick ②
1 | libk | jump ③
2 | zyfon | run ④
3 | daodao | null ⑤
分析:
注意到user_action中还有⼀个user_id=4, action=swim的纪录,但是没有在结果中出现,
⽽user表中的id=3, name=daodao的⽤户在user_action中没有相应的纪录,但是却出现在了结果集中
因为现在是left join,所有的⼯作以left为准.
结果1,2,3,4都是既在左表⼜在右表的纪录,5是只在左表,不在右表的纪录
结论:我们可以想象left join 是这样⼯作的
从左表读出⼀条,选出所有与on匹配的右表纪录(n条)进⾏连接,形成n条纪录(包括重复的⾏,如:结果1和结果3),如果右边没有与on条件匹配的表,那连接的字段都是null.
然后继续读下⼀条。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论