一. 交叉联接
交叉联接的格式为:表 1 CROSS JOIN 表 2,主要目的是求出两张表的笛卡尔积,即返回两张表数据的乘积组合。这里用户表和身份证表做演示://实现用户表和身份证表的笛卡尔积SELECT * FROM think_user CROSS JOIN think_card;所以笛卡尔积,就是两张表所有列的组合。如果用户表有 5 条数据,身份证表有 4 条数据,那么最后的结果就是 5 * 4 = 20 条数据。//过滤筛选出用户和身份证对应的信息SELECT * FROM think_user u CROSS JOIN think_card c WHERE u.id=c.uid;//联接指定的对应数据,结果同上SELECT * FROM think_user u CROSS JOIN think_card c ON u.id=c.uid;PS:WHERE 和 ON 都是过滤筛选,只不过 ON 是在两个表联接时就过滤不满足条件的数据,而 WHERE 是把所有数据读完后再过滤掉数据。二. 内联接内联接格式为:表 1 INNER JOIN 表 2;在 MySQL 中,CROSS JOIN 交叉联接基本等于 INNER JOIN 内联接,以上的三种写法,都可以使用 INNER JOIN。一般来说,除非你就是要输出笛卡尔积表,可以使用 CROSS JOIN 来完成。而带有过滤条件的,都建议使用 INNER JOIN。如果使用 INNER JOIN 却不带过滤条件,就等于 CROSSJOIN。//INNER JOIN 联接两张表SELECT * FROM think_user u INNER JOIN think_card c ON u.id=c.uid;//INNER JOIN 可以省略 INNERSELECT * FROM think_user u JOIN think_card c ON u.id=c.uid;//没有条件的 INNER JOIN 就是 CROSS JOIN 实现笛卡尔积SELECT * FROM think_user INNER JOIN think_card;//先使用 ON 来联接将要处理的数据表,然后在用 WHERE 过滤更精确的数据SELECT * FROM think_user u INNER JOIN think_card c ON u.id=c.uid WHEREu.id>2;PS:ON 一般用于两张表字段的联接,而 WHERE 作为联接后的过滤来使用。三. 外联接外联接格式为:表 1 [LEFT|RIGHT] OUTER JOIN 表 2,在外联接联接两张表时,是不可以使用 WHERE 的,必须使用 ON。//通过左联接来查找对应的身份证信息,没有身份证的用户,身份证信息将为 NULLSELECT * FROM think_user u LEFT OUTER JOIN think_card c ON u.id=c.uid;//找出没有身份证的用户SELECT * FROM think_user u LEFT OUTER JOIN think_card c ON u.id=c.uidWHERE c.id IS NULL;//通过右联接来查找对应的用户信息,没有找到的,用户信息将为 NULLSELECT * FROM think_user u RIGHT OUTER JOIN think_card c ON u.id=c.uid;PS:和 INNER JOIN 一样,这里的 OUTER 关键字可以省略。