`

sql之查询课程数及格的学生姓名

    博客分类:
  • sql
阅读更多
一、sql 问题

两张表,一张学生表,一张成绩表
查询:三门功课全部及格的学生。

学生表:user
id name
1 张三
2 李四
3 王五


成绩表:score

iduser_idsubjectscore
11yuwen30
21shuxue80
31waiyu70
42yuwen70
52shuxue80
62waiyu90
73yuwen50
83shuxue60
93waiyu70



二、答案

select 
    b.name 
from(
    select 
        a.name, 
        count(*) as num
    from(
        select 
            u.name, u.id, s.score
        from  
            score s
            left join user u
            on s.user_id = u.id
    ) a
    where 
        a.score between 60 and 100
    group by 
        a.name
) b
where
    b.num = 3;





三、操作过程


create table user(
    id bigint,
    name varchar(30)
);


insert into user(id, name) value (1, 'zhangsan');
insert into user(id, name) value (2, 'lisi');
insert into user(id, name) value (3, 'wangwu');


create table score(
    id bigint,
    user_id bigint,
    subject varchar(30),
    score int
);

insert into score (id,user_id,subject,score) values (1,1, 'yuwen', 30);
insert into score (id,user_id,subject,score) values (2,1, 'shuxue', 80);
insert into score (id,user_id,subject,score) values (3,1, 'yingyu', 70);

insert into score (id,user_id,subject,score) values (4,2, 'yuwen', 70);
insert into score (id,user_id,subject,score) values (5,2, 'shuxue', 80);
insert into score (id,user_id,subject,score) values (6,2, 'yingyu', 90);

insert into score (id,user_id,subject,score) values (7,3, 'yuwen', 50);
insert into score (id,user_id,subject,score) values (8,3, 'shuxue', 60);
insert into score (id,user_id,subject,score) values (9,3, 'yingyu', 70);




mysql> select 
       b.name 
   from(
       select 
           a.name, 
           count(*) as num
       from(
           select 
               u.name, u.id, s.score
           from  
               score s
               left join user u
               on s.user_id = u.id
       ) a
       where 
           a.score between 60 and 100
       group by 
           a.name
   ) b
   where
       b.num = 3;
+------+
| name |
+------+
| lisi      |
+------+
1 row in set (0.00 sec)



四、过程中遇到的问题记录



mysql> select 
           name 
       from(
           select 
               name, 
               count(*) as num
           from(
               select 
                   u.name, u.id, s.score
               from  
                   score s
                   left join user u
                   on s.user_id = u.id
           )
           where 
               score between 60 and 100
           group by 
               name
       )
       where
           num = 3;

ERROR 1248 (42000): Every derived table must have its own alias




五、拓展:查询成绩高于平均成绩的学生

SELECT name
FROM exam
WHERE score < ( SELECT AVG(score) FROM exam) 




六、拓展:sql 书写格式


SELECT   o.CustomerID, 
         SUM(UnitPrice * Quantity) AS TotalSales 
FROM     OrderDetails AS od 
         INNER JOIN Orders AS o ON od.OrderID = o.OrderID 
GROUP BY o.CustomerID





-
转载请注明,
原文出处:http://lixh1986.iteye.com/blog/2400406










-

分享到:
评论

相关推荐

    实验3答案-sql2.sql

    SQL查询二 2 通过本实验使学生掌握多表查询、子查询以及基本数据操作 二、实验内容 使用实验一建立的银行贷款数据库和表,完成以下查询。 1-4是多表查询和子查询,5-11是数据操作 查询经济性质为“国营”的...

    数据库基础实验的实验报告附图

    15) 查询每门课程不及格学生人数 16) 查询不及格课程超过3门的学生学号 17) 查询年龄在10到19岁之间的学生信息 18) 查询全体学生情况,按所在系升序排列,同一个系的学生按年龄降序排列 19) 查询选了...

    sql超级经典(练习题+答案)

    --5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩--5.1、查询所有有成绩的SQL。--5.2、查询所有(包括有成绩和无成绩)的SQL。--6、查询"李"姓老师的数量 --7、查询学过"张三"老师授课的同学的信息...

    MYSQL题目练习

    --5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩 --5.1、查询所有有成绩的SQL。 --5.2、查询所有(包括有成绩和无成绩)的SQL。 --6、查询"李"姓老师的数量 --7、查询学过"张三"老师授课的同学...

    大学生数据库实验.zip

    (4) 查询选修了课程的学生姓名。 (5) 查询所有学生的信息和所选修的课程。 (6) 查询已被选修的课程的情况和所有课程的名字。 (7) 列出学生所有可能的选修情况。 (8) 查找计算机系的学生选修课程数大于2 的学生的...

    数据库实验报告

    1.查询全体学生的学号和姓名2....7.查询计算机系的学生姓名、年龄、系别 1 查询选修了数据库原理的学生姓名。 2 查询比计算机系所有学生年龄都大的学生信息。   3列出“张力”选修的所有课程的课名和成绩。  

    Transact-SQL语句基础

    (5)编写程序,根据姓名查询teaching数据库中学生的基本信息和选课信息,学生姓名通过变量输入。对于不存在的学生姓名输入值,打印提示信息。6)编写程序,查询所有学生选修课程的期末成绩和对应等级,如果学生为...

    java源码之学生课绩管理系统的实现 jsp + servlet + javaBean + sql_server_scm.rar

    这个Java项目是一个学生课绩管理系统,采用了JSP作为前端页面的展示技术,Servlet作为控制器处理用户请求,JavaBean作为业务逻辑处理的模型,同时使用SQL Server作为数据库存储学生和课程成绩的信息。该系统具有以下...

    学生成绩管理改进版

    学生成绩管理,设学生信息包括:学号、姓名、学期、每门课程的成绩(三门课程就好English,c语言,math),对学生的成绩信息进行管理,实现如下要求:1. 输入学生成绩信息,包含学号、姓名、性别等基本信息和各科成绩...

    数据库编程期末答疑,卷子讲解,SQL server相关操作讲解,如有侵权请联系删除

    运行CreateTeaching.sql在系统数据库tempdb中生成解答用数据库对象,为计科系生成如下选修课综合信息视图(仅包括计科系学生的选课信息,未选课的计科系学生也包括在视图的数据集中,如果未选课则课程等相关字段记为...

    SQL复杂查询

    4) 查询有不及格的学生姓名和所在系 5) 查询所有成绩为优秀(大于90分)的学生姓名 6) 查询既选修了2号课程又选修了3号课程的学生姓名、学号; 方法一 方法二 7) 查询和刘晨同一年龄的学生 8) 选修了...

    数据库原理实验报告整合

    9、查询选修‘101’课程或‘102’课程的学生姓名。 select from where 10、查询选修‘101’课程和‘102’课程的学生学号。 select from where 11、查询选修‘101’课程但没选修‘102’课程的学生学号。 ...

    50个常用SQL语句,很好

    20、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),马克思(002),OO&UML (003),数据库(004) SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '001' THEN...

    数据库表习题

    介于这个题 学生成绩管理有三个表,学生跟课程是一对多的关系; S(Sno,Sname)学生关系,Sno为...1、用sql语句求出所有3科以上不及格的学生姓名及各科成绩(包含3科)。 2、选出没选任课老师“高老师”的学生 的描述

    数据库系统原理-实验报告

    6) 查询学生姓名及其所选修课程的课程号、学分和成绩; 7) 查询平均成绩超过80分的学生姓名和平均成绩; 8) 查询所有未被选修的课程编号和名称; 9) 查询选修三门以上课程(包括三门)的学生总成绩(不统计不及格的...

    MYSSQL_MSS_ORACLE经典SQL.pdf

    20、--查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),马克思(002),OO&UML; (003),数据库(004) SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '001' ...

    VB.Net学生成绩管理系统

    5、可以设置,修改,增加学生信息,也可以批量增加学生信息,批量增加的学生姓名都是学生编号,可以学生登录后台后自己修改姓名等信息,学生增加的时候必须选择相关的班级。 6、可以设置,修改,增加课程信息,包括...

    SQLQuery5.sql

    --38、查询课程编号为01且课程成绩在80分以上的学生的学号和姓名; select a.s_id,s.s_name,a.s_score from Score a left join Student s on a.s_id=s.s_id where a.c_id=01 and a.s_score&gt;=80 -- 37、...

    java_jsp项目源码_+SQL基于的学生信息管理系统(源代码+论文+答辩PPT).rar

    1. 学生信息管理:系统允许管理员添加、修改、删除和查询学生的基本信息,如姓名、学号、性别、年龄等。 2. 成绩管理:管理员可以轻松录入、更新和删除学生的考试成绩,支持批量导入和导出成绩数据。 3. 课程管理:...

    计算机毕业设计asp.net学生行为能力分析系统VS开发sqlserver数据库web结构c#编程计算机网页源码项目

    ASP.NET C# 学生行为能力分析系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发,开发环境为vs2010,数据库为sqlserver2008,或者以上版本都可以。 二、功能介绍 学生能够...

Global site tag (gtag.js) - Google Analytics