JOIN 可以分为以下几类:
-
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。可以写成 JOIN
-
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
-
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
-
FULL JOIN (全连接):左右表不能匹配的行都会保留。
(1)INNER JOIN
首先来看 INNER JOIN,可以理解为两个集合的交集,也就是两个表的交集,INNER JOIN 会先将两个表的数据连接在一起,然后两个表通过id互相找不到的数据将被舍弃。:
语法结构如下:
SELECT column1, column2, …
FROM table1(主表)
INNER JOIN table2(要连接的表)
ON table1.id = table2.id
WHERE condition(s)
ORDER BY column1, … ASC/DESC
LIMIT num_limit OFFSET num_offset;
(2)LEFT JOIN 和 RIGHT JOIN
表A 连接 表B
LEFT JOIN 保留A的所有行,不管有没有能匹配上B
反过来 RIGHT JOIN
则保留所有B里的行。
(3)FULL JOIN
FULL JOIN
不管有没有匹配上,同时保留A和B里的所有行
举例:
student表和class表:
使用INNER JOIN 查询,因为104号的赵六班级号为3,班级表中没有 id 为3的这条数据,所以这条数据查不出来:
使用LEFT JOIN查询,优先匹配左表的记录,也就是student表:
使用 RIGHT JOIN 查询,优先匹配右表的记录,也就是class表: