四种join的区别已老生常谈:

INNER JOIN(也可简写为JOIN): 如果表中有至少一个匹配,则返回行


LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行


RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行


FULL JOIN: 只要其中一个表中存在匹配,就返回行


那么问题来了,还有一种常见的写法是将表用逗号隔开,那这个又是怎么连接的呢。

先看这两张表。

使用逗号隔开的方法来连接表:

SELECT *FROM employee,departmentWHERE employee.DepartmentID = department.DepartmentID

输出结果:

可以很明显发现:这不就是inner join嘛!

没错,答案正是这样:sql用逗号连接多张表对应的是 inner join。

为了严谨性,我到处找sql的官方文档来证实这一点。然而搜不出来sql的文档(谁知道网址请务必发我),最后还是在维基百科上找到了可以当作论据的话。

SQL 定义了两种不同语法方式去表示"连接"。
1.首先是"显式连接符号",它显式地使用关键字 JOIN,
2.其次是"隐式连接符号",它使用所谓的"隐式连接符号"。隐式连接符号把需要连接的表放到 SELECT 语句的 FROM 部分,并用逗号隔开。这样就构成了一个"交叉连接",WHERE 语句可能放置一些过滤谓词(过滤条件)。
3.那些过滤谓词在功能上等价于显式连接符号. SQL 89标准只支持内部连接与交叉连接,
4.因此只有隐式连接这种表达方式;SQL 92标准增加了对外部连接的支持,这才有了JOIN表达式。

也就是说,

SELECT *FROM employeeINNER JOIN departmentON employee.DepartmentID = department.DepartmentID

等价于:

SELECT *FROM employee,departmentWHERE employee.DepartmentID = department.DepartmentID

至于哪个效率高一点,其实两者是一回事,没有区别。只是内连接是由SQL 1999规则定的书写方式而已。

另外,在写sql语句测试4种join的时候,发现mysql对于full join返回的结果和inner join一模一样。经查阅资料,才发现原来mysql不支持full join啊。
参考:
https://blog.csdn.net/weixin_39687359/article/details/111721631

mysql多表join方式相关推荐

  1. Mysql两表 join 查询方式

    一.SQL基本语法格式 SELECT DISTINCT< select_list > FROM< left_table > < join_type > JOIN & ...

  2. Flink进行Kafka事实表与Mysql维度表Join(纯DDL/DML方式)

    概述: 對參考鏈接[1]進行DDL上的復現. 一些基本的業務常识   來源載體 數據特點 維表 Mysql/Csv/Hbase 很少變化 事實表 Kafka 不停變化 开发环境与准备工作 组件 版本 ...

  3. MySQL小表join大表的正确使用姿势(straight_join 关键字的使用)

    网上有种说法是:由于一般是采用小表join大表的方式(可以提高效率),所以有人说将小表放在左边,让它先执行,记住,这种说法是错误的!!!有例为证: 我们看上例: film inner join fil ...

  4. 数据库实践丨MySQL多表join分析

    Join并行 Join并行 1. 多表join介绍 2. 多表Join的方式 不使用Join buffer 使用Join buffer 3. Join执行流程(老执行器) 1. 多表join介绍 JO ...

  5. 阿里不让 MySQL 多表 Join ?我偏要!

    一. 问题提出:<阿里巴巴JAVA开发手册>里面写超过三张表禁止join,这是为什么? 二.问题分析:对这个结论,你是否有怀疑呢?也不知道是哪位先哲说的不要人云亦云,今天我设计sql,来验 ...

  6. mysql多表查询方式_MySQL多表查询方式问题

    你的 SQL 没有用到任何索引,对 a b 两个表都是全表扫描,在数据量小的时候是没有问题的,但是如果数据量超过 100 万,性能问题就会突显出来. 这里不清楚你的 created_at 字段是什么类 ...

  7. mysql大表join小表速度很慢_mysql多表join中,为什么子查询会那么慢,怎么解决-问答-阿里云开发者社区-阿里云...

    下面的sql执行后cpu100%,但是这三张join的表数据量都在2W左右,不应该啊,是不是数据库服务器配置出了问题啊.sql如下:select a.excel_id, a.rpt_id, a.acc ...

  8. mysql 备份表_MySQL中表的复制以及大型数据表的备份教程

    表复制mysql拷贝表操作我们会常常用到,下面就为您详细介绍几种mysql拷贝表的方式,希望对您学习mysql拷贝表方面能够有所帮助. 假如我们有以下这样一个表: id username passwo ...

  9. mysql join 组合索引_详解MySQL两表关联的连接表创建单列索引还是组合索引最优...

    概述 今天主要介绍一下MySQL中两表关联的连接表是如何创建索引的相关内容,下面来看看详细的介绍. MySQL两表关联的连接表创建索引 创建数据库的索引,可以选择单列索引,也可以选择创建组合索引. 假 ...

  10. mysql not exists优化_MySQL优化--NOT EXISTS和LEFT JOIN方式差异

    在MySQL中,我们可以将NOT EXISTS语句转换为LEFT JOIN语句来进行优化,哪为什么会有性能提升呢? 使用NOT EXISTS方式SQL为: SELECT count(1)FROMt_m ...

最新文章

  1. ajax与easyui树节点,EasyUI中的tree用法介绍
  2. Ubuntu下安装arm-linux-gnueabi-xxx编译器
  3. Eclipse中Maven的安装
  4. 拼多多技术事故复盘,程序员应该学到什么?
  5. varnish基本配置(二)
  6. Spoken English(015)
  7. 如何识别新加的计算机硬盘,图文解说win10系统无法识别新加的机械硬盘的具体技巧...
  8. UILabel教程 touch 事件
  9. 无迹卡尔曼滤波(UKF)
  10. 查找在Git中删除文件的时间
  11. Citrix XenServer
  12. 计算机软件登记文档,计算机软件著作权登记申请表范本
  13. keil+c语言优化,KEIL编译器【C语言编译选项优化等级说明】
  14. 昂达平板装linux系统下载,昂达平板用U盘启动方式安装Ubuntu Uudgie 16.10 Linux操作系统...
  15. python + 夜神模拟器 + appium 小红书app数据抓取
  16. 2019世界机器人大会
  17. electron builder 打包错误相关问题
  18. 续航超1000km,极氪成为宁德时代麒麟电池全球量产首发品牌 | 美通社头条
  19. matlab-结构体struct
  20. 俄语语言文学类毕业论文文献包含哪些?

热门文章

  1. 计算机出现函数不正确的是,小编教你快速修复无法访问函数不正确的方法
  2. 面包板电源线怎么接_面包板的怎么使用
  3. Unity Container 应用示例
  4. 【Python实现视频转文字操作】
  5. Maven错误:was cached in the local repository, resolution will not be reattempted until the update
  6. python输入若干个数字求和
  7. 2020年ESA中国区10m地表覆盖数据的镶嵌、裁剪与分省数据分享
  8. 达梦数据库技术分享索引贴
  9. 链接脚本(Linker Script)用法解析(二) clear_table copy_table
  10. RabbitMQ与spring的集成,,基础。