50个查询系列-第9个查询:查询所有课程成绩小于60分的同学的学号、姓名;

第一想法:

从分数表里面把小于60的学生id都查出来。

SELECT tblstudent.StuId,tblstudent.StuName FROM tblstudent WHERE

(
SELECT  tblscore.Score FROM tblscore WHERE tblstudent.StuId=tblscore.StuId AND tblscore.Score<60

)

然后报错:

Subquery returns more than 1 row
 是的呀。

SELECT  tblscore.Score FROM tblscore WHERE tblstudent.StuId=tblscore.StuId AND tblscore.Score<60这句话查出来的数据有好几条呢。这样的当然是不对的。

还是不知道怎么修改,于是看答案:

select tblstudent.StuId,tblstudent.StuName from tblstudent where
tblstudent.StuId NOT IN
(
select  tblscore.StuId from tblscore where tblstudent.StuId=tblscore.StuId AND tblscore.Score>60)
时间: 2024-10-07 19:20:21

50个查询系列-第9个查询:查询所有课程成绩小于60分的同学的学号、姓名;的相关文章

【sql:练习题2】查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩

题目:查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩 这里提到平均分 ,要用到avg  按照学生分组,再求平均分,这里应该是考察group by 与聚合函数的使用  大于60分应该是按照分组后筛选的结果要用having group by 与聚合函数  having 的使用 上篇博客已经写过 于是写的sql于下: SELECT studentid,AVG(score) AS a FROM student_score GROUP BY studentid HAVING a>60

50个查询系列-第五个查询:查询没学过“叶平”老师课的同学的学号、姓名;

查询没学过"叶平"老师课的同学的学号.姓名: 我们反着来 !不是要查没上过课的同学的名字吗.我们先查上叶平的课的学生. 思路: 1.先去查叶平上的课的课程id: SELECT t1.courseid kid FROM tblcourse t1, (SELECT tblteacher.TeaId tid FROM tblteacher WHERE tblteacher.TeaName='叶平') t2 WHERE t1.teaid=t2.tid -- 查出来叶平老师上的课的课程id 结果

50个查询系列-第六个查询:查询学过“001”并且也学过编号“002”课程的同学的学号、姓名

查询学过"001"并且也学过编号"002"课程的同学的学号.姓名: 我的写法: 第一步:先查出来学过"001"并且也学过编号"002"课程的同学的学号: SELECT t11.t1sid t33id FROM (SELECT t1.StuId t1sid FROM tblscore t1 WHERE t1.CourseId='001')t11,-- 001的学生的id (SELECT t1.StuId t2sid FROM t

50个查询系列-第三个查询:查询所有同学的学号、姓名、选课数、总成绩;

查询最主要的就是确定查询的主表,和辅助表. 这个的话我们可以确认是用子查询. 主表就是我们的学生表:tblstudent可以查到学生的学号,姓名 辅助表就是成绩表,tblscore 自己写的语句如下: SELECT tblstudent.StuId,tblstudent.StuName,xuankeshu.kscount,kccj.countscore FROM TBLSTUDENT , ( SELECT count(tblscore.CourseId) kscount,tblscore.Stu

50个查询系列-第一个查询

--问题: --1.查询"001"课程比"002"课程成绩高的所有学生的学号: 第一步明确主表和次表. 我们要查询的是学生的学号,那么主表就是学生表(tblstudent) 但是我们要根据学生的成绩来筛选结果,所以我们的成绩表就是次表. SELECT tblstudent.StuId -- tblstudent是主表,我们从主表里面查询我们的学生学号.from tblstudent表示我们查出来的就是表里面的数据数量 from tblstudent WHEre --

SQL Server调优系列基础篇(子查询运算总结)

原文:SQL Server调优系列基础篇(子查询运算总结) 前言 前面我们的几篇文章介绍了一系列关于运算符的介绍,以及各个运算符的优化方式和技巧.其中涵盖:查看执行计划的方式.几种数据集常用的连接方式.联合运算符方式.并行运算符等一系列的我们常见的运算符.有兴趣的童鞋可以点击查看. 本篇我们介绍关于子查询语句的一系列内容,子查询一般是我们形成复杂查询的一些基础性操作,所以关于子查询的应用方式就非常重要. 废话少说,开始本篇的正题. 技术准备 数据库版本为SQL Server2008R2,利用微软

大数据系列之分布式大数据查询引擎Presto

关于presto部署及详细介绍请参考官方链接 http://prestodb-china.com PRESTO是什么? Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节. Presto的设计和编写完全是为了解决像Facebook这样规模的商业数据仓库的交互式分析和处理速度的问题. 它可以做什么? Presto支持在线数据查询,包括Hive, Cassandra, 关系数据库以及专有数据存储. 一条Presto查询可以将多个数据源的数据进行合并,可以跨越

SQL语句优化系列三(关于select查询)

关于select查询 输出表中的所有列   select  *  from 表名 输出表中的部分列   select  字段名表 from 表名 为结果集内的列指定列名  select  {字段名1 [ as 列的别名]  [,-n]}  from 表名 消除取值重复的行,在select 后面紧跟 distinct 限制返回的行数    select  top 行数 列名表 from 表名 查询满足条件的元组  select  *  from 表名 where 查询条件 比较:列表达式1 比较运

mysql 开发进阶篇系列 23 应用层优化与查询缓存

一.概述 前面章节介绍了很多数据库的优化措施,但在实际生产环境中,由于数据库服务器本身的性能局限,就必须要对前台的应用来进行优化,使得前台访问数据库的压力能够减到最小. 1. 使用连接池 对于访问数据库来说,建立连接的代价比较昂贵,因为连接到数据库服务器需要经历多个步骤如:建立物理通道,服务器进行初次握手,分析连接字符串信息,由服务器对连接进行身份验证等.因此,有必要建立"连接池"以提高访问的性能.连接池中的连接已经预先创建好了,可以直接分配给应用层使用,减少了创建新连接所消耗的资源,