`

【笔试学习工作必备!】六道经典SQL语句题完全掌握SQL语句

    博客分类:
  • sql
 
阅读更多
学生表S (SNO学号,Sname姓名,Class班级,Shigh身高)

课程表C(CNO课程号,CName课程名,CPreNO预修课程编码)

成绩表SC(CNO课程号,SNO学号,SCgrade成绩)

1、体育生选拔,要求身高在170cm以上,考试不及格课程在3门以下(不包括3门)平均成绩在60分以上。

学号姓名身高平均成绩

2、所有预选课程都已经合格的学生(预选课程不存在嵌套循环的情况)。

3、同时选修了‘离散数学’与‘组成原理’的,且高等数学成绩大于80分的。

学号姓名离散数学组成原理高等数学

分数分数分数

4、列出各门课程前三名(成绩相同,学号小的排名在前)

第一名第二名第三名

课程名班级:姓名:成绩班级:姓名:成绩班级:姓名:成绩

5、统计各科的学习情况。

课程名60以下[60,70)[70,85)[85,100)

6、按班级统计各科平均成绩。

课程名第一第二第三

班级:平均成绩班级:平均成绩班级:平均成绩

7、按班级统计各科平均成绩后,第一名3分,第二名2分,第三名1分,其他计0.5分(可以并列名次),最后给班级排名。(最后成绩一样,按班级序号小的排前)

第一名第二名第三名

Sql代码  收藏代码

    --第1题 
    select td_b.SNO 学号, td_b.SNAME 姓名, td_b.SHIGH 身高, td_a.avgGrade 平均成绩 from 
    (select S.SNO,avg(SCgrade) as avgGrade from S,SC 
    where  
    S.SNO = SC.SNO and  
    S.Shigh>170 
    group by S.SNO 
    having  
    avg(SCgrade)>60) td_a 
    left join( 
         select * from S where not exists ( 
         select a.sno from S a, SC b where 
         a.sno = b.sno 
         and b.scgrade<60 
         group by a.sno  
         having count(*) < 3) 
    ) td_b 
    on td_a.SNO = td_b.SNO 
    --第2题 
    --第3题 
    select distinct S1.SNO as 学号, S1.SNAME as 姓名,  
    (select SC.SCgrade from SC,C where SC.CNO=C.CNO and C.CNAME='离散数学' and SC.SNO = SC1.SNO) as 离散数学,  
    (select SC.SCgrade from SC,C where SC.CNO=C.CNO and C.CNAME='组成原理' and SC.SNO = SC1.SNO) as 组成原理, 
    (select SC.SCgrade from SC,C where SC.CNO=C.CNO and C.CNAME='高等数学' and SC.SNO = SC1.SNO) as 高等数学    
    from SC SC1, S S1 
    where  
    SC1.SNO = S1.SNO 
    and S1.SNO in 
    ( 
    select S.SNO from S,C,SC 
    where  
    S.SNO = SC.SNO and  
    SC.CNO = C.CNO and  
    C.CNAME='离散数学' and 
    S.SNO in (select t1.SNO from SC t1, C t2 where t1.CNO=t2.CNO and t2.cname='组成原理') and 
    S.SNO in (select t3.SNO from SC t3, C t4 where t3.CNO=t4.CNO and t4.Cname='高等数学'and t3.scgrade>80) 
    ) 
    ----另解 
    select distinct s.sno,s.sname, 
    (select scgrade from sc left join c on sc.cno=c.cno where c.cname='离散数学' and sc.sno=sc1.sno)"离散数学", 
    (select scgrade from sc left join c on sc.cno=c.cno where c.cname='组成原理' and sc.sno=sc1.sno) "组成原理", 
    (select scgrade from sc left join c on sc.cno=c.cno where c.cname='高等数学' and sc.sno=sc1.sno) "高等数学" 
    from s,sc sc1,C 
    where sc1.sno=s.sno 
    and s.sno in 
    ( 
    select sno from sc left join c on sc.cno=c.cno where c.cname='离散数学' intersect 
    select sno from sc left join c on sc.cno=c.cno where c.cname='组成原理' intersect 
    select sno from sc left join c on sc.cno=c.cno where c.cname='高等数学' and sc.scgrade>80)  
           
    --第4题 
    select C.CNAME as 课程名, 
           max(case when ro=1 then '班级:'||td_b.class||' 姓名:'||S.SNAME||' 成绩:'||td_b.SCgrade else null end) as 第一名, 
           max(case when ro=2 then '班级:'||td_b.class||' 姓名:'||S.SNAME||' 成绩:'||td_b.SCgrade else null end) as 第二名, 
           max(case when ro=3 then '班级:'||td_b.class||' 姓名:'||S.SNAME||' 成绩:'||td_b.SCgrade else null end) as 第三名 
    from 
    (      
    select td_a.CNO, td_a.SNO, td_a.class, td_a.SCgrade, row_number() over(partition by CNO order by SCgrade desc) ro 
    from 
      (select CNO, S.SNO, Class, SCgrade 
      from S inner join SC 
      on S.SNO = SC.SNO 
      group by CNO, S.SNO, Class, SCgrade 
      order by S.SNO)td_a 
    )td_b , C, S 
    where td_b.cno = C.CNO and td_b.sno = S.SNO 
    group by CNAME 
    --第5题 
    select c.cname "课程号", 
    sum(case when (scgrade<60) then 1 else 0 end) "60分以下", 
    sum(case when (scgrade<70 and scgrade>=60) then 1 else 0 end) "[60,70)", 
    sum(case when (scgrade<85 and scgrade>=70) then 1 else 0 end) "[70,85)", 
    sum(case when (scgrade<=100 and scgrade>=85) then 1 else 0 end) "[85,100]" 
    from sc,c 
    where sc.cno=c.cno 
    group by c.cname 
    order by c.cname 
    --第6题 
    select CNAME 课程名, 
           max(case when ro=1 then '班级:'||td_b.Class||' 平均成绩:'||td_b.K_avg else null end) 第一, 
           max(case when ro=2 then '班级:'||td_b.Class||' 平均成绩:'||td_b.K_avg else null end) 第二, 
           max(case when ro=3 then '班级:'||td_b.Class||' 平均成绩:'||td_b.K_avg else null end) 第三 
    from 
    ( 
    select td_a.CNO, td_a.Class, td_a.K_avg, row_number() over(partition by CNO order by K_avg desc)ro 
    from 
      (select distinct CNO, Class, avg(SCgrade)K_avg 
      from S inner join SC 
      on S.SNO = SC.SNO 
      group by CNO, class 
      order by class)td_a 
    )td_b, C 
    where td_b.CNO = C.CNO 
    group by CNAME 
    order by CNAME 
    --第7题 
    ----没有max选出来有三行数据(td_e有三行数据),有了max就只有一行数据了正为所有数据 
    select max(case when rownum=1 then td_d.class else null end) 第一名, 
           max(case when rownum=2 then td_d.class else null end) 第二名, 
           max(case when rownum=3 then td_d.class else null end) 第三名 
    from 
    ( 
    select td_c.class, sum1+sum2+sum3+sum4 as tscore 
    from 
    ( 
    select td_b.class, 
           sum(case when ro=1 then 3 else 0 end) as sum1, 
           sum(case when ro=2 then 2 else 0 end) as sum2, 
           sum(case when ro=3 then 1 else 0 end) as sum3, 
           sum(case when ro<>1 and ro<>2 and ro<>3 then 0.5 else 0 end) as sum4 
    from 
    ( 
    select td_a.CNO, td_a.Class, td_a.K_avg, row_number() over(partition by CNO order by K_avg desc)ro 
    from 
      (select distinct CNO, Class, avg(SCgrade)K_avg 
      from S inner join SC 
      on S.SNO = SC.SNO 
      group by CNO, class 
      order by class)td_a 
    )td_b 
    group by td_b.class 
    order by td_b.class 
    )td_c 
    order by tscore desc 
    )td_d 
分享到:
评论

相关推荐

    sql 语句的笔试题

    SQL笔试题 本篇资源主要整理了多道SQL笔试题,涵盖了查询、删除、联合查询、分组等多个方面的知识点。 1. 查询出每门课都大于80分的学生姓名 知识点:子查询、distinct关键字 使用子查询可以实现该需求,子查询...

    sql语句的笔试经典考题

    ### SQL语句笔试经典考题知识点解析 #### 1. SQL语言的特点 - **非过程化**:SQL语言是一种非过程化的语言,这意味着用户只需指定要做什么,而不需要详细说明如何做。这使得SQL易于学习和使用。(选择题1) - **...

    SQL笔试题(转载的)

    通过《2011 SQL笔试题》这样的练习材料,学习者可以测试并提升自己在SQL查询、数据操作、数据库设计和管理等方面的技能,为实际工作或面试做好充分准备。对于新手来说,这是一个极好的学习资源,可以帮助他们快速...

    常见的SQL笔试选择题含答案.docx

    以下是一些关于SQL笔试选择题中的关键知识点: 1. **关系型数据库**:关系型数据库是一种以表格形式存储数据的数据库,其中数据之间的关系可以通过外键进行关联。题目中提到的Oracle和MySql都是典型的关系型数据库...

    sql语句笔试

    sql语句 建表 增加、删除、复杂查询字段

    SQL_Server 面试笔试试题及答案

    "SQL Server 面试笔试试题及答案" 本资源摘要提供了 SQL Server 面试笔试试题及答案,涵盖了数据库管理、数据模型、数据结构、数据库优化、SQL 语言等多方面的知识点。通过本资源,读者可以快速掌握 SQL Server 的...

    SQL 笔试题 数据库笔试题

    SQL 笔试题是数据库领域中的一个重要组成部分,涉及到数据库的各个方面,包括触发器、存储过程、索引、内存泄漏、事务、锁、视图、游标等知识点。 1. 触发器的作用:触发器是一种特殊的存储过程,通过事件来触发...

    经典的SQL笔试题题目

    经典sql练习,几道经典的SQL笔试题题目。sql就在于多多练习

    经典SQL语句大全(最全收藏版,附送免费大厂SQL笔试练习题)

    包括所有SQL语句写法,只看这一个就够了。从此SQL语句再也不愁了。附送免费大厂SQL笔试练习题。

    SQL语句练习及答案

    根据给定文件中的标题“SQL语句练习及答案”与描述“一个非常适合在笔试前看的SQL练习题。也可在在平时作为SQL语言练习题来使用”,我们可以看出这份材料主要包含了一系列针对SQL语言的练习题及其解答,适用于考前...

    sql server笔试题

    自己整理的SQLserver笔试题。 当做知识点记了 内附答案

    sql经典笔试题一(含答案)

    在本文中,我们将深入探讨一些SQL的经典笔试题目及其相关知识点。 1. **单词解释** - **Data**: 数据,是数据库中的基本单元,可以是数字、文本、图片等。 - **Database**: 数据库,是组织和存储数据的系统,允许...

    SQL笔试题,及其答案

    在SQL笔试题中,常见的知识点包括但不限于以下几类: 1. **基本查询**:掌握SELECT语句,包括选择列、表连接(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN)、WHERE子句用于筛选数据,GROUP BY进行数据分组,...

    SQL 语句 笔试 备用

    在SQL语句笔试中,理解并熟练掌握各种SQL语句是非常重要的。以下是对标题和描述中涉及的SQL语句进行的详细说明: 1. 数据定义语言(DDL): - CREATE:创建数据库、表、索引等数据库对象。 - ALTER:修改已经存在...

    SQL-Server笔试题含答案

    SQL Server笔试题含答案 本资源是SQL Server笔试题含答案,涵盖了T-SQL语言相关的知识点。总共包括13道笔试题,涵盖了SQL Server中的多对多映射关系、事务、视图、局部变量、存储过程、索引等知识点。 1. SQL ...

    SQL Server笔试题(Sql2000常见笔试题)

    【SQL Server 笔试题解析】 SQL Server 是一款由微软公司开发的关系型数据库管理系统(RDBMS),广泛应用于企业级数据存储和管理。本题主要考察的是SQL Server 2000的基础知识,包括单词解释、SQL语句编写、填空和...

    自己整理的sql笔试题

    SQL笔试题通常考察应聘者对于SQL语言的理解和实际应用能力,尤其是查询语句的编写、SQL函数的使用,以及多表连接操作等。本次整理的SQL题目覆盖了这些基础而又核心的知识点。 首先,基础查询语句的编写是考察的重点...

    SQL笔试题库(有答案)

    SQL笔试题库。

    程序员笔试经典sql练习题

    根据给定文件中的信息,我们可以将其中涉及到的SQL知识点归纳总结如下: ### 一、基础知识构建 ...通过学习这些题目,可以更好地理解和掌握SQL语言的强大功能,为日后的数据库管理工作打下坚实的基础。

    大公司sql笔试题

    1到3年工作经验的 sql面试笔试题(通过面试360,华为,阿里收集)

Global site tag (gtag.js) - Google Analytics