mysql 查询 from a, b 和 a left join b 有什么区别

在MySQL中,from a, b 和 a left join b 有显著的区别,主要体现在查询结果和使用场景上。

基本语法与返回结果:

  • from a, b:这种写法实际上是将两个表作为一个整体来处理,即假设这两个表是同一个表。因此,它会返回两个表中的所有行的笛卡尔积(Cartesian product),也就是每行数据都是两个表的组合。

    sql 复制代码
     SELECT * FROM a, b WHERE a.id  = b.id ;

这种写法通常用于需要同时访问两个表的数据但不进行任何连接条件限制的情况。

  • a left join b:这种写法是标准的左连接操作,它会返回左表(a)的所有行,即使右表(b)中没有匹配的记录。如果右表中有匹配的记录,则返回这些记录;如果没有,则相关列将显示为NULL。

    sql 复制代码
    SELECT * FROM a LEFT JOIN b ON a.id  = b.id ;

性能影响:

使用from a, b由于生成笛卡尔积,其性能通常较差,因为笛卡尔积的规模可能非常大,特别是当两个表的数据量较大时。

a left join b则依赖于MySQL的优化器来高效地执行左连接操作,通常比笛卡尔积快很多。

应用场景:

  • from a, b适用于一些特殊情况,比如需要同时访问两个表的所有数据但不需要任何连接条件,或者只是想简单地查看两个表的数据合并情况。
  • a left join b更常用于实际应用中,尤其是需要保留左表所有记录并根据右表是否存在对应记录来填充或补全数据的场景。
    总结来说,from a, b 和 a left join b 在功能上有很大的不同。前者生成笛卡尔积,而后者执行左连接操作,前者适用于特定的特殊情况,后者则广泛应用于需要保留左表所有记录并根据右表匹配情况进行数据补全的场景。选择哪种方式取决于具体需求和性能考虑。
相关推荐
2301_7838486512 小时前
SQL如何用SQL子查询实现关联报表生成_嵌套逻辑关联多表
jvm·数据库·python
techdashen13 小时前
dial9:给 Tokio 装上“飞行记录仪“
java·数据库·redis
2501_9010064713 小时前
Golang怎么用gRPC Gateway_Golang gRPC Gateway教程【经典】
jvm·数据库·python
2501_9012005313 小时前
golang如何实现错误预算Error Budget计算_golang错误预算Error Budget计算实现实战
jvm·数据库·python
2401_8676239813 小时前
如何解决OUI图形界面无法调用_xhost与DISPLAY变量设置
jvm·数据库·python
czlczl2002092513 小时前
Mysql读写分离的过期读问题
数据库·mysql
2401_8246976613 小时前
CSS如何实现元素反转特效_使用transform-scaleX(-1)操作
jvm·数据库·python
皮皮学姐分享-ppx14 小时前
上市公司数字技术风险暴露数据(2010-2024)|《经济研究》同款大模型测算
大数据·网络·数据库·人工智能·chatgpt·制造
CLX050514 小时前
如何在 WordPress AMP 网站中为特定模板禁用 AMP 渲染
jvm·数据库·python
神明93114 小时前
如何实现SQL动态字段选择查询_利用反射或动态拼接字符串
jvm·数据库·python