假设有学生表(users)
-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES ('1', '小明');
INSERT INTO `users` VALUES ('2', '小虎');
INSERT INTO `users` VALUES ('3', '小花');
INSERT INTO `users` VALUES ('4', '小花');
INSERT INTO `users` VALUES ('5', '小花');
INSERT INTO `users` VALUES ('6', '小虎');
课程成绩表:
-- ----------------------------
-- Table structure for scores
-- ----------------------------
DROP TABLE IF EXISTS `scores`;
CREATE TABLE `scores` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`uid` bigint(20) DEFAULT NULL,
`score` decimal(10,0) DEFAULT NULL,
`type` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of scores
-- ----------------------------
INSERT INTO `scores` VALUES ('1', '1', '100', '语文');
INSERT INTO `scores` VALUES ('2', '1', '100', '数学');
INSERT INTO `scores` VALUES ('3', '3', '100', '语文');
INSERT INTO `scores` VALUES ('4', '3', '80', '数学');
求总成绩前10学生的名字
SELECT
SUM( score ) AS total,
a.NAME
FROM
users AS a
LEFT JOIN scores AS b ON a.id = b.uid
GROUP BY
NAME
ORDER BY
total DESC
结果:
total name
200 小明
180 小花
null 小虎
一对多的表关系时,mysql会将-复制出来匹配多的数据