首先把初始化表的sql贴出来:
CREATE TABLE `tb_dept` (
`id` int(11) DEFAULT NULL,
`deptName` varchar(255) DEFAULT NULL,
`locAdd` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tb_dept
-- ----------------------------
INSERT INTO `tb_dept` VALUES ('1', 'RD', '11');
INSERT INTO `tb_dept` VALUES ('2', 'HR', '12');
INSERT INTO `tb_dept` VALUES ('3', 'MK', '13');
INSERT INTO `tb_dept` VALUES ('4', 'MIS', '15');
INSERT INTO `tb_dept` VALUES ('5', 'FD', '14');
阿白猜呆
CREATE TABLE `tb_emp` (
`id` int(11) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`deptId` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tb_emp
-- ----------------------------
INSERT INTO `tb_emp` VALUES ('1', 'AAA', '1');
INSERT INTO `tb_emp` VALUES ('2', 'BBB', '1');
INSERT INTO `tb_emp` VALUES ('3', 'CCC', '1');
INSERT INTO `tb_emp` VALUES ('4', 'DDD', '2');
INSERT INTO `tb_emp` VALUES ('5', 'EEE', '2');
INSERT INTO `tb_emp` VALUES ('6', 'FFF', '3');
INSERT INTO `tb_emp` VALUES ('7', 'GGG', '4');
INSERT INTO `tb_emp` VALUES ('8', 'HHH', '66');
两个表如图所示:
然后原谅我无耻的从网上盗个图(太难画了):
图1
首先是查询共有部分,也就是图一中间的情况(第一种join):
接下来是图1中的左上的jioin,也就是AB的共有部分+A的剩余部分,也就是全A(第二种join):
然后是图1的右上情况(第三种join):
图1左下的情况(第四种):
图1右下的情况(第五种):
最后两种情况如图2所示,只需要看最下边一行的两种情况:
图2
图2的左下的情况,这个情况有点特殊,mysql里没有full outer join这个语法,所以我们改一改,用union将二三种的结果合并一下,因为union自带去重功能,所以效果如下(第六种):
最后一中,图2右下的情况,四五种结果的合集(第七种):