sql server 查询练习
需要建的三个表:
学生表
create table Student
(
Sno varchar(20) not null primary key,
Sname varchar(20) not null,
Ssex varchar(20) not null,
Sbirthday datetime,
Class varchar(20)
)
课程表
create table Course
(
Cno varchar(20) not null primary key,
Cname varchar(20) not null,
Tno varchar(20) not null references Teacher(Tno)
)
成绩表:
create table Score
(
Sno varchar(20) not null references Student(Sno),
Cno varchar(20) not null references Course(Cno),
Degree Decimal(4,1)
)
插入数据:
学生表:
insert into student values (108,'曾华','男',1977-09-01,95033);
insert into student values (105,'匡明','男',1975-10-02,95031);
insert into student values (107,'王丽','女',1976-01-23,95033);
insert into student values (101,'李军','男',1976-01-23,95033);
insert into student values (109,'王芳','女',1975-02-10,95031);
insert into student values (103,'陆君','女',1974-036-03,95031);
课程表:
insert into Course values (3-105,'计算机导论',825);
insert into Course values (3-245,'操作系统',804);
insert into Course values (6-166,'数据电路',856);
insert into Course values (9-888,'高等数学',831);
成绩表:
insert into Score values (103,3-245,86);
insert into Score values (105,3-245,75);
insert into Score values (109,3-245,68);
insert into Score values (103,3-105,92);
insert into Score values (105,3-105,88);
insert into Score values (109,3-105,76);
insert into Score values (101,3-105,64);
insert into Score values (107,3-105,91);
insert into Score values (108,3-105,78);
insert into Score values (101,6-166,85);
insert into Score values (107,6-166,79);
insert into Score values (108,6-166,81);
查询题目:
--1) 查询java 课程比C#分数高的学生
--2)查询平均分成绩大于 70 分的同学的姓名和平均成绩
--3)查询所有同学的学号、姓名、选课数、总成绩
--5)查询没有学过 java 课的学生的学号、姓名
--学过java
--没学过java
--6)查询学过“C#”课程并且也学过“sql”课程的学生的学号、姓名
--7)查询所有课程的平均分、及格率
---8)查询所有课程成绩小于 60 分的同学的学号、姓名、性别
--9)查询没有学全所有课的同学的学号、姓名、性别
--10)查询至少有一门课与学号为“002”的同学所学相同的同学的学号和姓名
--13)查询和“002”号的同学学习的课程完全相同的其他同学学号和姓名
--15)按平均成绩从高到低显示所有学生的“sql”、“java”、“c#”三门的课程 成绩,按如下形式显示:学生 ID,sql,java,c#,有效课程数,有效平均分
--16)查询各科成绩最高和最低的分:以如下形式显示:课程 ID,最高分,最低分
--17)查询不同班级所教不同课程平均分从高到低显示
--18)查询各科成绩前三名的记录:(不考虑成绩并列情况)
/*
row_number() over( order by sc.mark desc)
*/
--19)查询每门课程被选修的学生数
--20)查询出只选修了一门课程的全部学生的学号和姓名
--21)查询男生、女生人数
--22)查询姓“张”的学生名单
--23)查询同名同性学生名单,并统计同名人数
--24)查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时, 按课程号降序排列
--25)查询平均成绩大于70的所有学生的学号、姓名和平均成绩
--26)检索至少选修两门课程的学生学号
--27)查询两门以上不及格课程的同学的学号及其平均成绩
--28)检索“java”课程分数小于 60,按分数降序排列的同学姓名
查询题目答案:
1:select * from Student stu
left join Score sco on stu.Sno=sco.Sno and sco.Cno=-102
left join Score sco2 on stu.Sno=sco2.Sno and sco2.Cno=-242
where sco.Degree>sco2.Degree; 2:select Sname,AVG(sco.Degree) from Student stu
left join Score sco on stu.Sno=sco.Sno
group by stu.Sname,sco.Sno having AVG(sco.Degree)>70; 3:select stu.Sno,stu.Sname,count(sco.Sno) as '选课数' ,sum(sco.Degree) '总成绩'
from Student stu inner join Score sco on stu.Sno=sco.Sno
group by stu.Sname,stu.Sno,sco.Sno; 5.1:select * from Student where Sno in(select Sno from score where Sno not in (select sno from Score where Cno=-242)); 5.2:select * from Student where Sno in (select Sno from score where Sno in (select sno from Score where Cno=-242)); 6:select * from Student stu
left join Score sco on stu.Sno=sco.Sno and sco.Cno=-102
left join Score sco2 on stu.Sno=sco.Sno and sco2.Cno=-242
where sco.Sno=sco2.Sno; 7:select a.Cno,avg(a.Degree) as 'avg',
CONVERT(float,SUM(case when Degree>0 then 1 else 0 end)) as '总人数',
cONVERT(float,SUM(case when Degree>60 then 1 else 0 end)) as '每门的及格人数',
CONVERT(varchar(20),CONVERT(decimal(18,2),cONVERT(float,SUM(case when Degree>60 then 1.0 else 0.0 end))/
SUM(case when Degree>0 then 1 else 0 end))*100 )+'%'
as '及格率'
from Score a
group by a.Cno 8:select * from Student where Sno in(select Sno from Score where Degree<60); 9:select sco.Sno,stu.Sname,stu.Ssex from Student stu
left join Score sco on stu.Sno=sco.Sno
group by sco.Sno,stu.Sname,stu.Ssex having COUNT(sco.Sno)!=(select COUNT(*) from Course) 10:select * from Student where sno in (select Sno from Score where Cno in (select Cno from Score where Score.Sno=108)); 13:select sco.Sno from Score sco where sco.Sno not in (select Sno from Score where Cno not in (select Cno from Score where Sno=103))
group by sco.Sno having COUNT(*)=(select COUNT(*) from Score where Sno=103)
and sco.Sno<>103 15:select stu.Sno,stu.Sname,
sum(case when sco.cno=-102 then sco.Degree else 0 end) '计算机导论',
sum(case when sco.cno=-160 then sco.Degree else 0 end) '数据电路',
sum(case when sco.cno=-242 then sco.Degree else 0 end) '操作系统',
sum(case when sco.cno=-879 then sco.Degree else 0 end) '高等数学',
COUNT(*) as '有效课程数' ,AVG(sco.Degree) as '有效平均分'
from Student stu
left join Score sco on stu.Sno=sco.Sno
group by stu.Sno,stu.Sname order by AVG(sco.Degree)desc; 16:select Sno,MAX(Degree) as '最高分' ,MIN(Degree) as '最低分' from Score group by Sno; 17:select cou.Cno,stu.Class,avg(sco.Degree)from Score sco
left join Course cou
on sco.Cno=cou.Cno
left join Student stu
on stu.Sno=sco.Sno
group by cou.Cno,stu.Class
order by AVG(sco.Degree) desc; 18:select * from (select *, ROW_NUMBER() over (partition by cno order by Degree desc ) ev from Score sco) t
where t.ev<4 order by t.Cno,t.Degree desc 19:select Sno,COUNT(cno) '选修的课程数' from Score group by Sno; 20:select * from Student stu
left join Score sco on stu.Sno=sco.Sno
where(select COUNT(*) from Score sco2 where sco.Sno=sco2.Sno)=3; 21:select SUM(case when ssex='男' then 1 else 0 end )as '男',
SUM(case when ssex='女' then 1 else 0 end )as '女'
from Student; 22:select * from Student where sname like '张%'; 23:select sname,COUNT(*) from Student group by Sname having COUNT(*)>1; 24:select Cno,AVG(Degree) from Score group by Cno order by AVG(Degree) desc ,Cno ; 25:select Sno,AVG(Degree) as '平均分' from Score group by Sno having AVG(Degree)>70; 26:select sno ,count(Cno) as '选修课程数' from Score group by Sno having COUNT(Cno)>2 or COUNT(Cno)=2 ; 27:select Sno,SUM(Case when Degree<60 then 1 else 0 end ) as '不及格人数' ,
avg(Degree) from Score group by Sno having SUM(Case when Degree<60 then 1 else 0 end )=1; 28:select * from Student stu left join Score sco on stu.Sno=sco.Sno
where Degree>60 and Cno=-242 order by Degree desc ;
sql server 查询练习的更多相关文章
- [转] 利用SET STATISTICS IO和SET STATISTICS TIME 优化SQL Server查询性能
首先需要说明的是这篇文章的内容并不是如何调节SQL Server查询性能的(有关这方面的内容能写一本书),而是如何在SQL Server查询性能的调节中利用SET STATISTICS IO和SET ...
- SQL SERVER 查询性能优化——分析事务与锁(五)
SQL SERVER 查询性能优化——分析事务与锁(一) SQL SERVER 查询性能优化——分析事务与锁(二) SQL SERVER 查询性能优化——分析事务与锁(三) 上接SQL SERVER ...
- SQL Server 查询性能优化 相关文章
来自: SQL Server 查询性能优化——堆表.碎片与索引(一) SQL Server 查询性能优化——堆表.碎片与索引(二) SQL Server 查询性能优化——覆盖索引(一) SQL Ser ...
- 利用SET STATISTICS IO和SET STATISTICS TIME 优化SQL Server查询性能
首先需要说明的是这篇文章的内容并不是如何调节SQL Server查询性能的(有关这方面的内容能写一本书),而是如何在SQL Server查询性能的调节中利用SET STATISTICS IO和SET ...
- 如何找出你性能最差的SQL Server查询
我经常会被反复问到这样的问题:”我有一个性能很差的SQL Server.我如何找出最差性能的查询?“.因此在今天的文章里会给你一些让你很容易找到问题答案的信息向导. 问SQL Server! SQL ...
- 使用WinDbg调试SQL Server查询
上一篇文章我给你介绍了WinDbg的入门,还有你如何能附加到SQL Server.今天的文章,我们继续往前一步,我会向你展示使用WinDbg调试SQL Server查询需要的步骤.听起来很有意思?我们 ...
- sql server 查询分析器消息栏里去掉“(5 行受影响)”
sql server 查询分析器消息栏里去掉"(5 行受影响)" 在你代码的开始部分加上这个命令: set nocount on 记住在代码结尾的地方再加上: set ...
- Sql Server查询性能优化之走出索引的误区
据了解绝大多数开发人员对于索引的理解都是一知半解,局限于大多数日常工作没有机会.也什么没有必要去关心.了解索引,实在哪天某个查询太慢了找到查询条件建个索引就ok,哪天又有个查询慢了,再建立个索引就是, ...
- SQL Server 查询分析器提供的所有键盘快捷方式(转)
下表列出 SQL Server 查询分析器提供的所有键盘快捷方式. 活动 快捷方式 书签:清除所有书签. CTRL-SHIFT-F2 书签:插入或删除书签(切换). CTRL+F2 书签:移动到下一个 ...
- SQL Server查询性能优化——堆表、碎片与索引(二)
本文是对 SQL Server查询性能优化——堆表.碎片与索引(一)的一些总结. 第一:先对 SQL Server查询性能优化——堆表.碎片与索引(一)中的例一的SET STATISTICS IO之 ...
随机推荐
- PHP把时间转换成几分钟前、几小时前、几天前的几个函数、类分享
这篇文章主要介绍了php计算时间几分钟前.几小时前.几天前的几个函数.类分享,需要的朋友可以参考下一.函数实现实例1: <?php header("Content-type: text ...
- 【BZOJ 3238】差异 后缀自动机+树形DP
题意 给定字符串,令$s_i$表示第$i$位开始的后缀,求$\sum_{1\le i < j \le n} len(s_i)+len(s_j)-2\times lcp(s_i,s_j)$ 先考虑 ...
- AngularJS方法 —— angular.bind
描述: 上下文,函数以及参数动态绑定,返回值为绑定之后的函数. 其中args是可选的动态参数,self在fn中使用this调用. 使用方法: angular.bind(self,fn,args ); ...
- ACM学习历程—HDU5423 Rikka with Tree(搜索)
Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...
- Swift中的参数内部名称和外部名称
1.什么是参数的内部名称和外部名称? struct Color { let red, green, blue: Double init(red redColor: Double,green green ...
- poj 3469 Dual Core CPU——最小割
题目:http://poj.org/problem?id=3469 最小割裸题. 那个限制就是在 i.j 之间连双向边. 根据本题能引出网络流中二元关系的种种. 别忘了写 if ( x==n+1 ) ...
- bzoj 3996 线性代数 —— 最大权闭合子图
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3996 把题中的式子拆开看看,发现就是如下关系: 如果 a[i] == 1 && ...
- vijos1779国王游戏
描述 恰逢H国国庆,国王邀请n位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这n位大臣排成一排,国王站在队伍的最前面.排好队后, ...
- jquery 中post 、get的同步问题,从外部获取返回数据
解决方法1: 在全局设置: $.ajaxSetup({ async : false }); $.ajaxSetup({ async : false }); 然后再使用post或get方法 $.get( ...
- linux日常管理-vmstat命令
系统负载用w查看.是什么原因造成了系统负载.查看系统负载状态 命令:vmstat vmstat就查看一次 vmstat 1 每秒钟更新一次.按ctrl+c取消. vmstat 1 5 每秒钟更新一次, ...