Join 系列
CROSS JOIN
笛卡尔积连接 :当CROSS JOIN不使用WHERE子句时,CROSS JOIN产生了一个结果集,该结果集是两个关联表的行的乘积。(table1 m行,table2 n行;CROSS JOIN后有m*n行)
SELECT *
FROM t1 CROSS JOIN t2;
在CROSS JOIN中添加WHERE子句来添加条件。
SELECT *
FROM t1 CROSS JOIN t2
WHERE t1.id = t2.id;
INNER JOIN
两个表同时符合条件的组合
SELECT * FROM table1 INNER JOIN table2
在INNER JOIN中添加ON子句来添加条件。
SELECT *
FROM t1 INNER JOIN t2
ON t1.id = t2.id;
INNER JOIN和CROSS JOIN的区别:
两者得到的结果一样,但是INNER JOIN的效率更高。
OUTER JOIN
符合连接条件的行和左表(LEFT JOIN), 右表(RIGHT JOIN)或者两个表(FULL JOIN)的所有数据行
1. LEFT JOIN
显示符合条件的数据行,同时显示左边数据表不符合条件的数据行,右边没有对应的条目显示NULL。
SELECT *
FROM t1 LEFT JOIN t2
ON t1.id = t2.id;
2. RIGHT JOIN
显示符合条件的数据行,同时显示右边数据表不符合条件的数据行,左边没有对应的条目显示NULL。
SELECT *
FROM t1 RIGHT JOIN t2
ON t1.id = t2.id;
3. FULL JOIN
显示符合条件的数据行,同时显示左右不符合条件的数据行,相应的左右两边显示NULL,即显示左连接、右连接和内连接的并集。
MySQL 中并没有 FULL JOIN 的语法,需要借助 union
关键字来实现.
SELECT *
FROM t1 LEFT JOIN t2
ON t1.id = t2.id
UNION
SELECT *
FROM t1 RIGHT JOIN t2
ON t1.id = t2.id;