目录
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 | 李思思 |