温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

mysql中的join和where优先级顺序是什么

发布时间:2023-03-20 11:30:12 来源:亿速云 阅读:240 作者:iii 栏目:开发技术

这篇“mysql中的join和where优先级顺序是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“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中的join和where优先级顺序是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI