zoukankan      html  css  js  c++  java
  • 多表联结,以及如何选择联结的类型

    在一般的业务情况下,我们大致将 Mysql多表连接 分为如下几种:

    内连接:INNER JOIN – 可简写为 JOIN

    左外连接:LEFT OUTER JOIN – 可简写为 LEFT JOIN

    右外连接:RIGHT OUTER JOIN – 可简写为 RIGHT JOIN

    全连接:使用 UNION 完成;

    交叉连接:CROSS JOIN – 也称为 笛卡儿乘积连接,大抵不使用;

    记住下面这张图,遇到多表联结的时候从这张图选择对于的sql。

    注意:

    1、全连接 – UNION
    事实上由于 Mysql 不支持 FULL JOIN,所以我们将使用 UNION 来完成 全连接;

    SQL 语句:

    SELECT * FROM a LEFT OUTER JOIN b ON(a.id = b.id) 
    UNION 
    SELECT * FROM a RIGHT OUTER JOIN b ON(a.id = b.id)

    解释:
    全连接 是 左右外连接 的并集,连接表包含被连接的表的所有记录,如果缺少匹配的记录,,则以 null 取代;

    2、交叉连接 – CROSS JOIN

    CROSS JOIN 子句从连接的表返回行的 笛卡儿乘积;

    假设使用 CROSS JOIN 连接两个表;
    结果集将包括两个表中的所有行,其中结果集中的每一行都是第一个表中的行与第二个表中的行的组合;
    当连接的表之间没有关系时,会使用这种情况;

    要特别注意的是,如果每个表有 1000 行,那么结果集中就有 1000 x 1000 = 1,000,000 行,那么数据量是非常巨大的;

    SQL 语句:

    SELECT *
    FROM a
    CROSS JOIN b
    
    /**
    * 注意: 
    * 与 INNER JOIN 或 [LEFT, RIGHT] OUTER JOIN 子句不同
    * CROSS JOIN 连接没有 ON 条件
    */

    添加了 WHERE 子句后,如果 a表 和 b表 有关系,则 CROSS JOIN 的工作方式与 INNER JOIN 类似,SQL 语句为:

    SELECT *
    FROM a 
    CROSS JOIN b 
    WHERE a.id = b.id

    参考:

    https://blog.csdn.net/qq_35723367/article/details/80233040

    https://www.yiibai.com/mysql/cross-join.html

  • 相关阅读:
    linux下samba服务器的搭建(案列模拟)
    linux下nfs服务器的搭建
    linux 下 php+gd2+freetype+jpeg+png+zlib编译安装
    linux下xcache的安装
    wget如何设置代理
    实验记录:vsftp整合mysql-pam管理虚拟账号
    tr命令 实例
    sed学习笔记
    Byte、KB、MB、GB、TB、PB转换
    对lombbok @slf4j 进行测试用例
  • 原文地址:https://www.cnblogs.com/meetuj/p/12108064.html
Copyright © 2011-2022 走看看