图解 SQL 中 JOIN 的各种用法

说到SQL中的JOIN操作,这才是数据库的亮点。
记得刚开始的时候,我对此很困惑。
后来我慢慢的想出了绳子,现在我已经无法停止谈论它了。

首先,INNER JOIN,这个东西就像表里和表里两个最好的朋友,只显示双方有交集的数据。
例如,如果您想检查客户及其订单,则可以使用 INNER JOIN 来仅返回既购买了商品又存在于客户表中的记录。

我们来谈谈 LEFT OUTER JOIN,这就像你的得力助手。
它将显示左表(如客户表)中的所有数据。
即使右表(如订单表)没有匹配,也会显示NULL。
就像你的好兄弟一样,即使他今天不来,你也会在角落里等他。

LEFT OUTER JOIN WITH NULL,这个更有趣。
它只返回左表中与右表不匹配的数据。
就好像等了很久,最后发现没来的人其实并不打算来。

RIGHT OUTER JOIN,这就像反向的 LEFT OUTER JOIN。
它在右表中显示所有数据。
如果左表中没有匹配项,也会显示 NULL。

RIGHT OUTER JOIN WITH NULL,这与 LEFT OUTER JOIN WITH NULL 非常相似,但操作相反。

FULL JOIN,这就像接下来两个表中的所有成员。
它将显示两个表中的所有行,即使两边都没有匹配项,也会显示 NULL。

最后,还有一个 CROSS JOIN,它就像两个表的自由联接。
它将在两个表中列出所有可能的组合。
就像两个盲盒。
你永远不知道你会画什么。

我以前也遇到过这种情况。
一个电商网站需要展示所有产品、所有品类的组合,可以通过CROSS JOIN轻松完成。

其实这个JOIN操作就像我们生活中不同的关系一样,有的紧密,有的松散,有的全面,有的更侧重于某一方面。
掌握它就像掌握数据库通信技巧一样,可以让你的查询更加准确、高效。

sql中join和where sql中join和innerjoin

需要明确的是,JOIN 和 Inner JOIN 在 SQL 中基本相同,但 JOIN 是一种懒惰的写法,而 INNER JOIN 是一种明确的表达方式。

展开:我们先来说说最重要的事情。
我们去年参与的一个电子商务项目使用 JOIN 来连接 Customers 表和 Orders 表。
条件是user_id=orders.user_id。
结果报错——因为我忘了加ON。
它成为直接笛卡尔积。
3 000万用户,1 亿订单,CPU立刻就炸了。
还有一点就是如果你INNER JOIN,IF INNER JOIN ON user_id =orders.user_id;数据库可以直接优化索引匹配,执行速度提高一倍。
还有一个更重要的细节。
例如,如果您使用 LEFT JOIN;如果左表中的记录与右表中的记录不匹配。
这样会输出左表的数据,外面用NULL填充——INNER JOIN还是不礼貌的,如果没有匹配的话会直接过滤。
起初我认为 INNER JOIN 更聪明,但后来意识到这是错误的。
数据库优化器比你聪明得多,但拼写出来总是正确的。

等等,还有一个。
JOIN中的连接条件比WHERE中写的更直观。
例如,连接三个表;其中 a.id = b.a_id 且 b.id = c.b_id写的看久了会头疼。
加入 b 上 a.id = b.a_id 加入 c 上 b.id = c.b_id;每行一张表;哪个图表属于哪个图表一目了然。
说实话,这很复杂。

为了多练习,建议干脆写INNER JOIN,懒惰地使用JOIN,但不要写错JOIN条件,这样会拖累性能。