• MYSQL中的各种连表查询操作


    MYSQL中的各种连表查询操作

      

    在mysql数据库中,主要有三种连表方式,分别是:

    1. 外连接 outer join

    2. 内连接 inner join

    3. 交叉连接 cross join

    为了讲解以上三种连接,先于数据中构建好测试数据,涉及到两个表user、article:

    user表,有4条数据article表,user_id表示文章所属的user

     

    外连接

    外连接又可以细分为三种:

    1. 左外连接

    2. 右外连接

    3. 完全外连接

    左外连接

    select * from user left join article on user.id=article.user_id;

    无论左表在右表有无匹配,都返回左表的数据,缺失的右表数据为NULL

    维恩图形象解析


    右外连接

    select * from user right join article on user.id=article.user_id;

    无论右表在左表有无匹配,都返回右表的数据,缺失的左表数据为NULL

     

    维恩图形象解析

    完全外连接

    mysql并不支持full join,如果支持,将会像如下sql语句:

    select * from user full join article on user.id=article.user_id;

    可以通过union all子句,将left join与right join组合在一起,达到类似full join的效果:

    无论左右表有无匹配,都返回两者的数据,缺失的数据为NULL

     

    维恩图形象解析

     

    内连接

    内连接相对于外链接,就是内连接只要左右表都匹配的数据,也就是交集

    select * from user inner join article on user.id=article.user_id;

    维恩图形象解析

    交叉连接

    交叉连接相当于求左右两表的笛卡尔积

    什么是笛卡尔积?

    比如我有两组数据,a(1, 2, 3) 与 b(4, 5 6),求它们的笛卡尔积的结果就是:

    3×3 = 9 组数据

    select * from user cross join article;

    4×7=28 组数据

    总结:

    你可以通过连表实现更复杂的查询

  • 相关阅读:
    对于js中原型的理解
    换行问题
    居中方法
    浮动清除
    js基础内容 原型与实例
    uniapp 吸顶 小demo
    uniapp 锚点滚动报错(h.push is not a function)
    uni-app 页面滚动到指定位置
    过滤后端返回的html文本标签
    uniapp 上拉加载
  • 原文地址:https://www.cnblogs.com/endv/p/16421067.html
Copyright © 2020-2023  润新知