`

sql中group by 和count 以及内连接查询的运用

    博客分类:
  • sql
阅读更多
引用

问题描述:
现有3张表:分别是
学生信息表S(sno,sname)
课程信息表C(cno,cname,cteacher)
学生与课程关系表SC(sno,cno,scroce)
问题1:查询出所有未选修过李明老师所教课程的学生姓名.
问题2:查询出有2门以上未及格的学生姓名
问题3:查询出既选修课程"1"也选修了课程"2"的学生姓名

主要考察:group by 和inner join ,having条件筛选,以及count函数的使用
group by 主要是对结果集进行分组,然后采用having搭配使用进行数据的筛选,


drop table S,SC,C
create table S(
	sno varchar(15),			--学号
	sname varchar(15)			--学生姓名
)
create table C(
	cno varchar(15),			--课程编号
	cname varchar(15),			--课程名称
	cteacher varchar(15)		--授课教师
)
create table SC(
	sno varchar(15),			--学号
	cno varchar(15),			--课程编号
	scroce float				--分数
)

select * from S;
delete from S;
insert into S(sno,sname)values('s001','jerry');
insert into S(sno,sname)values('s002','tom');
insert into S(sno,sname)values('s003','jason');

delete from C;
select * from C;
insert into C(cno,cname,cteacher)values('c001','1','李明');
insert into C(cno,cname,cteacher)values('c002','2','李明0');
insert into C(cno,cname,cteacher)values('c003','3','李明1');
insert into C(cno,cname,cteacher)values('c004','4','李明2');

delete from SC;
select * from SC;
insert into SC(sno,cno,scroce)values('s001','c001',40);
insert into SC(sno,cno,scroce)values('s001','c002',50);
insert into SC(sno,cno,scroce)values('s002','c001',50);
insert into SC(sno,cno,scroce)values('s002','c003',50);

select 
	a.sno,a.sname,b.cno
from S as a
inner join SC as b on b.sno=a.sno
where not exists(
	select * from SC where sno=b.sno and cno in(select cno from C where cteacher = '李明')
);


--有2门未及格的学生
select
	a.sname
from S as a
inner join SC as b on b.sno=a.sno
where b.scroce<60
group by a.sname
having count(sname)>1;

--既选修了课程1也选修了课程2的学生姓名

select 
	a.sname
from S a 
inner join SC b on a.sno=b.sno 
inner join C c on c.cno=b.cno 
where b.cno in ('c001','c002')
group by a.sname
having count(a.sname)=2;
分享到:
评论
1 楼 wing123 2011-08-17  
--有2门未及格的学生  
select 
    a.sname  
from S as a  
inner join SC as b on b.sno=a.sno  
where b.scroce<60  
group by a.sname  
having count(sname)>1;

这个有问题:不能按“a.sname”分组,如果有2个同样叫‘jerry’的人,都有两门未及格,结果就只能查出一个来

相关推荐

    sqlserver+group by分组查询分页存储过程

    根据给定的SQL Server存储过程代码片段,我们可以深入解析与SQL Server中的`GROUP BY`分组查询、存储过程以及分页技术相关的知识点。 ### SQL Server中的`GROUP BY`分组查询 `GROUP BY`子句在SQL查询语言中用于将...

    SQL中GROUP BY的用法

    SQL 中 GROUP BY 的用法及聚合函数 GROUP BY 是 SQL 中的一种分组查询语句,通常与聚合函数配合使用。...GROUP BY 语句是 SQL 中的一种强大工具,经常与聚合函数一起使用,用于对数据进行分组和计算。

    SQL语句中Group BY 和Rollup以及cube用法

    ### SQL语句中Group BY 和Rollup以及Cube用法 #### Group BY 子句 `GROUP BY`子句是SQL查询中的一个非常重要的部分,它用于将数据表中的行按照一个或多个列进行分组,使得可以对每个分组执行聚合函数(如SUM、...

    数据库原理及运用实验四SQL连接查询.doc

    10. 查询计算机系的学生选修课程中选修人数前三名的课程名称:使用 COUNT 函数和 GROUP BY 语句实现分组查询。 11. 查询每门课程的先修课程名称和学分信息:使用 JOIN 语句实现连接查询。 12. 分别用左外连接和右...

    在SQL语言中用Group By子句实现除法.pdf

    在数据库查询语言SQL中,Group By子句是一种常用的聚合查询工具,它可以将数据集分成不同的组,对每组数据执行聚合函数操作,比如计算每个组的平均值、总和、最大值、最小值等。当与Select语句结合使用时,Group By...

    SQL GROUP BY 语句详解

    SQL GROUP BY 语句是数据库查询中非常重要的一个部分,它允许我们对数据进行分组,以便于统计和分析。在处理大型数据集时,GROUP BY 与聚合函数(如 SUM、COUNT、AVG、MAX 和 MIN)一起使用,能够帮助我们汇总数据,...

    sql的left join和count应用

    在SQL语言中,`LEFT JOIN` 和 `COUNT` 是两种非常重要的操作,它们在数据库查询中扮演着关键角色。在这个问题中,我们看到一个数据表 `TPL_WORD1`,它包含字段 `Wordid`(主键)、`idFuid`(上一级节点ID)和 `Name`...

    Sql聚合函数和group by的关系详解.doc

    Sql 聚合函数和 group by 是 SQL 语言中两个非常重要的概念,它们之间存在紧密的联系。那么,什么是聚合函数?什么是 group by?它们之间的关系是什么?在本文中,我们将详细地解释 Sql 聚合函数和 group by 的关系...

    SqlServer中Group By高级使用--Inner Join分组统计

    这个查询将返回每个客户的名字以及他们的总订单金额,通过Inner Join将订单表和客户表关联,然后使用Group By对客户进行分组,最后计算每个客户的订单总金额。 进一步扩展,如果我们想在分组统计中包含更复杂条件,...

    简单讲解sql语句中的group by的使用方法

    SQL中的`GROUP BY`语句是数据库查询中的一个重要部分,它用于将数据按照一个或多个列的值进行分组,以便对每个组执行聚合函数,如`SUM`、`COUNT`、`AVG`和`MAX`等。下面我们将详细讨论`GROUP BY`的使用方法及其相关...

    处理group by 查询速度太慢的问题 数据量大.doc

    优化 Group By 查询速度的实践经验 在实际项目中,遇到了表数据量大导致查询速度很慢的问题。通过记录和优化过程,总结出一些有价值的经验,希望能够帮助读者解决类似的问题。 知识点1:Group By 查询的索引设置 ...

    SQL问题详解之_having_Group by

    在SQL查询中,GROUP BY和HAVING子句是数据分析和聚合操作的核心部分,它们帮助我们对数据进行分组和过滤,以获得更有意义的结果。在深入理解这两个子句之前,我们首先需要了解聚合函数,如SUM、COUNT、MAX和AVG等。 ...

    group by + order by

    在数据库查询语言 SQL(Structured Query Language)中,`GROUP BY` 和 `ORDER BY` 是两个非常重要的子句,它们可以帮助我们更高效地管理和展示数据。 #### GROUP BY 子句 `GROUP BY` 主要用于将数据表中的数据...

    关于sql的group by的分析

    在SQL查询中,`GROUP BY`子句是一个非常重要的部分,它用于对数据进行分组,以便我们可以对每个组执行聚合函数(如SUM、COUNT、AVG、MAX、MIN等)。`GROUP BY`通常与聚合函数一起使用,帮助我们从大量数据中提取有用...

    处理group by 查询速度慢的问题.docx

    ### 处理GROUP BY 查询速度慢的问题 在实际项目中,由于数据表的记录数量庞大,经常遇到查询速度缓慢的问题。本文将详细记录一次针对GROUP BY查询效率低下的排查及优化过程,希望能够对读者有所帮助。 #### 问题...

    在SQL Server里查看当前连接的在线用户数

    在SQL Server中,掌握如何查看当前连接的在线用户数是一项重要的技能,这有助于数据库管理员(DBA)监控系统性能、优化资源分配以及处理潜在的安全问题。以下是从给定的文件信息中提炼出的关键知识点,包括如何查询...

    第十一章连接查询和分组查询.zip

    在SQL(结构化查询语言)中,连接查询和分组查询是两个非常重要的概念,用于处理和分析数据库中的数据。本章将详细讲解这两个概念及其应用。 首先,我们来看连接查询。连接查询允许我们将多个表的数据结合在一起,...

    SQL之分组统计和子查询专题

    本课程涵盖了分组统计的重点和难点、子查询的概念和应用场景,以及在实际开发中需要注意的细节。 分组统计 在SQL中,分组统计是对数据进行分组和统计的操作。常用的聚合函数有COUNT、SUM、AVG、MAX、MIN等。其中,...

    《Pro Oracle SQL》Chapter7--7.10GROUP BY Restrictions

    通过阅读7_22.sql、7_21.sql、7_20.sql这三个文件,我们可以看到实际的SQL语句示例,这些示例可能展示了GROUP BY的不同用法和限制,包括如何正确地处理分组、聚合以及如何在实践中避免常见的错误。通过对这些文件的...

    SuperMap Objects .NET SQL查询使用OrderBy属性

    综上所述,SuperMap Objects .NET通过`OrderBy`和`GroupBy`属性提供了强大的SQL查询能力,帮助开发者处理和展示地理空间数据。理解并熟练运用这两个属性,可以有效地提高GIS应用的效率和用户体验。在提供的`SQLQuery...

Global site tag (gtag.js) - Google Analytics