joinMySQL深入探索:CROSS JOIN实践篇(mysqlcross)

NoSQL快速入门中探讨了最常用的MySQL常用连接(即JOINs),下面我们来深入了解CROSS JOIN这种老朋友。

CROSS JOIN作为JOIN中的一种,它带来的作用就是连接每组可能的行,即将两个表中的每一行组合全部连接起来,这时行数将为两个表中行数的乘积,列数将联合所有表的列数。也许大家在SQL中的查询代码可能实际情况下更少见,但并没有因此而被废弃,只是有些不重要或者不推荐使用。

基本形式:

`SELECT … FROM table1 CROSS JOIN table2WHERE table1.column1 = x and table2.column2 = y;`

以下是CROSS JOIN有用特性之一:生成一对多(一对多)关系时,用CROSS JOIN可以比使用 LEFT JOIN 更简单:

`SELECT t1.column1, t2.column2

FROM table1 t1

CROSS JOIN table2 t2;`

下面是一个简单又实用的例子:

`SELECT p.id, p.name, a.name AS author_name

FROM Post p

CROSS JOIN Author a;`

这样,可以产生一个表,其中包括每个文章的id,名称以及每个文章的作者信息:

| id | name | author_name |

|—-|——|————-|

| 1 | A | Lee |

| 1 | A | King |

| 2 | B | Lee |

| 2 | B | King |

最后,使用CROSS JOIN也可以帮助我们统计每个组合的数量:

`SELECT p.name AS post_name, a.name AS author_name, COUNT(*) AS num

FROM Post p

CROSS JOIN Author a

GROUP BY p.name, a.name`

这个查询将会统计出每个文章以及作者的数量:

| post_name | author_name | num |

|———–|————-|—–|

| A | Lee | 1 |

| A | King | 1 |

| B | Lee | 1 |

| B | King | 1 |

总而言之,CROSS JOIN仍然是MySQL数据库中有用而又误解的连接。它可以方便的帮助我们创建一对多关系,同时也是有效的统计工具。虽然实际的使用情况少一些,但是CROSS JOIN也让我们更完整的理解MySQL的JOIN 语句,尤其是当业务需要去了解两个表中数据之间的关系时,这种连接就简单明了。


数据运维技术 » joinMySQL深入探索:CROSS JOIN实践篇(mysqlcross)