目录
left join 例子

数据表
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES (1, '王乐乐');
INSERT INTO `users` VALUES (2, '周欣欣');
INSERT INTO `users` VALUES (3, '陈苗苗');
INSERT INTO `users` VALUES (4, '李思思');
CREATE TABLE `user_hobbies` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`hobby` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user_hobbies
-- ----------------------------
INSERT INTO `user_hobbies` VALUES (1, 1, '唱歌');
INSERT INTO `user_hobbies` VALUES (2, 1, '跳舞');
INSERT INTO `user_hobbies` VALUES (3, 2, '书法');
INSERT INTO `user_hobbies` VALUES (4, 2, '绘画');
INSERT INTO `user_hobbies` VALUES (5, 2, '看书');
INSERT INTO `user_hobbies` VALUES (6, 3, '登山');
INSERT INTO `user_hobbies` VALUES (7, 99, '无极限');
INSERT INTO `user_hobbies` VALUES (8, 1, '唱歌');
用户表 users
| id | name |
|---|---|
| 1 | 王乐乐 |
| 2 | 周欣欣 |
| 3 | 陈苗苗 |
| 4 | 李思思 |
用户爱好表 user_hobbies
| id | user_id | hobby |
|---|---|---|
| 1 | 1 | 唱歌 |
| 2 | 1 | 跳舞 |
| 3 | 2 | 书法 |
| 4 | 2 | 绘画 |
| 5 | 2 | 看书 |
| 6 | 3 | 登山 |
| 7 | 99 | 无极限 |
| 8 | 1 | 唱歌 |
inner join
select * from users inner join user_hobbies on users.id = user_hobbies.user_id
用户 李思思 和 爱好 无极限 没有出结果
| id | name | id(1) | user_id | hobby |
|---|---|---|---|---|
| 1 | 王乐乐 | 1 | 1 | 唱歌 |
| 1 | 王乐乐 | 2 | 1 | 跳舞 |
| 2 | 周欣欣 | 3 | 2 | 书法 |
| 2 | 周欣欣 | 4 | 2 | 绘画 |
| 2 | 周欣欣 | 5 | 2 | 看书 |
| 3 | 陈苗苗 | 6 | 3 | 登山 |
| 1 | 王乐乐 | 8 | 1 | 唱歌 |

left join
select * from users left join user_hobbies on users.id = user_hobbies.user_id
| id | name | id(1) | user_id | hobby |
|---|---|---|---|---|
| 1 | 王乐乐 | 1 | 1 | 唱歌 |
| 1 | 王乐乐 | 2 | 1 | 跳舞 |
| 2 | 周欣欣 | 3 | 2 | 书法 |
| 2 | 周欣欣 | 4 | 2 | 绘画 |
| 2 | 周欣欣 | 5 | 2 | 看书 |
| 3 | 陈苗苗 | 6 | 3 | 登山 |
| 1 | 王乐乐 | 8 | 1 | 唱歌 |
| 4 | 李思思 |

right join
select * from users RIGHT join user_hobbies on users.id = user_hobbies.user_id
| id | name | id(1) | user_id | hobby |
|---|---|---|---|---|
| 1 | 王乐乐 | 1 | 1 | 唱歌 |
| 1 | 王乐乐 | 2 | 1 | 跳舞 |
| 1 | 王乐乐 | 8 | 1 | 唱歌 |
| 2 | 周欣欣 | 3 | 2 | 书法 |
| 2 | 周欣欣 | 4 | 2 | 绘画 |
| 2 | 周欣欣 | 5 | 2 | 看书 |
| 3 | 陈苗苗 | 6 | 3 | 登山 |
| 7 | 99 | 无极限 |

distinct
由以下例子可以看出,distinct 是后面跟随的所有列唯一,而不是后面紧跟的一列
select DISTINCT users.id, users.name, user_hobbies.hobby from users left join user_hobbies on users.id = user_hobbies.user_id
| id | name | hobby |
|---|---|---|
| 1 | 王乐乐 | 唱歌 |
| 1 | 王乐乐 | 跳舞 |
| 2 | 周欣欣 | 书法 |
| 2 | 周欣欣 | 绘画 |
| 2 | 周欣欣 | 看书 |
| 3 | 陈苗苗 | 登山 |
| 4 | 李思思 |
select DISTINCT users.id, users.name, user_hobbies.* from users left join user_hobbies on users.id = user_hobbies.user_id
| id | name | id(1) | user_id | hobby |
|---|---|---|---|---|
| 1 | 王乐乐 | 1 | 1 | 唱歌 |
| 1 | 王乐乐 | 2 | 1 | 跳舞 |
| 2 | 周欣欣 | 3 | 2 | 书法 |
| 2 | 周欣欣 | 4 | 2 | 绘画 |
| 2 | 周欣欣 | 5 | 2 | 看书 |
| 3 | 陈苗苗 | 6 | 3 | 登山 |
| 1 | 王乐乐 | 8 | 1 | 唱歌 |
| 4 | 李思思 |
group by
select users.id, users.name, user_hobbies.* from users left join user_hobbies on users.id = user_hobbies.user_id GROUP BY users.id
| id | name | id(1) | user_id | hobby |
|---|---|---|---|---|
| 1 | 王乐乐 | 1 | 1 | 唱歌 |
| 2 | 周欣欣 | 3 | 2 | 书法 |
| 3 | 陈苗苗 | 6 | 3 | 登山 |
| 4 | 李思思 |