– 左外连接(Left Outer Join)返回左表中所有的数据;对于右表,返回满足连接条件的数据;
select * from t_user left join t_order t on t_user.id = t.user_id;
select * from t_user left outer join t_order t on t_user.id = t.user_id;
select * from t_order left join t_user tu on t_order.user_id = tu.id;
– 右外连接(Right Outer Join)返回右表中所有的数据;对于左表,返回满足连接条件的数据,如果没有就返回空值。
select * from t_user right join t_order t on t_user.id = t.user_id;
– 内连接(Inner Join)返回两个表中满足连接条件的数据
select * from t_user join t_order t on t_user.id = t.user_id;
– 等价于
select * from t_user inner join t_order t on t_user.id = t.user_id;
– 交叉连接,也称笛卡尔积
select * from t_user cross join t_order;
select * from t_user, t_order;
– 如果指定条件,查询结果相当于inner join
select * from t_user cross join t_order t on t_user.id = t.user_id
select * from t_user, t_order where t_user.id = t_order.user_id
附建表语句
CREATE TABLE `t_user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(30) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;
INSERT INTO `t_user`(`id`, `name`, `age`) VALUES (1, 'zhangsan', 20);
INSERT INTO `t_user`(`id`, `name`, `age`) VALUES (2, 'lisi', 24);
INSERT INTO `t_user`(`id`, `name`, `age`) VALUES (3, 'wangwu', 26);
CREATE TABLE `t_order` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`product` varchar(255) DEFAULT NULL,
`user_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;
INSERT INTO `t_order`(`id`, `product`, `user_id`) VALUES (1, '苹果', 1);
INSERT INTO `t_order`(`id`, `product`, `user_id`) VALUES (2, '西瓜', 3);
INSERT INTO `t_order`(`id`, `product`, `user_id`) VALUES (3, '葡萄', 5);
参考文档
图解MySQL