2.7 多表关联查询
我们已经学会了如何在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据。本章节我们将向大家介绍如何使用 MySQL 的 JOIN 在两个或多个表中查询数据。你可以在 SELECT , UPDATE 和 DELETE 语句中使用 MySQL 的 JOIN 来联合多表查询。
JOIN 按照功能大致分为如下三类:
- CROSS JOIN (交叉连接)
- INNER JOIN (内连接或等值连接)。
- OUTER JOIN (外连接)
2.7.1 交叉连接
关键字:
CROSS JOIN
交叉连接也叫笛卡尔积连接。笛卡尔积是指在数学中,两个集合X 和Y 的笛卡尓积( Cartesian
product ),又称直积,表示为X*Y ,第一个对象是X 的成员而第二个对象是Y 的所有可能有序对的其中一个成员。
交叉连接的表现:
行数相乘、列数相加
隐式交叉连接:
显式交叉连接:
SELECT * FROM A CROSS JOIN B
2.7.2 内连接
关键字:
INNER JOIN
内连接也叫等值连接,内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。
隐式内连接:
显式内连接:
SELECT * FROM A INNER JOIN B ON A.id = B.id
2.7.3 外连接
外联接可以是左向外联接、右向外联接或完整外部联接。也就是说外连接又分为:
左外连接、右外连接、全外连接
外连接需要有主表或者保留表的概念。
在 FROM 子句中指定外连接时,可以由下列几组关键字中的一组指定:
左外连接:
LEFT JOIN 或者 LEFT OUTER JOIN
右外连接:
RIGHT JOIN 或者 RIGHT OUTER JOIN
全外连接(MySQL不支持):
FULL JOIN 或 FULL OUTER JOIN
SELECT * FROM A FULL JOIN B ON A.id = B.id
外连接总结:
- 通过业务需求,分析主从表
- 如果使用LEFT JOIN ,则主表在它左边
- 如果使用RIGHT JOIN ,则主表在它右边
- 查询结果以主表为主,从表记录匹配不到,则补null
耐心的读者可以继续观看我下一篇文章:待续