Mysql内连接,外连接,笛卡尔积

– 左外连接(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

猜你喜欢

转载自blog.csdn.net/qq_42747210/article/details/109540601