1.cross join
除了我们熟知的内连接(inner join),外连接(right /left join )外,还存在着交叉连接Cross join
首先,我们可以创建2个表并且给它测试数据
CREATE TABLE `user_a` (
`name` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`sex` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `user_a` VALUES ('张三', '男');
INSERT INTO `user_a` VALUES ('李四', '女');
CREATE TABLE `user_b` (
`name` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`age` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `user_b` VALUES ('赵六', 33);
INSERT INTO `user_b` VALUES ('王五', 23);
交叉连接
select a.name,a.sex,b.name,b.age from user_a a cross join user_b b;
结果
name sex name age
张三 男 赵六 33
李四 女 王五 23
张三 男 王五 23
李四 女 赵六 33
CROSS JOIN 与 INNER JOIN 的表现是一样的,在不指定 ON 条件得到的结果都是笛卡尔积
cross join和inner join的表现是一样的,在不加ON条件得到的都是笛卡尔积,但是使用非MySQL时的查询时必须加on。
注:实际上将cross join替换成“,”,效果相同。