sql server-求助!!::SQL语句查询求改正!!

问题描述

求助!!::SQL语句查询求改正!!

我有一个SQL Server表,表明为:EvaluateTeacherGrade
运行效果如下图:


问题1:我想查询得到所有courseID=200002和teacherID=22222001的相关数据表。我用如下SQL语句查询获得的表count应该等于108才对,但是为什么等??
SQL语句如下所示:

 select C.courseID,C.courseName,C.teacherID,C.teacherName,Count(e.Grade) As count
from EvaluateTeacherGrade e,Course C,Grade G
where e.courseID=G.courseID and e.courseID=C.courseID and e.courseID='200002'and  e.teacherID='22222001'
GROUP BY C.COURSEID,C.COURSENAME,C.TEACHERID,C.TEACHERNAME

效果图如下所示:

我该如何改正SQL语句啊??
问题2:我想查询得到所有courseID=200002和studentID=0711001的相关数据表。我用如下SQL语句查询获得的表count应该等于54才对,但是为什么等于45呢??
SQL语句如下所示:

select C.courseID,C.courseName,C.teacherID,C.teacherName,Count(e.Grade) As count ,e.studentID ,s.studentName
from EvaluateTeacherGrade e,Course C,Grade G,student s
where e.courseID=G.courseID and C.courseID=G.courseID and e.studentID =s.studentID
 and e.courseID='200002'and e.studentID='0711001'
GROUP BY C.COURSEID,C.COURSENAME,C.TEACHERID,C.TEACHERNAME ,e.studentID ,s.studentName

查询得到的效果图如下所示:

我该如何改正SQL语句呢??

解决方案

用以下sql试试
select C.courseID,C.courseName,C.teacherID,C.teacherName,Count(e.Grade) As count
from EvaluateTeacherGrade e,Course C,Grade G
where e.courseID*=G.courseID and e.courseID*=C.courseID and e.courseID='200002'and e.teacherID='22222001'
GROUP BY C.COURSEID,C.COURSENAME,C.TEACHERID,C.TEACHERNAME

select C.courseID,C.courseName,C.teacherID,C.teacherName,Count(e.Grade) As count ,e.studentID ,s.studentName
from EvaluateTeacherGrade e,Course C,Grade G,student s
where e.courseID*=G.courseID and C.courseID*=G.courseID and e.studentID =s.studentID
and e.courseID='200002'and e.studentID='0711001'
GROUP BY C.COURSEID,C.COURSENAME,C.TEACHERID,C.TEACHERNAME ,e.studentID ,s.studentName

解决方案二:

你的意思是你认为这个查询应该返回108,但是实际返回了90?
虽然我不知道你的108这个数字是哪里来的,但是即使108是正确的,这个不一定是SQL的错,可能是你的数据有问题。
你可以试一下这个SQL语句

select C.courseID,C.courseName,C.teacherID,C.teacherName,Count(e.Grade) As count
from EvaluateTeacherGrade e,Course C
where e.courseID=C.courseID and e.courseID='200002'and  e.teacherID='22222001'
GROUP BY C.COURSEID,C.COURSENAME,C.TEACHERID,C.TEACHERNAME

如果这个SQL语句返回的是108的话,说明你的Grade标没有完全覆盖EvaluateTeacherGrade表的CourseId。因此一做关联就筛选掉了一部分数据。
同时,你的查询中并没有用到Grade表的任何数据。
第二个查询和第一个本质上你没有区别,找到问题了之后应该一样处理。
另外一种可能是:你的courseId或者teacherId里面有空格。这样Id,最好还是用数值型(int/bigint)的比较好

时间: 2024-10-26 08:13:00

sql server-求助!!::SQL语句查询求改正!!的相关文章

select-求助:SQL Server语句出错求改正!!

问题描述 求助:SQL Server语句出错求改正!! 我写了一个SQL Server语句,内容如下: select C.courseID,C.courseName,C.teacherID,C.teacherName,Sum(e.Grade) As count from EvaluateTeacherGrade e,Course C,Grade G where e.courseID=G.courseID and C.courseID=G.courseID and G.studentID='071

MS SQL Server查询优化方法(1)●查询速度慢的原因很多,常见如下几种:

server|速度|优化 MS SQL Server查询优化方法(1) ●查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)8.sp_lock,sp_who,活动的用户查看,原因是读写竞争资源.9.返回了不必

SQL Server数据库嵌套子查询的使用

很多SQL Server程序员对子查询(subqueries)的使用感到困惑,尤其对于嵌套子查询(即子查询中包含一个子查询).现在,就让我们追本溯源地探究这个问题. 有两种子查询类型:标准和相关.标准子查询执行一次,结果反馈给父查询.相关子查询每行执行一次,由父查询找回.在本文中,我将重点讨论嵌套子查询(nested subqueries)(我将在以后介绍相关子查询). 试想这个问题:你想生成一个卖平垫圈的销售人员列表.你需要的数据分散在四个表格中:人员.联系方式(Person.Contact)

数据库-sql server 2008 综合题,求大神指点,我建了一部分表,大神在做的时候可按自己方便插入:

问题描述 sql server 2008 综合题,求大神指点,我建了一部分表,大神在做的时候可按自己方便插入: 因为综合题练得比较少不懂得怎样联系:大神回答时,尽量详细,多谢, 做的好的话,C币还可加: 具体要求: 某公司有很多类型的货车(小型货车,双轴货车,16轮货车等),货车要有货车号, 货车类型(小型货车,双轴货车,16轮货车),载重量,有很多司机,每个司机可开 多种类型的货车,司机要有司机号,姓名,地址,薪水,司机运输货物时有货物名称, 目的地,出发时间,返回时,要更新记录,有返回时间,

SQL server中多种关键字查询数据

问题描述 SQL server中多种关键字查询数据 比如学生有姓名,学号,班级等列,我可以通过学号查询,也可以通过姓名查询 解决方案 两个办法,一个是首先在代码中判断输入的是全数字还是中文,分别执行不同的查询.或者写在一起:select * from table where 姓名=输入 or 学号=输入 解决方案二: select * from 学生表 where name = '姓名' or No='学号' 解决方案三: 可以使用动态sql拼接比如定义一个@sqltext 根据不同的情况拼接s

sql server 按日期分组查询

问题描述 sql server 按日期分组查询 各位 大侠,请问这个我弄错了吗,有个字段payment_time,时间格式2015-12-23 19:16:07 ,我要查询把后面时间去掉,变成2015-12-23 这个格式,然后统计每天id数量,我在网上搜索到下面的这个转换日期的代码,我自己添加的count(id),但是不知道为什么不是我想要的结果,哪里不对吗? SELECT substring(Convert(VARCHAR(30), payment_time, 120),1,10) as 日

Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 2 -使用XQuery 查询XML数据

原文:Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 2 -使用XQuery 查询XML数据 XQuery 是一个浏览/返回XML实例的标准语言. 它比老的只能简单处理节点的XPath表达式更丰富. 你可以同XPath一样使用.或是遍历所有节点,塑造XML实例的返回等. 作为一个查询语言, 你需要一个查询处理引擎. SQL Server 数据库通过XML数据类型方法的T-SQL 语句来处理XQuery. SQL Server 并不支持所有的X

第1周 SQL Server 如何执行一个查询

原文:第1周 SQL Server 如何执行一个查询         大家好,欢迎来到第1周的SQL Server性能调优培训.在我们进入SQL Server性能调优里枯燥难懂的细节内容之前,我想通过讲解SQL Server如何执行一个查询来建立基础.这个部分非常重要,因为接下来的培训中我们会以这些概念来加深我们对SQL Server的认识. 当我们执行一个查询时,在SQL Server中最重要的组件有哪些,下面这张图片可以给大家一个概观的认识.         可以看到,SQL Server内

使用SQL Server数据库嵌套子查询的方法_MsSql

很多SQL Server程序员对子查询(subqueries)的使用感到困惑,尤其对于嵌套子查询(即子查询中包含一个子查询).现在,就让我们追本溯源地探究这个问题.  有两种子查询类型:标准和相关.标准子查询执行一次,结果反馈给父查询.相关子查询每行执行一次,由父查询找回.在本文中,我将重点讨论嵌套子查询(nested subqueries)(我将在以后介绍相关子查询).  试想这个问题:你想生成一个卖平垫圈的销售人员列表.你需要的数据分散在四个表格中:人员.联系方式(Person.Contac