美文网首页
MySQL JOIN 查询

MySQL JOIN 查询

作者: Tinyspot | 来源:发表于2024-04-17 16:46 被阅读0次

    1. MySQL 连接类型

    CROSS JOIN (交叉连接 或 笛卡尔积)
    交叉连接返回两个集合的笛卡尔积,即表中的所有行的所有可能组合

    INNER JOIN(内连接 或 等值连接)
    内连接是最常用的连接操作,从数学的角度讲就是求两个表的交集,从笛卡尔积的角度讲就是从笛卡尔积中挑出ON子句条件成立的记录

    LEFT JOIN (左连接)
    从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表中剩余的记录

    RIGHT JOIN (右连接)
    从笛卡尔积中挑出ON子句条件成立的记录,然后加上右表中剩余的记录

    MySQL 目前不支持全连接 FULL OUTER JOIN

    2. 交叉连接 CROSS JOIN

    交叉连接返回两个集合的笛卡尔积,即两个表中的所有行的所有可能的组合。这相当于内连接没有连接条件或者连接条件永远为真。

    如果一个有 m 行的表和另一个有 n 行的表,它们交叉连接将返回 m * n 行数据

    The CROSS JOIN keyword returns all records from both tables (table1 and table2).

    SELECT column_name(s)
    FROM table1
    CROSS JOIN table2;
    

    3. 内连接 INNER JOIN

    INNER JOIN 返回两个表中满足连接条件的匹配行

    SELECT column_name(s)
    FROM table1
    INNER JOIN table2
    ON table1.column_name = table2.column_name;
    
    SELECT * FROM table1 INNER JOIN table2 ON table1.tradeId = table2.tradeId;
    
    -- JOIN(省略INNER)
    SELECT * FROM table1 JOIN table2 ON table1.tradeId = table2.tradeId;
    
    -- where 关键词替代
    SELECT * FROM table1, table2 WHERE table1.id = table2.id;
    

    4. 左连接:LEFT JOIN

    LEFT JOIN 返回左表的所有行,并包括右表中匹配的行,如果右表中没有匹配的行,将返回 NULL 值

    SELECT column_name(s)
    FROM table1
    LEFT JOIN table2
    ON table1.column_name = table2.column_name;
    

    5. 右连接:RIGHT JOIN

    RIGHT JOIN 返回右表的所有行,并包括左表中匹配的行,如果左表中没有匹配的行,将返回 NULL 值

    SELECT column_name(s)
    FROM table1
    RIGHT JOIN table2
    ON table1.column_name = table2.column_name;
    

    6. LEFT JOIN ON AND 和 LEFT JOIN ON WHERE

    LEFT JOIN ON AND:在连接过程中直接应用条件,确保即使右侧表无匹配记录,只要左侧表记录满足 ON 子句中的 AND 条件,该记录就会出现在结果集中,保持 LEFT JOIN 的特性。

    LEFT JOIN ON WHERE:在连接操作完成后对临时结果集进行过滤,可能导致原本应由 LEFT JOIN 保留的左侧表记录(无匹配右侧记录的情况)因不符合 WHERE 子句条件而被误删,失去 LEFT JOIN 的保留左侧表全记录的特性,结果更接近于 INNER JOIN

    参考文档

    • https://www.w3schools.com/mysql/mysql_join.asp
    • MySQL JOIN https://www.sjkjc.com/mysql/join/

    相关文章

      网友评论

          本文标题:MySQL JOIN 查询

          本文链接:https://www.haomeiwen.com/subject/alxexjtx.html