join 用于多表中字段之间的联系,语法为:... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona
student表:即table1

student_class表:即table2

(inner) join(内连接,或等值连接):取得两个表中存在连接匹配关系的记录。

left (outer) join(左连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录。

right join(右连接):与 LEFT JOIN 相反,取得右表(table2)完全记录,即是左表(table1)并无匹配对应记录。

cross join:交叉连接,得到的结果是两个表的乘积,即笛卡尔积
注:笛卡尔(Descartes)乘积又叫直积。假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}。可以扩展到多个集合的情况。类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选课情况。

ps: 实际上,在 MySQL 中(仅限于 MySQL) CROSS JOIN 与 INNER JOIN 的表现是一样的,在不指定 ON 条件得到的结果都是笛卡尔积,反之取得两个表各自匹配的结果。
INNER JOIN(或者用“,”表示)与 CROSS JOIN 可以省略 INNER 或 CROSS 关键字,因此下面的 SQL 效果是一样的:
... FROM table1 INNER JOIN table2
... FROM table1 CROSS JOIN table2
... FROM table1 JOIN table2
MySQL本身不支持full join(全连接),但可以通过union来实现。

这篇博客详细介绍了MySQL中不同类型的JOIN操作,包括INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接)以及CROSS JOIN(交叉连接)。INNER JOIN返回两个表中存在匹配的记录,LEFT JOIN保留左表的所有记录,即使在右表中没有匹配项,而RIGHT JOIN则保留右表的所有记录。CROSS JOIN产生两个表的笛卡尔积,即所有可能的组合。在MySQL中,CROSS JOIN和INNER JOIN在不指定ON条件时等价。文章还提到,虽然MySQL不直接支持FULL JOIN,但可以通过UNION来实现。
1147

被折叠的 条评论
为什么被折叠?



