题目: 有一个student表,表中记录一个班级所有学生的课程和成绩,每个学生有多门课程,不同的学生选修的课程可能不一样。尝试写一条SQL语句查询出所有课程成绩大于80分的所有学生姓名。
表结构和表数据如下:

-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (`id` int(11) NOT NULL AUTO_INCREMENT,`score` double NOT NULL,`name` varchar(50) DEFAULT NULL,`course` varchar(50) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('1', '80', '张飞', '语文');
INSERT INTO `student` VALUES ('2', '76', '张飞', '数学');
INSERT INTO `student` VALUES ('3', '88', '刘备', '语文');
INSERT INTO `student` VALUES ('4', '95', '刘备', '数学');
INSERT INTO `student` VALUES ('5', '86', '关羽', '语文');
INSERT INTO `student` VALUES ('6', '72', '关羽', '数学');
INSERT INTO `student` VALUES ('7', '78', '关羽', '英语');
INSERT INTO `student` VALUES ('8', '80', '诸葛亮', '语文');
INSERT INTO `student` VALUES ('9', '85', '诸葛亮', '物理');
INSERT INTO `student` VALUES ('10', '88', '诸葛亮', '化学');

方法一:逆向思维解答
先查出有课程成绩小于80分的学生姓名,然后用not in 或 not exists 方法进行排除。

//not in
SELECT DISTINCT a.name
FROM student a
WHERE a.name NOT IN(SELECT DISTINCT b.name FROM student b WHERE b.score < 80)//not exists
SELECT DISTINCT a.name
FROM student a
WHERE NOT EXISTS(SELECT 1 FROM student b WHERE b.score < 80
AND a.name = b.name)

查询结果

name
刘备
诸葛亮

说明:
exists (sql 返回结果集,为真)
not exists (sql 不返回结果集,为真)
exists 与 in 最大的区别在于 in引导的子句只能返回一个字段

方法2:使用Having

SELECT s.name
FROM student s
GROUP BY s.name
Having MIN(s.score)>=80

查询结果

name
刘备
诸葛亮

说明:
SQL使用HAVING子句来指定一组行或聚合的过滤条件。
HAVING子句通常与GROUP BY子句一起使用,以根据指定的条件过滤分组。如果省略GROUP BY子句,则HAVING子句的行为与WHERE子句类似。
HAVING子句将过滤条件应用于每组分行,而WHERE子句将过滤条件应用于每个单独的行。

使用SQL查询出每门课程的成绩均大于80分的学生姓名相关推荐

  1. 使用一个SQL查询出每门课程的成绩都大于80分的学生姓名

    使用一个SQL查询出每门课程的成绩都大于80分的学生姓名 表名为student,字段和数据如下用一条SQL语句查询出student表中每门功课都大于80分的学生姓名. name kecheng fen ...

  2. 洪君:查出“张”姓学生中平均成绩大于75分的学生信息查询出每门课程的成绩都大于80的学生

    查询出"张"姓学生中平均成绩大于75分的学生信息 表名:student_score  name course score  张青 语文 72  王华 数学 72  张华 英语 81 ...

  3. 用一条SQL语句查询出每门课程的成绩都大于80的学生姓名

    -- 用一条SQL语句查询出每门课程的成绩都大于80的学生姓名.Student表如下: -- name course score -- 张三 语文 81 -- 张三 数学 75 -- 李四 语文 76 ...

  4. 使用sql语句查出每门课成绩都大于80分的学生姓名

    根据表的结构来使用sql语句查询 建表SQL如下: create table stu_grade(name varchar(20),coursevarchar(20),grade int); – 插入 ...

  5. select每门可说大于90分_用一条sql语句查询出“每门”课程都大于80分的学生姓名...

    展开全部 首先需要进行分析: 要查询出每门课程都大于80分的学生姓名,因为一个学生有多门课程,所以会出62616964757a686964616fe78988e69d8331333366306534现 ...

  6. 案例:用一条 SQL 语句查询出每门课都大于 80 分的学生姓名

    用一条sql语句查询出每门课都大于80分的学生姓名 首先需要进行分析: 要查询出每门课程都大于80分的学生姓名,因为一个学生有多门课程,所以会出现下面三种情况. 第一可能所有课程都大于80分. 第二可 ...

  7. 数据库:一条sql语句查询每门课程都大于80分的学生姓名

    描述:已知student表有姓名-name,分数-grade,课程-course,它们多对多对多,一条sql语句查询每门课程都大于80分的学生姓名? 分析: ①每门课程,涉及到课程数量统计 SELEC ...

  8. 用sql语句查询出每门课都大于80 分的学生姓名案例解析

    用一条SQL 语句 查询出每门课都大于80 分的学生姓名 name course grade 张三 语文 81 张三 数学 75 李四 语文 76 李四 数学 90 王五 语文 81 王五 数学 10 ...

  9. 用一条SQL语句查询出每门课都大于80分的学生姓名

    两道sql题: 1.用一条SQL语句查询出每门课都大于80分的学生姓名. 2.删除除了自动编号不同,其他都相同的学生冗余信息. 第一题数据如下: 分析:每门课都大于80分,就是说学生最低分数要大于80 ...

最新文章

  1. Kali Linux 2016.2初体验使用总结
  2. 在全局中调用类的静态成员函数
  3. 删除指定天数之前的日期文件夹
  4. python sqlite3使用详解
  5. GDAL读写矢量文件——Python
  6. go -生成pb文件 - 上
  7. 群晖3617可以有几个网卡_Synology 群晖 DS1621+ 六盘位NAS 开箱拆解评测
  8. labelme也可以标注polygan
  9. 傲腾机器Linux,【收藏】傲腾装机必看!
  10. ArcSight Recon
  11. Docker 教程:如何将Helix QAC作为容器创建并运行 上
  12. ucfirst() 函数
  13. GeForce Desktop Products Compute Capability
  14. 糖尿病性视网膜病变分级诊断
  15. python 从入门到精通——多任务、多线程编程
  16. opengl 多边形线框_opengl基础学习专题 (三) 多边形绘制的几种样式
  17. 易语言 多线程,等待所有线程执行完毕后操作
  18. Centos 7.4 防火墙关闭命令
  19. 存储虚拟化的特性和优势
  20. SQL Server电影院数据库管理系统【英文版-源码】--(Movie Theatre Management System Database)

热门文章

  1. WordPress 严重的远程备份执行代码漏洞
  2. Linux redis集群重启
  3. zsh+autojump
  4. 一个神奇的短信(微信)拜年公众号
  5. 基于ITOP4412开发板的实时视频监控系统实现
  6. 前端学习笔记(五):VUE基础学习笔记
  7. python占位符补数据_Python 占位符格式化的简单示例
  8. python iloc函数_python pandas Series.iloc用法及代码示例
  9. 【优秀的素材收藏管理工具】Inboard for Mac 1.1
  10. 解决谷歌访问本地文件和跨域问题