天天看点

MySQL基础之多表关联查询

2.7 多表关联查询

我们已经学会了如何在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据。本章节我们将向大家介绍如何使用 MySQL 的 JOIN 在两个或多个表中查询数据。你可以在 SELECT , UPDATE 和 DELETE 语句中使用 MySQL 的 JOIN 来联合多表查询。

JOIN 按照功能大致分为如下三类:

  1. CROSS JOIN (交叉连接)
  2. INNER JOIN (内连接或等值连接)。
  3. OUTER JOIN (外连接)

2.7.1 交叉连接

关键字:

CROSS JOIN

交叉连接也叫笛卡尔积连接。笛卡尔积是指在数学中,两个集合X 和Y 的笛卡尓积( Cartesian

product ),又称直积,表示为X*Y ,第一个对象是X 的成员而第二个对象是Y 的所有可能有序对的其中一个成员。

交叉连接的表现:

行数相乘、列数相加

隐式交叉连接:

MySQL基础之多表关联查询

显式交叉连接:

SELECT * FROM A CROSS JOIN B

2.7.2 内连接

关键字:

INNER JOIN

内连接也叫等值连接,内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。

隐式内连接:

MySQL基础之多表关联查询

显式内连接:

SELECT * FROM A INNER JOIN B ON A.id = B.id

2.7.3 外连接

外联接可以是左向外联接、右向外联接或完整外部联接。也就是说外连接又分为:

左外连接、右外连接、全外连接

外连接需要有主表或者保留表的概念。

在 FROM 子句中指定外连接时,可以由下列几组关键字中的一组指定:

左外连接:

LEFT JOIN 或者 LEFT OUTER JOIN

MySQL基础之多表关联查询

右外连接:

RIGHT JOIN 或者 RIGHT OUTER JOIN

MySQL基础之多表关联查询

全外连接(MySQL不支持):

FULL JOIN 或 FULL OUTER JOIN

SELECT * FROM A FULL JOIN B ON A.id = B.id

外连接总结:

  1. 通过业务需求,分析主从表
  2. 如果使用LEFT JOIN ,则主表在它左边
  3. 如果使用RIGHT JOIN ,则主表在它右边
  4. 查询结果以主表为主,从表记录匹配不到,则补null

耐心的读者可以继续观看我下一篇文章:待续

继续阅读