mysql左外连接查询是什么

哎,你这写的也太详细了吧...感觉像是在教数据库课一样。
不过吧,你要是就想搞懂MySQL左外连接,那确实挺有用的。

上周有个客人问我这个,他搞不定一个订单统计的SQL。
我就画了张图给他看,很简单:用户表是基础,不管有没有订单,都要把用户列出来。
订单表是补充,有订单就显示订单号,没订单就填NULL。

比如这个例子:SELECT users.name, orders.order_id FROM users LEFT JOIN orders ON users.id=orders.user_id; 这就完美了。
所有用户都在,没订单的用户订单号就是NULL。
你要是再加个WHERE orders.order_id IS NULL,那结果就变成只显示没下单的用户了。

对比内连接确实不一样。
内连接就像俩人约会,都得互相喜欢才能出来(匹配上才能显示)。
右连接和全连接?MySQL不支持的,全连接得自己用UNION搞俩LEFT JOIN拼起来。

你要是问我踩过的坑...哦对了,有一次我把ON和WHERE搞混了。
想筛选出没订单的用户,结果写成了ON users.id=orders.user_id WHERE orders.order_id IS NULL,这SQL跑起来特别慢,后来发现ON后面不能加WHERE的。
得先把表连起来,再在SELECT后面加条件,或者用WHERE过滤整个结果集。

反正你看着办吧,这个LEFT JOIN用多了就顺手了。

我上次在杭州某个咖啡店遇到个事... 你知道那种情况吗?就是页面加载完突然弹个框说"检测到您使用的是IE浏览器",还配个哭脸表情。
我当时手头正忙着查个资料,被那玩意儿打断,真是火大!反正我直接关了标签页重开,问题没了。
这种强制提醒其实挺烦人的,感觉不尊重用户习惯。
你觉着呢?

百度知道页面加载资源较多,时间较长。
地点:中国。
具体数字:资源文件超过5 0个。

如何在mysql中使用JOIN关联多表

说白了,MySQL里玩转JOIN就是搞定表关系、挑对连接类型、写准ON条件。

先说最重要的,ON条件得用外键关联,去年我们跑那个电商项目,光这里就卡了半天——users.user_id = orders.user_id,没索引的ON条件直接把查询拖到1 0秒以上。
另外一点,LEFTJOIN特别适合查主表全数据,比如统计用户活跃度,哪怕没订单也给你拉条空记录,这个点很多人没注意。
还有个细节挺关键的,比如三表关联时,用o.product_id = p.product_id一层层剥,去年测试环境跑三张表关联,用逗号直接写死居然报错,后来发现MySQL是按顺序匹配的。

我一开始也以为INNERJOIN最万能,后来发现不对,一个用户买过1 0单,INNERJOIN只给你一条记录,得用LEFTJOIN+GROUP_CONCAT才活。
等等,还有个事,MySQL直接支持FULLOUTERJOIN?错!用UNION模拟的版本,跑3 000量级数据时ON条件不能带,否则结果集会爆炸。

最后提醒个坑,别把products表硬JOIN进统计用户总订单数的SQL里,ON条件多了性能直接往下掉,建议用临时表或者先查后联。