需要建的三个表:

  学生表

  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 查询练习的更多相关文章

  1. [转] 利用SET STATISTICS IO和SET STATISTICS TIME 优化SQL Server查询性能

    首先需要说明的是这篇文章的内容并不是如何调节SQL Server查询性能的(有关这方面的内容能写一本书),而是如何在SQL Server查询性能的调节中利用SET STATISTICS IO和SET ...

  2. SQL SERVER 查询性能优化——分析事务与锁(五)

    SQL SERVER 查询性能优化——分析事务与锁(一) SQL SERVER 查询性能优化——分析事务与锁(二) SQL SERVER 查询性能优化——分析事务与锁(三) 上接SQL SERVER ...

  3. SQL Server 查询性能优化 相关文章

    来自: SQL Server 查询性能优化——堆表.碎片与索引(一) SQL Server 查询性能优化——堆表.碎片与索引(二) SQL Server 查询性能优化——覆盖索引(一) SQL Ser ...

  4. 利用SET STATISTICS IO和SET STATISTICS TIME 优化SQL Server查询性能

    首先需要说明的是这篇文章的内容并不是如何调节SQL Server查询性能的(有关这方面的内容能写一本书),而是如何在SQL Server查询性能的调节中利用SET STATISTICS IO和SET ...

  5. 如何找出你性能最差的SQL Server查询

    我经常会被反复问到这样的问题:”我有一个性能很差的SQL Server.我如何找出最差性能的查询?“.因此在今天的文章里会给你一些让你很容易找到问题答案的信息向导. 问SQL Server! SQL ...

  6. 使用WinDbg调试SQL Server查询

    上一篇文章我给你介绍了WinDbg的入门,还有你如何能附加到SQL Server.今天的文章,我们继续往前一步,我会向你展示使用WinDbg调试SQL Server查询需要的步骤.听起来很有意思?我们 ...

  7. sql server 查询分析器消息栏里去掉“(5 行受影响)”

    sql server 查询分析器消息栏里去掉"(5 行受影响)"     在你代码的开始部分加上这个命令: set nocount on   记住在代码结尾的地方再加上: set ...

  8. Sql Server查询性能优化之走出索引的误区

    据了解绝大多数开发人员对于索引的理解都是一知半解,局限于大多数日常工作没有机会.也什么没有必要去关心.了解索引,实在哪天某个查询太慢了找到查询条件建个索引就ok,哪天又有个查询慢了,再建立个索引就是, ...

  9. SQL Server 查询分析器提供的所有键盘快捷方式(转)

    下表列出 SQL Server 查询分析器提供的所有键盘快捷方式. 活动 快捷方式 书签:清除所有书签. CTRL-SHIFT-F2 书签:插入或删除书签(切换). CTRL+F2 书签:移动到下一个 ...

  10. SQL Server查询性能优化——堆表、碎片与索引(二)

    本文是对 SQL Server查询性能优化——堆表.碎片与索引(一)的一些总结.  第一:先对 SQL Server查询性能优化——堆表.碎片与索引(一)中的例一的SET STATISTICS IO之 ...

随机推荐

  1. codeforces 651B B. Beautiful Paintings

    B. Beautiful Paintings time limit per test 1 second memory limit per test 256 megabytes input standa ...

  2. java中变量的分类

    •按被声明的位置划分: –成员变量:方法外部.类的内部定义的变量 –局部变量:方法或语句块内部定义的变量        –注意:类外面(类对应的大括号外面)不能有变量的声明 •按所属的数据类型划分: ...

  3. 打包AAC码流到FLV文件

    AAC编码后数据打包到FLV很简单. 1. FLV音频Tag格式                              字节位置    意义0x08,                       ...

  4. Parallel Programming-Concurrent Collections

    备忘:asp.net平台下线程安全集合类.   Class Description BlockingCollection<T> Provides blocking and bounding ...

  5. CentOS6和CentOS7服务开机启动

    CentOS 6和CentOS 7都可以定义开机启动哪些服务,但CentOS 6的命令是chkconfig,CentOS 7是systemctl. 本文将介绍两种命令的实现方式. 一.CentOS 6 ...

  6. java用write()拷贝一个文本文件

    总结:灵活运用循环语句,或条件判断语句.每一种流的正确使用方法: 这里是两种方法: package com.ds; import java.io.*; public class tyut { /*pu ...

  7. nginx用cookie控制访问权限实现方法

    自己的一个需求需要对a.b.com 下的 /c 这个目录下,cookie d=e 才能访问,如果不是,就重定向到f.html 下面看代码.  代码如下 复制代码 server{       serve ...

  8. Nmon工具的使用以及通过nmon_analyse生成分析报表

    在我们监控我们的操作系统的时候如果可以把各个硬件的监控信息生成形象化的分析报表图对于我们来说是件太好的事情了,而通过ibm的nom和nmon_analyser两者的结合完全可以实现我们的要求.首先对n ...

  9. Sql server 备份及还原

    --最常用的几种备份方法: --数据备份----------------------- --数据库级:完整数据库备份 差异数据库备份 --文件级: 完整文件备份 差异文件备份 --日志备份------ ...

  10. <正则吃饺子> :关于Java的native方法(转)

    感谢作者的分享,原文地址:http://blog.csdn.net/wike163/article/details/6635321 一. 什么是Native Method   简单地讲,一个Nativ ...