需要建的三个表:

  学生表

  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. 1select * from Student stu
  2. left join Score sco on stu.Sno=sco.Sno and sco.Cno=-102
  3. left join Score sco2 on stu.Sno=sco2.Sno and sco2.Cno=-242
  4. where sco.Degree>sco2.Degree;
  5.  
  6. 2select Sname,AVG(sco.Degree) from Student stu
  7. left join Score sco on stu.Sno=sco.Sno
  8. group by stu.Sname,sco.Sno having AVG(sco.Degree)>70;
  9.  
  10. 3select stu.Sno,stu.Sname,count(sco.Sno) as '选课数' ,sum(sco.Degree) '总成绩'
  11. from Student stu inner join Score sco on stu.Sno=sco.Sno
  12. group by stu.Sname,stu.Sno,sco.Sno;
  13.  
  14. 5.1:select * from Student where Sno in(select Sno from score where Sno not in (select sno from Score where Cno=-242));
  15.  
  16. 5.2:select * from Student where Sno in (select Sno from score where Sno in (select sno from Score where Cno=-242));
  17.  
  18. 6:select * from Student stu
  19. left join Score sco on stu.Sno=sco.Sno and sco.Cno=-102
  20. left join Score sco2 on stu.Sno=sco.Sno and sco2.Cno=-242
  21. where sco.Sno=sco2.Sno;
  22.  
  23. 7:select a.Cno,avg(a.Degree) as 'avg',
  24. CONVERT(float,SUM(case when Degree>0 then 1 else 0 end)) as '总人数',
  25. cONVERT(float,SUM(case when Degree>60 then 1 else 0 end)) as '每门的及格人数',
  26. CONVERT(varchar(20),CONVERT(decimal(18,2),cONVERT(float,SUM(case when Degree>60 then 1.0 else 0.0 end))/
  27. SUM(case when Degree>0 then 1 else 0 end))*100 )+'%'
  28. as '及格率'
  29. from Score a
  30. group by a.Cno
  31.  
  32. 8:select * from Student where Sno in(select Sno from Score where Degree<60);
  33.  
  34. 9:select sco.Sno,stu.Sname,stu.Ssex from Student stu
  35. left join Score sco on stu.Sno=sco.Sno
  36. group by sco.Sno,stu.Sname,stu.Ssex having COUNT(sco.Sno)!=(select COUNT(*) from Course)
  37.  
  38. 10:select * from Student where sno in (select Sno from Score where Cno in (select Cno from Score where Score.Sno=108));
  39.  
  40. 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))
  41. group by sco.Sno having COUNT(*)=(select COUNT(*) from Score where Sno=103)
  42. and sco.Sno<>103
  43.  
  44. 15:select stu.Sno,stu.Sname,
  45. sum(case when sco.cno=-102 then sco.Degree else 0 end) '计算机导论',
  46. sum(case when sco.cno=-160 then sco.Degree else 0 end) '数据电路',
  47. sum(case when sco.cno=-242 then sco.Degree else 0 end) '操作系统',
  48. sum(case when sco.cno=-879 then sco.Degree else 0 end) '高等数学',
  49. COUNT(*) as '有效课程数' ,AVG(sco.Degree) as '有效平均分'
  50. from Student stu
  51. left join Score sco on stu.Sno=sco.Sno
  52. group by stu.Sno,stu.Sname order by AVG(sco.Degree)desc;
  53.  
  54. 16:select Sno,MAX(Degree) as '最高分' ,MIN(Degree) as '最低分' from Score group by Sno;
  55.  
  56. 17:select cou.Cno,stu.Class,avg(sco.Degree)from Score sco
  57. left join Course cou
  58. on sco.Cno=cou.Cno
  59. left join Student stu
  60. on stu.Sno=sco.Sno
  61. group by cou.Cno,stu.Class
  62. order by AVG(sco.Degree) desc;
  63.  
  64. 18:select * from (select *, ROW_NUMBER() over (partition by cno order by Degree desc ) ev from Score sco) t
  65. where t.ev<4 order by t.Cno,t.Degree desc
  66.  
  67. 19:select Sno,COUNT(cno) '选修的课程数' from Score group by Sno;
  68.  
  69. 20:select * from Student stu
  70. left join Score sco on stu.Sno=sco.Sno
  71. where(select COUNT(*) from Score sco2 where sco.Sno=sco2.Sno)=3;
  72.  
  73. 21:select SUM(case when ssex='男' then 1 else 0 end )as '男',
  74. SUM(case when ssex='女' then 1 else 0 end )as '女'
  75. from Student;
  76.  
  77. 22:select * from Student where sname like '张%';
  78.  
  79. 23:select sname,COUNT(*) from Student group by Sname having COUNT(*)>1;
  80.  
  81. 24:select Cno,AVG(Degree) from Score group by Cno order by AVG(Degree) desc ,Cno ;
  82.  
  83. 25:select Sno,AVG(Degree) as '平均分' from Score group by Sno having AVG(Degree)>70;
  84.  
  85. 26:select sno ,count(Cno) as '选修课程数' from Score group by Sno having COUNT(Cno)>2 or COUNT(Cno)=2 ;
  86.  
  87. 27:select Sno,SUM(Case when Degree<60 then 1 else 0 end ) as '不及格人数' ,
  88. avg(Degree) from Score group by Sno having SUM(Case when Degree<60 then 1 else 0 end )=1;
  89.  
  90. 28:select * from Student stu left join Score sco on stu.Sno=sco.Sno
  91. 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. 泛型,注解,反射配合优化BaseDao的猜想

    package test; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.la ...

  2. PS 滤镜——(扭曲)逆球面化 (凹陷效果)

    %%% Inverse_Spherize %%% 逆球面化 clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Proce ...

  3. Android的缓存图片不在系统图库中显示的解决办法

    Android的图库会在开机的时候扫描SD卡中的图片,视频等文件,有很多App的私有图片不想在图库中显示,就需要另外处理了. 解决办法:在缓存图片的文件夹中创建 .nomedia 文件. 1. &qu ...

  4. 经过一年时间的沉淀 再次回首 TCP Socket服务器编程 (二)

    ------------------ 前言 ------------------ 发了第一篇文章后,有不少同志留言,看来socket编程仍然是软件系统里面一个比较难的部分. 第一篇文章主要介绍了传输协 ...

  5. hdu 4372 Count the Buildings —— 思路+第一类斯特林数

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4372 首先,最高的会被看见: 然后考虑剩下 \( x+y-2 \) 个被看见的,每个带了一群被它挡住的楼, ...

  6. Poj1218_THE DRUNK JAILER(水题)

    一.Description A certain prison contains a long hall of n cells, each right next to each other. Each ...

  7. HDOJ1677(铺砖问题)

    Nested Dolls Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  8. 上传下载,使用,commons-fileupload,commons-io来加载上传下载

    导入两个jarcommons-fileupload.jar,和commons-io.jar 在请求中创建核心类 // 1. 创建工厂对象 FileItemFactory factory = new D ...

  9. Python:format()方法

    转于:https://blog.csdn.net/zhang89xiao/article/details/53818906 博主:张肖的博客 描述: format的格式 replacement_fie ...

  10. 【转】 Pro Android学习笔记(五五):调试和分析(3):adb命令、模拟器控制台和StrictMode

    目录(?)[-] adb命令 模拟器Console StrictMode adb命令 我们在学习SQLite的使用,介绍过部分adb命令的使用,见Pro Android学习笔记(五):了解Conten ...