在 MySQL 中,多表联合查询主要有交叉连接、内连接、左连接和右连接几种方式 :
内连接是一种一一映射关系,即左右两张表都同时存在的记录才能显示出来,用韦恩图表示是两个集合的交集。
内连接的语法格式:
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;
左连接是以左表为基础,根据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;
右连接是以右表为基础,根据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不使用WHERE子句时,CROSS JOIN产生了一个结果集,该结果集是两个关联表的行的乘积。通常,如果每个表分别具有n和m行,则结果集将具有n*m行
示例 :
SELECT * FROM students CROSS JOIN classes;