MySQL 联合查询

在 MySQL 中,多表联合查询主要有交叉连接、内连接、左连接和右连接几种方式 :

MySQL INNER JOIN 内连接

内连接是一种一一映射关系,即左右两张表都同时存在的记录才能显示出来,用韦恩图表示是两个集合的交集。

内连接的语法格式:

SELECT <字段名> FROM <表1> INNER JOIN <表2> [ON子句]

INNER JOIN 也可以使用 WHERE 子句指定连接条件,但是 INNER JOIN ... ON 语法是官方的标准写法,而且 WHERE 子句在某些时候会影响查询的性能。

示例 :

SELECT a.*, b.* 
FROM students as a LEFT JOIN classes as b 
on a.class_id = b.class_id 
ORDER BY a.id asc;

MySQL 左连接

左连接是以左表为基础,根据ON后给出的连接条件将两表连接起来。结果会将左表所有的记录列出,而右表只列出ON后与左表满足条件的部分。

左连接的语法格式如下:

SELECT <字段名> FROM <表1> LEFT OUTER JOIN <表2> <ON子句>

示例 :

SELECT a.*, b.* 
FROM students as a LEFT JOIN classes as b 
on a.class_id = b.class_id 
ORDER BY a.id asc;

MySQL 右连接

右连接是以右表为基础,根据ON后给出的连接条件将两表连接起来。结果会将右表所有的记录列出,而左表只列出ON后与右表满足条件的部分。

示例 :

SELECT a.*, b.* 
FROM students as a RIGHT JOIN classes as b 
on a.class_id = b.class_id 
ORDER BY a.id asc;

MySQL CROSS JOIN 交叉连接

MySQL CROSS JOIN 其实使用的就是笛卡尔连接。

在MySQL中,当CROSS JOIN不使用WHERE子句时,CROSS JOIN产生了一个结果集,该结果集是两个关联表的行的乘积。通常,如果每个表分别具有n和m行,则结果集将具有n*m行

示例 :

SELECT * FROM students CROSS JOIN classes;