mysql中的join和where优先级顺序解读

 更新时间:2023年03月20日 10:50:30   作者:所谓永恒  
这篇文章主要介绍了mysql中的join和where优先级顺序解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

mysql 的 join 和 where 优先级

定义

join功能

  • inner join(内连接,或等值连接) : 获取两个表中字段匹配关系的记录。
  • left join (左连接) : 获取左表所有记录,即使右表没有对应匹配的记录。
  • right join (右连接) : 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

where

where 是 mysql 语句的查询条件

测试数据表

  • 表 a1
xy
110
220
330
  • 表 a2
xy
10100
20200
20300
create table if not exists `a1`(
    `x` int(10),
    `y` int(10)
);

create table if not exists `a2`(
    `y` int(10),
    `z` int(10)
)

查询 sql 及结果

正常左连接

select * from a1 left join a2 on a1.y = a2.y;
xyyz
11010100
22020200
22020300
330NULLNULL

左连情况下, 由于左边a1.y = 30在右表无数据所以右表数据 (y,z)为 NULL

左连 on && and

select * from a1 left join a2 on a1.y = a2.y and a2.y = 10;
xyyz
11010100
220NULLNULL
330NULLNULL

由于是左连, 所以判断 (a1.y = a2.y && a2.y = 10) 只能筛选出(10, 100)与左边匹配, 所以后面均为 NULL.

即实际优先级是

select * from (a1 left join a2 on a1.y = a2.y and a2.y = 10)

左连 on && where

select * from a1 left join a2 on a1.y = a2.y where a2.y = 10;
xyyz
11010100

只有一条数据, 因此可判断其优先级为

select * from (a1 left join a2 on a1.y = a2.y) where a2.y = 10​​​​​​​

也就是说 会先左连生成临时表, 然后再在整体表上进行 where 查询.

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySQL ifnull()函数的具体使用

    MySQL ifnull()函数的具体使用

    本文主要介绍了MySQL ifnull()函数的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 101个MySQL的配置和优化的提示

    101个MySQL的配置和优化的提示

    这里是101条调节和优化 MySQL安装的技巧。一些技巧是针对特定的安装环境的,但这些思路是通用的。我已经把他们分成几类,来帮助你掌握更多MySQL的调节和优化技巧
    2013-08-08
  • MySql中使用正则表达式查询的方法

    MySql中使用正则表达式查询的方法

    Mysql 使用 REGEXP 关键字指定正则表达式的字符匹配模式。接下来通过本文给大家分享MySql中使用正则表达式查询的方法,感兴趣的朋友一起看看吧
    2017-07-07
  • mysql 按中文字段排序

    mysql 按中文字段排序

    在MySQL中,进行中文排序和查找的时候,对汉字的排序和查找结果是错误的。 这种情况在MySQL的很多版本中都存在。
    2009-01-01
  • MySQL主从复制延迟原因以及解决方案

    MySQL主从复制延迟原因以及解决方案

    这篇文章主要介绍了MySQL主从复制延迟原因以及解决方案,帮助大家更好的理解和使用数据库,感兴趣的朋友可以了解下
    2020-09-09
  • MySQL存储过程相互调用并获得错误码示例

    MySQL存储过程相互调用并获得错误码示例

    这篇文章主要介绍了MySQL存储过程相互调用并获得错误码,需要的朋友可以参考下
    2014-03-03
  • SQL如何使用正则表达式对数据进行过滤

    SQL如何使用正则表达式对数据进行过滤

    正则表达式的作用是匹配文本,将一个正则表达式与一个文本串进行比较,下面这篇文章主要给大家介绍了关于SQL如何使用正则表达式对数据进行过滤的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • MySQL向表中添加列方法实例

    MySQL向表中添加列方法实例

    要在MySQL的表中添加列,我们可以将ALTER命令与add column命令一起使用,下面这篇文章主要给大家介绍了关于MySQL向表中添加列的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • MySQL中组合字段之concat()

    MySQL中组合字段之concat()

    这篇文章主要介绍了MySQL中组合字段之concat(),MySQL是关系型数据库,我们在使用的时候往往会将对象的属性映射成列存储在表中,因此查询的到的结果在不做任何处理的情况下,也是一个个单独的属性,需要的朋友可以参考一下
    2021-11-11
  • mysql如何配置secure_file_priv

    mysql如何配置secure_file_priv

    这篇文章主要介绍了mysql如何配置secure_file_priv问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01

最新评论