MySQL JOIN 查询

2024-04-17  本文已影响0人  Tinyspot

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

参考文档

上一篇下一篇

猜你喜欢

热点阅读