学生成绩表stu_grades
CREATE TABLE `stu_grades` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`grade` int(11) NOT NULL,
`sid` int(11) NOT NULL,
`cid` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
表中添加数据:
我们现在查询课程1中,成绩大于平均成绩的同学的信息:
SELECT * FROM stu_grades WHERE grade > (
SELECT AVG(grade) FROM stu_grades WHERE cid=1
) AND cid=1;
查询结果:
为了验证以上结果我们分步操作:
SELECT AVG(grade) FROM stu_grades WHERE cid=1;
SELECT * FROM stu_grades WHERE grade > 88.75 AND cid=1;
得到的查询结果完全一样。
学生信息表stu_info
CREATE TABLE `stu_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sex` tinyint(4) NOT NULL,
`name` varchar(10) NOT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20110006 DEFAULT CHARSET=utf8
结合以上两张表,我们使用子查询,查找课程1的成绩大于平均分的学生的信息。
SELECT * FROM stu_info WHERE id IN (
SELECT sid FROM stu_grades WHERE grade > (
SELECT AVG(grade) FROM stu_grades WHERE cid=1
) AND cid=1
)
查询结果: