Student(S#,Sname,Sage,Ssex) 学生表 
Course(C#,Cname,T#) 课程表 
SC(S#,C#,score) 成绩表 
Teacher(T#,Tname) 教师表

问题: 
1、查询“001”课程比“002”课程成绩高的所有学生的学号; 

  1. select a.S# from (select s#,score from SC where C#='001') a,(select s#,score
  2. from SC where C#='002') b
  3. where a.score>b.score and a.s#=b.s#;
  4. select a.S#
    from SC a ,SC b
    where a.S#=b.S#
    and a.C#='001'
    and b.C#='002'
    and a.score>b.score

2、查询平均成绩大于60分的同学的学号和平均成绩; 

  1. select S#,avg(score)
  2. from sc
  3. group by S# having avg(score) >60;

3、查询所有同学的学号、姓名、选课数、总成绩;

  1. select Student.S#,Student.Sname,count(SC.C#),sum(score)
  2. from Student left Outer join SC on Student.S#=SC.S#
  3. group by Student.S#,Sname

4、查询姓“李”的老师的个数;

  1. select count(distinct(Tname))
  2. from Teacher
  3. where Tname like '李%';

5、查询没学过“叶平”老师课的同学的学号、姓名;

  1. select Student.S#,Student.Sname
  2. from Student
  3. where S# not in (select distinct( SC.S#) from SC,Course,Teacher where  SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平');

6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;

  1. select Student.S#,Student.Sname
  2. from Student,SC
  3. where Student.S#=SC.S# and SC.C#='001' and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002');

7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;

  1. select S#,Sname
  2. from Student
  3. where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher  where Teacher.T#=Course.T# and Tname='叶平'));

8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;

  1. Select S#,Sname from
  2. (  select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2
  3.   from Student,SC where Student.S#=SC.S# and C#='001') S_2
  4. where score2 <score;

SELECT * FROM STUDENT A 
WHERE EXISTS 
(SELECT B.S# FROM SC B,SC C 
WHERE B.C#='111'
AND C.C#='112' 
AND B.SCORE>C.SCORE
AND B.S# = C.S# 
AND A.S# = B.S#
AND A.S# = C.S#)

9、查询所有课程成绩小于60分的同学的学号、姓名;

  1. select S#,Sname
  2. from Student
  3. where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);

10、查询没有学全所有课的同学的学号、姓名;

  1. select Student.S#,Student.Sname
  2. from Student,SC
  3. where Student.S#=SC.S# group by  Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);

11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名; 
   

  1. select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#='1001';

12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;

  1. select distinct SC.S#,Sname
  2. from Student,SC
  3. where Student.S#=SC.S# and C# in (select C# from SC where S#='001');

13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;

  1. update SC set score=(select avg(SC_2.score)
  2. from SC SC_2
  3. where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='叶平');

14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;

  1. select S# from SC where C# in (select C# from SC where S#='1002')
  2. group by S# having count(*)=(select count(*) from SC where S#='1002');

15、删除学习“叶平”老师课的SC表记录; 

  1. Delect SC
  2. from course ,Teacher
  3. where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='叶平';

DELETE FROM SC A WHERE EXISTS ( SELECT 1 FROM TEACHER B,COURSE C WHERE B.T#=C.T# AND B.TNAME ='刘备' AND A.C# = C.C#);
    
16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、2、 
    号课的平均成绩;

  1. Insert SC select S#,'002',(Select avg(score)
  2. from SC where C#='002') from Student where S# not in (Select S# from SC where C#='002');

17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示: 学生ID,,数据库,企业管理,英语,有效课程数,有效平均分

  1. SELECT S# as 学生ID
  2. ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='004') AS 数据库
  3. ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='001') AS 企业管理
  4. ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='006') AS 英语
  5. ,COUNT(*) AS 有效课程数, AVG(t.score) AS 平均成绩
  6. FROM SC AS t
  7. GROUP BY S#
  8. ORDER BY avg(t.score)

18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分 

  1. SELECT L.C# As 课程ID,L.score AS 最高分,R.score AS 最低分
  2. FROM SC L ,SC AS R
  3. WHERE L.C# = R.C# and
  4. L.score = (SELECT MAX(IL.score)
  5. FROM SC AS IL,Student AS IM
  6. WHERE L.C# = IL.C# and IM.S#=IL.S#
  7. GROUP BY IL.C#)
  8. AND
  9. R.Score = (SELECT MIN(IR.score)
  10. FROM SC AS IR
  11. WHERE R.C# = IR.C#
  12. GROUP BY IR.C#
  13. );

SELECT MIN(SC.SCORE),MAX(SC.SCORE),SC.C# FROM SC
GROUP BY SC.C#
19、按各科平均成绩从低到高和及格率的百分数从高到低顺序

  1. SELECT t.C# AS 课程号,max(course.Cname)AS 课程名,isnull(AVG(score),0) AS 平均成绩
  2. ,100 * SUM(CASE WHEN  isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数
  3. FROM SC T,Course
  4. where t.C#=course.C#
  5. GROUP BY t.C#
  6. ORDER BY 100 * SUM(CASE WHEN  isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DESC

20、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),高数(002),OO&UML (003),数据库(004) ps:MKS被河蟹,改高数

  1. SELECT
  2. SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企业管理平均分 ,
  3. 100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END) AS 企业管理及格百分数,
  4. SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 高数平均分,
  5. 100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END) AS 高数及格百分数,
  6. SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分,
  7. 100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END) AS UML及格百分数,
  8. SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分,
  9. 100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 END) AS 数据库及格百分数
  10. FROM SC

21、查询不同老师所教不同课程平均分从高到低显示

  1. SELECT max(Z.T#) AS 教师ID,MAX(Z.Tname) AS 教师姓名,C.C# AS 课程ID,MAX(C.Cname) AS 课程名称,AVG(Score) AS 平均成绩
  2. FROM SC AS T,Course AS C ,Teacher AS Z
  3. where T.C#=C.C# and C.T#=Z.T#
  4. GROUP BY C.C#
  5. ORDER BY AVG(Score) DESC

22、查询如下课程成绩第 3 名到第 6 名的学生成绩单:企业管理(001),高数(002),UML (003),数据库(004) 
    [学生ID],[学生姓名],企业管理,高数,UML,数据库,平均成绩

  1. SELECT  DISTINCT top 3
  2. SC.S# As 学生学号,
  3. Student.Sname AS 学生姓名 ,
  4. T1.score AS 企业管理,
  5. T2.score AS 高数,
  6. T3.score AS UML,
  7. T4.score AS 数据库,
  8. ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) as 总分
  9. FROM Student,SC  LEFT JOIN SC AS T1
  10. ON SC.S# = T1.S# AND T1.C# = '001'
  11. LEFT JOIN SC AS T2
  12. ON SC.S# = T2.S# AND T2.C# = '002'
  13. LEFT JOIN SC AS T3
  14. ON SC.S# = T3.S# AND T3.C# = '003'
  15. LEFT JOIN SC AS T4
  16. ON SC.S# = T4.S# AND T4.C# = '004'
  17. WHERE student.S#=SC.S# and
  18. ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)
  19. NOT IN
  20. (SELECT
  21. DISTINCT
  22. TOP 15 WITH TIES
  23. ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)
  24. FROM sc
  25. LEFT JOIN sc AS T1
  26. ON sc.S# = T1.S# AND T1.C# = 'k1'
  27. LEFT JOIN sc AS T2
  28. ON sc.S# = T2.S# AND T2.C# = 'k2'
  29. LEFT JOIN sc AS T3
  30. ON sc.S# = T3.S# AND T3.C# = 'k3'
  31. LEFT JOIN sc AS T4
  32. ON sc.S# = T4.S# AND T4.C# = 'k4'
  33. ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC);

23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]

  1. SELECT SC.C# as 课程ID, Cname as 课程名称
  2. ,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85]
  3. ,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70]
  4. ,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60]
  5. ,SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -]
  6. FROM SC,Course
  7. where SC.C#=Course.C#
  8. GROUP BY SC.C#,Cname;

24、查询学生平均成绩及其名次

  1. SELECT 1+(SELECT COUNT( distinct 平均成绩)
  2. FROM (SELECT S#,AVG(score) AS 平均成绩
  3. FROM SC
  4. GROUP BY S#
  5. ) AS T1
  6. WHERE 平均成绩 > T2.平均成绩) as 名次,
  7. S# as 学生学号,平均成绩
  8. FROM (SELECT S#,AVG(score) 平均成绩
  9. FROM SC
  10. GROUP BY S#
  11. ) AS T2
  12. ORDER BY 平均成绩 desc;

25、查询各科成绩前三名的记录:(不考虑成绩并列情况)

  SELECT * FROM 
    (  SELECT ROW_NUMBER() OVER (PARTITION BY C# ORDER BY SCORE) AS RN,

      SC.*

       FROM SC)
    WHERE RN<=3

26、查询每门课程被选修的学生数

  1. select c#,count(S#) from sc group by C#;

27、查询出只选修了一门课程的全部学生的学号和姓名

  1. select SC.S#,Student.Sname,count(C#) AS 选课数
  2. from SC ,Student
  3. where SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=1;

28、查询男生、女生人数

  1. Select count(Ssex) as 男生人数 from Student group by Ssex having Ssex='男';
  2. Select count(Ssex) as 女生人数 from Student group by Ssex having Ssex='女';

29、查询姓“张”的学生名单

  1. SELECT Sname FROM Student WHERE Sname like '张%';

30、查询同名同性学生名单,并统计同名人数

  1. select Sname,count(*) from Student group by Sname having

count(*)>1;; 
31、1981年出生的学生名单(注:Student表中Sage列的类型是datetime)

  1. select Sname,  CONVERT(char (11),DATEPART(year,Sage)) as age
  2. from student
  3. where  CONVERT(char(11),DATEPART(year,Sage))='1981';

32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列

  1. Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC ;

33、查询平均成绩大于85的所有学生的学号、姓名和平均成绩

  1. select Sname,SC.S# ,avg(score)
  2. from Student,SC
  3. where Student.S#=SC.S# group by SC.S#,Sname having    avg(score)>85;

34、查询课程名称为“数据库”,且分数低于60的学生姓名和分数

  1. Select Sname,isnull(score,0)
  2. from Student,SC,Course
  3. where SC.S#=Student.S# and SC.C#=Course.C# and  Course.Cname='数据库'and score <60;

35、查询所有学生的选课情况;

  1. SELECT SC.S#,SC.C#,Sname,Cname
  2. FROM SC,Student,Course
  3. where SC.S#=Student.S# and SC.C#=Course.C# ;

36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;

  1. SELECT  distinct student.S#,student.Sname,SC.C#,SC.score
  2. FROM student,Sc
  3. WHERE SC.score>=70 AND SC.S#=student.S#;

37、查询不及格的课程,并按课程号从大到小排列

  1. select c# from sc where scor e <60 order by C# ;

38、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;

  1. select SC.S#,Student.Sname from SC,Student where SC.S#=Student.S# and Score>80 and C#='003';

39、求选了课程的学生人数

  1. select count(*) from sc;

40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩

  1. select Student.Sname,score
  2. from Student,SC,Course C,Teacher
  3. where Student.S#=SC.S# and SC.C#=C.C# and C.T#=Teacher.T# and Teacher.Tname='叶平' and SC.score=(select max(score)from SC where C#=C.C# );

41、查询各个课程及相应的选修人数

  1. select count(*) from sc group by C#;

42、查询不同课程成绩相同的学生的学号、课程号、学生成绩

  1. select distinct  A.S#,B.score from SC A  ,SC B where A.Score=B.Score and A.C# <>B.C# ;

43、查询每门功成绩最好的前两名

  1. SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数
  2. FROM SC t1
  3. WHERE score IN (SELECT TOP 2 score
  4. FROM SC
  5. WHERE t1.C#= C#
  6. ORDER BY score DESC
  7. )
  8. ORDER BY t1.C#;

44、统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,查询结果按人数降序排列,若人数相同,按课程号升序排列

  1. select  C# as 课程号,count(*) as 人数
  2. from  sc
  3. group  by  C#
  4. order  by  count(*) desc,c#

45、检索至少选修两门课程的学生学号

  1. select  S#
  2. from  sc
  3. group  by  s#
  4. having  count(*)  >  =  2

46、查询全部学生都选修的课程的课程号和课程名

  1. select  C#,Cname
  2. from  Course
  3. where  C#  in  (select  c#  from  sc group  by  c#)

47、查询没学过“叶平”老师讲授的任一门课程的学生姓名

  1. select Sname from Student where S# not in (select S# from Course,Teacher,SC where Course.T#=Teacher.T# and SC.C#=course.C# and Tname='叶平');

48、查询两门以上不及格课程的同学的学号及其平均成绩

  1. select S#,avg(isnull(score,0)) from SC where S# in (select S# from SC where score <60 group by S# having count(*)>2)group by S#;

49、检索“004”课程分数小于60,按分数降序排列的同学学号

  1. select S# from SC where C#='004'and score <60 order by score desc;

50、删除“002”同学的“001”课程的成绩

  1. delete from Sc where S#='001'and C#='001';

经典面试题sql基础篇-50常用的sql语句(有部分错误)的更多相关文章

  1. SQL Server调优系列基础篇(常用运算符总结)

    原文:SQL Server调优系列基础篇(常用运算符总结) 前言 上一篇我们介绍了如何查看查询计划,本篇将介绍在我们查看的查询计划时的分析技巧,以及几种我们常用的运算符优化技巧,同样侧重基础知识的掌握 ...

  2. Java面试题之基础篇概览

    Java面试题之基础篇概览 1.一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,且public的类名必须与文件名相一致. 2.Ja ...

  3. SQL基础篇(MICK)

    SQL基础教程(Mick) 数据库和SQL C:\PostgreSQL\9.5\bin\psql.exe -U postgres -d shop 数据库的基本概念 数据库(DB):将大量数据保存起来, ...

  4. [Linux]经典面试题 - 网络基础 - TCP三次握手

    [Linux]经典面试题 - 网络基础 - TCP三次握手 目录 [Linux]经典面试题 - 网络基础 - TCP三次握手 一.TCP报文格式 1.1 TCP报头 1.2 报文图例 二.TCP三次握 ...

  5. Python自动化测试面试题-Python基础篇

    目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...

  6. SQL Server调优系列基础篇(常用运算符总结——三种物理连接方式剖析)

    前言 上一篇我们介绍了如何查看查询计划,本篇将介绍在我们查看的查询计划时的分析技巧,以及几种我们常用的运算符优化技巧,同样侧重基础知识的掌握. 通过本篇可以了解我们平常所写的T-SQL语句,在SQL ...

  7. 聊聊数据库~3.SQL基础篇

    上篇回顾:聊聊数据库~SQL环境篇 扩展:为用户添加新数据库的权限 PS:先使用root创建数据库,然后再授权grant all privileges on 数据库.* to 用户名@"%& ...

  8. sql基础篇

    再跟SQL谈一谈--基础篇   1.简介 2.DDL & DML 3.SELECT ①DISTINCT ②WHERE ③AND & OR ④ORDER BY 4.INSERT 5.UP ...

  9. cocos2dx基础篇(3) 常用重要类

    ---------------------------------------- 入口类main.cpp 主要控制类AppDelegate.cpp -------------------------- ...

随机推荐

  1. python Scrapy 常见问题记录

    ImportError: No module named win32api 处理办法 windows系统上出现这个问题的解决需要安装Py32Win模块,但是直接通过官网链接装exe会出现几百个错误,更 ...

  2. lua --- 函数的可变参数

    主要掌握: 1>虚变量 --- 一个下划线 2>lua将函数的可变参数放在一个叫 arg 的表中,除了参数以外,arg表中还有一个域n表示参数的个数. do function fun(x, ...

  3. sublime text---注释

    Sublime在进行前端开发时非常棒,当然也少不了众多的插件支持,DocBlocker是在Sublime平台上开发一款自动补全代码插件,支持JavaScript (including ES6), PH ...

  4. Python 编程快速上手 第十四章 处理 CSV 文件和 JSON 数据

    前言 这一章分为两个部分,处理 CSV 格式的数据和处理 JSON 格式个数据. 处理 CSV 理解 csv csv 的每一行代表了电子表格中的每一行,每个逗号分开两个单元格csv 的内容全部为文本, ...

  5. mat 使用 分析 oom 使用 Eclipse Memory Analyzer 进行堆转储文件分析

    概述 对于大型 JAVA 应用程序来说,再精细的测试也难以堵住所有的漏洞,即便我们在测试阶段进行了大量卓有成效的工作,很多问题还是会在生产环境下暴露出来,并且很难在测试环境中进行重现.JVM 能够记录 ...

  6. ubuntu下安装CAJ阅读器

    目录 1.ubuntu下wine的基本介绍 (1)wine的介绍 (2)wine的安装 (3)exe文件的安装 (4)exe程序的卸载 (6)wine的基本使用 2.CAJ阅读器的安装 (1)首先放上 ...

  7. mysql find_in_set()函数的使用

    mysql 中 find_in_set() 函数语法: FIND_IN_SET(str,strList) str 要查询的字符串 strList 字段名,参数以“,”分隔,如(1,2,6,8) 查询字 ...

  8. Integer to English words leetcode java

    问题描述: Convert a non-negative integer to its english words representation. Given input is guaranteed ...

  9. Mac OS下安装和配置MongoDB

    安装和配置教程: 参考地址:https://blog.csdn.net/yibowanbo/article/details/80233030 可视化管理工具: 地址:https://blog.csdn ...

  10. (三)使用链式数据实现包(java)

    目标: 1) 描述数据的链式组织方式 2) 描述如何在链式节点链的开头添加新节点 3) 描述如何删除链式节点链的首节点 4) 描述如何在链式节点链中找到某个数据 5) 使用链式节点链实现ADT包 6) ...