精华内容
下载资源
问答
  • --()查询选了“C001”课程的学生姓名和所在系。 SELECT Sname,Sdept from SC,Student WHERE SC.Sno=Student.Sno AND Cno='C001' --()查询通信工程系成绩以上的学生的学号和姓名。 SELECT Student.Sno,...

    一、SQL定义语句

    --1.  用子查询实现如下查询:

    --()查询选了“C001”课程的学生姓名和所在系。

    SELECT Sname,Sdept from SC,Student WHERE SC.Sno=Student.Sno AND Cno='C001'

    --()查询通信工程系成绩分以上的学生的学号和姓名。

    SELECT Student.Sno,Sname FROM SC,Student WHERE SC.Sno=Student.Sno AND Sdept='通信工程系' AND Grade>80

    --()查询计算机系考试成绩最高的学生的姓名。

    ---SELECT  Sname ,Grade FROM SC,Student WHERE Sdept='计算机系' AND SC.Sno=Student.Sno ORDER BY Grade DESC;

    SELECT TOP 1 Sname FROM SC,Student WHERE Sdept='计算机系' AND SC.Sno=Student.Sno ORDER BY Grade DESC;

    --()查询年龄最大的男生的姓名、所在系和年龄。

    --SELECT  Sname,Sdept,Sage FROM Student WHERE Sex='' ORDER BY Sage DESC

    SELECT TOP 1 Sname,Sdept,Sage FROM Student WHERE Sex='' ORDER BY Sage DESC

    --2.  查询C001课程的考试成绩高于该课程平均成绩的学生的学号和成绩。

    SELECT Sno,Grade FROM SC WHERE Cno='C001' AND Grade>(SELECT avg(Grade) FROM SC );

    --3.  查询计算机系学生考试成绩高于计算机系学生平均成绩的学生的姓名、考试的课程名和考试成绩。

    SELECT Sname,Cname,Grade

    FROM SC s,Student,Course c

    WHERE s.Sno=Student.Sno AND

    c.Cno=s.Cno AND

    Sdept='计算机系' and

     Grade > (

    select AVG(Grade)

    from SC,Student

    where SC.Sno = Student.Sno AND c.Cno=s.Cno AND

     Sdept = '计算机系'

    )

     

    select Sname, Cname, Grade

    from Student, SC, Course

    where Student.Sno = SC.Sno AND

    SC.Cno = Course.Cno AND

    Sdept = '计算机系' AND

    Grade > (

    select AVG(Grade)

    from SC,Student

    where SC.Sno = Student.Sno AND Sdept = '计算机系'

    )

    --4.  查询VB课程考试成绩高于VB平均成绩的学生姓名和VB成绩。

    SELECT Sname,Grade

    FROM SC,Student,Course

    WHERE SC.Sno=Student.Sno AND

    Course.Cname='VB' AND

    Course.Cno = SC.Cno AND

    Grade > (SELECT avg(Grade) FROM SC,Course WHERE Course.Cname='VB' AND Course.Cno=SC.Cno)

    --5.  查询没选VB的学生姓名和所在系。

    SELECT Sname,Sdept FROM Student WHERE Sname NOT IN (SELECT SC.Sno FROM SC,Student,Course WHERE Cname='VB' and Course.Cno=SC.Cno AND Student.Sno= SC.Sno )

    --6.  查询每个学期学分最高的课程信息,列出开课学期、课程名和学分。

    SELECT  Semester,Cname,Credit from Course c1 WHERE Credit  = (SELECT max(Credit) FROM Course c2 WHERE c1.Semester=c2.Semester)

    --7.  查询每门课程考试成绩最高的学生信息,列出课程号、学生姓名和最高成绩,结果按课程号升序排序,不包括没考试的课程。

    SELECT Course.Cno,Course.Cname,Sname,maxgrade from Course,Student,SC,(SELECT Cno,max(Grade) from SC  GROUP BY Cno) as max_grade(Cno,maxgrade) WHERE max_grade.Cno=Course.Cno AND maxgrade=SC.Grade AND SC.Sno=Student.Sno ORDER BY Course.Cno ASC

    --8.  查询计算机系学生姓名、年龄和年龄情况,其中年龄情况为:如果年龄小于,则显示偏小;如果年龄在-22,则显示合适

    --如果年龄大于,则显示偏大

    select Sname , Sage,case when Sage <18 then '偏小'when Sage between 18 and 22 then '合适'when Sage >22 then '偏大'end '年龄情况' from Student where Sdept = '计算机系'

    --9.  统计每门课程的选课人数,包括有人选的课程和没有人选的课程,列出课程号,选课人数及选课情况,其中选课情况为:

    --如果此门课程的选课人数超过人,则显示人多;如果此门课程的选课人数在~,则显示一般;如果此门课程的选课人数在~

    --0,则显示人少;如果此门课程没有人选,则显示无人选

    SELECT Cno,count(*) '选课人数', CASE WHEN count(*)>100 THEN '人多' when count(*) BETWEEN 40 AND 100 THEN '一般' WHEN count(*) BETWEEN 1 AND 40 THEN '人少' end '无人选' from SC group by Cno;

    --10.  查询计算机系选了VB课程的学生姓名、所在系和考试成绩,并将结果保存到新表VB_Grade中。

    --Select …into VB_Grade

    SELECT Sname,Sdept,Grade into VB_Grade from SC, Student,Course WHERE SC.Sno=Student.Sno AND Course.Cno=SC.Cno AND Cname='VB'

    --11.  统计每个系的女生人数,并将结果保存到新表Girls中。

    SELECT Sdept,count(*)  FROM Student  where Sex=''  GROUP BY Sdept ;

    --12.  创建一个新表,表名为test,其结构为(COL1, COL 2, COL 3),其中,

    --COL1:整型,允许空值。

    --COL2:普通编码定长字符型,长度为,不允许空值。

    --COL3:普通编码定长字符型,长度为,允许空值。

    --试写出按行插入如下数据的语句(空白处表示是空值)。

    create table test

    (

    COL1 int NULL,

    COL2 char(10) NOT NULL,

    COL3 char(10) NULL

    )

    insert into test values

    (NULL, 'B1', NULL),

    (1, 'B2','C2'),

    (2, 'B3', NULL);

     

    --13.利用第题建立的VB_Grade表,将信息管理系选了VB课程的学生姓名、所在系和考试成绩插入到VB_Grade表中。

    insert into VB_Grade(Sname, Sdept, Grade)

    select Sname, Sdept, Grade

    from Student, SC, Course

    where Student.Sno = SC.Sno AND SC.Cno = Course.Cno

    AND Sdept = '信息管理系' AND Cname = 'VB' ;

     

    --14.  将所有选修C001课程的学生的成绩加分。

    UPDATE SC SET Grade=Grade+10 WHERE Cno='C001'

    --15.  将计算机系所有学生的计算机文化学的考试成绩加分。

    UPDATE SC SET Grade=Grade+10 WHERE Sno IN (SELECT Sno from Student where Sdept='计算机系' ) AND Cno IN (SELECT Cno from Course WHERE Cname='计算机文化学')

     

    --16.  修改“VB”课程的考试成绩,如果是通信工程系的学生,则增加分;如果是信息管理系的学生则增加分,其他系的学生不加分。

    --提示:根据系别判断加分,case when

    UPDATE SC SET Grade= Grade+ CASE Sdept WHEN '通信工程系' THEN 10 else 0 end FROM Student,SC,Course WHERE SC.Sno=Student.Sno AND Course.Cno=SC.Cno AND Cname='VB'

     

    --17.  删除成绩小于分的学生的选课记录。

     

    DELETE FROM SC WHERE  Grade<50;

    --18.  删除计算机系VB考试成绩不及格学生的VB选课记录。

    DELETE FROM SC

    FROM SC,Student,Course WHERE SC.Sno=Student.Sno

    AND Course.Cno=Course.Cno AND Sdept='计算机系' AND

    Cname='VB' AND Grade<60

     

     

    --19.  删除“VB”考试成绩最低的学生的VB修课记录。

    DELETE FROM SC FROM SC,Course

     

    WHERE SC.Cno=Course.Cno AND Cname='VB'

    AND Grade=(SELECT MIN(Grade) FROM SC,Course WHERE SC.Cno=Course.Cno AND Cname='VB')

     

     

    --20.  删除没人选的课程的基本信息。

    DELETE  FROM  Course FROM Course left  join SC on Course.Cno=SC.Cno WHERE  SC.Cno  IS  NULL

    展开全文
  • sql查询某学生最高分是哪科和每科最高分对应的学生 创建一张表user, 字段有姓名(name) 科目(subject), 分数(fraction): create TABLE user(id parimary key auto_increment, subject VARCHAR(20) NOT ...

    sql查询某学生最高分是哪科和每科最高分对应的学生

    1. 创建一张表user, 字段有姓名(name) 科目(subject), 分数(fraction):

      create TABLE user(id parimary key auto_increment, 
      				subject VARCHAR(20) NOT NULL,
      				fraction  INT(11) NOT NULL);
      
      • 少了一个name字段,所以插入数据
      alter table user add name VARCHAR(20) NOT NULL
      

      插入数据

      insert into user ( name, subject, fraction) values ('张三', '英语', 75),
                                                        ('张三', '数学', 90), 
                                                        ('张三', '化学', 99), 
                                                        ('李四', '英语', 55),
                                                        ('李四', '数学', 60),
                                                         ('李四', '化学', 89);
      

    `

    • 查询所李四哪个分数最高
    select * from user where fraction=(select min(fraction) from user where name='李四') and name='李四';
    
    
    • 查询科目中的分数最高的同学
    方法一
    select * from (select subject, max(fraction) as maxFra from user group by subject) as t2 
                 left join user as u on u.fraction=t2.maxFra and u.subject=t2.subject;
    
    
    
     
    
    
           
    
    展开全文
  • 查询每班分数最高的学生

    万次阅读 热门讨论 2018-07-18 10:09:49
    最近看见一道数据库面试题,面试是测试,感觉查询很复杂,特意建个表试了一下。一共三个表,班级、学生、成绩,如下...这题思路如果是:根据班级分组,求出总分,再取出每班的最高分姓名,那结果与预期就很...

    最近看见一道数据库的面试题,面试的是测试,感觉查询很复杂,特意建个表试了一下。一共三个表,班级、学生、成绩,如下:

    题目是:查询每班分数最高的学生。

    先看一下所有人分数总和,这个比较简单,只要联合查询就可以了(我直接用了别人写的一个语句,没有inner join这种关键字,也是能查出来的):

    这题的思路如果是:根据班级分组,求出总分,再取出每班的最高分和姓名,那结果与预期就很诡异了。

    里面的查询直接用了上面查总分的语句,外面又写一个取姓名和每个班的最高分的语句,仔细看最高分查出来了,但是和上面的查询结果对比一下就发现,姓名和分数没对上。不过再思考一下也就差不多了,这步只取出每个班的最高分,再与上面的查询结果再联合查询一次,下面就是我对这题写出的一个庞大的语句:

    这大段特意加了缩进,好看一些。上面是查询所有学生的班级、姓名和总分,下面是查询出每个班最高分,两个临时表联合查询,查出我理解的题意。因为我用的是MySQL,这里还有一个坑,就是我圈出来的那a,aaa,b,这种子查询的表是需要别名的,如果是Oracle好像没有这个限制。

    其实这题还有第二问:查询每班不及格科目数大于2的学生。大于2的恐怕没有,最多大于等于2,只有一个。

    有人说我第二个语句错了,确实是错了,哈哈。下面放上正确的语句,加个分组,如果两个人满足条件,不加分组只会查出一个人,把小天的分数也改成两门不及格。

    select t3.ClassName,StuName from student t1
        inner join score t2 on t1.StuId=t2.StuId
        inner join class t3 on t1.ClassId=t3.ClassId
        where Score<60 group by t2.StuId HAVING count(*)>=2;

    感觉第二问并不是很难,虽然having count这种用的比较少(至少我测试时候没用过),第一问简直不能再绕,不知道出题人是不是真正知道正确答案;还是出题人只是理论上知道答案,如果只是理论上知道答案,恐怕只能查出最早的那个错的结果。对于这种面试失败的只能说命不好了。

    展开全文
  • 筛选全部学生中,每科最高分的学生信息,科目名称,以及分数 1.有三个表student(学生表),sc(成绩表),course(课程表),其定义和数据如下 student: sid sname sage ssex 01 赵雷 1990-01-01 男 02 钱电 ...

    查询各科分数最高的科目名称,学生学号,姓名,分数,排名

    1.有三个表student(学生表),sc(成绩表),course(课程表),其定义和数据如下

    student:
    sid sname sage ssex
    01 赵雷 1990-01-01
    02 钱电 1990-12-21
    03 孙风 1990-12-20
    04 李云 1990-12-06
    05 周梅 1991-12-01
    06 吴兰 1992-01-01
    07 郑竹 1989-01-01
    09 张三 2017-12-20
    10 李四 2017-12-25
    11 李四 2012-06-06
    12 赵六 2013-06-13
    13 孙七 2014-06-01
    sc:
    sid cid score
    01 01 80
    01 02 90
    01 03 99
    02 01 70
    02 02 60
    02 03 80
    03 01 80
    03 02 80
    03 03 80
    04 01 50
    04 02 30
    04 03 20
    04 04 60
    05 01 76
    05 02 87
    06 01 31
    06 03 34
    07 02 89
    07 03 98
    course:
    cid cname tid
    01 语文 02
    02 数学 01
    03 英语 03
    04 生理学 04

    解题思路:

    1.首先给sc表按照cid分区按照分数降序排序,最后加个排名
    select cid,sid,score,row_number() over (partition by CId order by score desc) ranks 
    from sc

    这里不会row_number() over()函数的同学自行百度,搞清楚rank(),dense_rank(),row_number()的区别,以及配上over()函数的用法。

    查询结果为:

    在这里插入图片描述

    2.然后和student表、course表连接起来,如果有多个最高分,按照名字的先后顺序排序。
    select sc.cid,c.cname,sc.sid,s.sname,sc.score,row_number() over (partition by sc.CId order by sc.score desc,s.sname) ranks 
    from sc,student s,course c
    where s.sid = sc.sid and sc.cid=c.cid

    查询的结果为:

    在这里插入图片描述

    3.要选取每科的最高分,那么我们把上面查询的结果看做一个表,查询条件为ranks=1,那么就是选取的每科的最高分,如果说题目是选取每科的前3名,我们只要加条件ranks<=3就可以了,我们来看代码。
    select *
    from(
    	select sc.cid,c.cname,sc.sid,s.sname,sc.score,row_number() over (partition by sc.CId order by sc.score desc,s.sname) ranks 
    	from sc,student s,course c
    	where s.sid = sc.sid and sc.cid=c.cid
    )a
    where ranks=1

    查询结果:
    在这里插入图片描述

    结果没问题,我们来看看每科前3的sql和查询结果。

    select *
    from(
     select sc.cid,c.cname,sc.sid,s.sname,sc.score,row_number() over (partition by sc.CId order by sc.score desc,s.sname) ranks 
     from sc,student s,course c
     where s.sid = sc.sid and sc.cid=c.cid
    )a
    where ranks<=3

    查询结果:

    在这里插入图片描述
    结果没毛病,如果大家有更好的方法,或者更高效的方法可以一起讨论,欢迎指正。

    展开全文
  • SQL查询学生最高分及同名同学

    千次阅读 2020-08-11 21:39:17
    1、最高分同学名字 2、同名同学姓名 1、 SELECT student.sName FROM student GROUP BY student.sName ORDER BY MAX( student.score ) DESC LIMIT 1 2、 SELECT sName FROM student GROUP BY sName ...
  • 请设计每个字段具体类型并用一个SQL查询出每一科最高分学生的学号、姓名、科目和成绩 【】 <code class="language-sql">create database godfucker; use godfucker; select database(); drop table chengji;...
  • 1.查询选修了课程号为“3”的学生姓名和系别 Select sname,sdept from student where sno in ( select sno from sc where cno=‘3’); 2.查询与“刘一平”来自同一个系的学生姓名 ...3.查询Sc表中的最高分的学生..
  • 成绩统计分析系统 一、要求 问题描述: 给出n个学生的m门课程成绩表,每个学生的信息由学号、姓名以及各科成绩组成。...iii. 求出各门课程平均成绩、最高分、最低分、不及格人数、6069分人数、7
  • 题目:有一个学生的成绩表scores(如下表),有id,name,score,subject四个字段,写一条SQL查询出每门科目的最高分,按照科目进行分组,要显示姓名、成绩、科目。 SQL:select s1.name, s1.score, s1....
  • 2、查询数据结构课程成绩最高的学生姓名 select sname,grade from student,course,sc where student.sno = sc.sno and sc.cno = course.cno and cname = '数据结构' and grade>=all(select grade from ...
  • 设计一个Windows应用程序,在该程序...(3)能统计单科成绩最高分。 (4)能统计全班前3名的名单。 (5)能统计指定课程不及格的学生名单。 (6)能统计指定课程在不同分数段的学生人数百分百。 设计提示: (...
  • “学生成绩查询系统”中保存有学生姓名、课程名称以及学生课程成绩。查询系统从控制台输入统计命令及参数,实现几种方式成绩查询,如: avg:分别统计学生和课程平均 get song Java:获取学生songJava课程...
  • printf("最高分 \t%d\t%d\t%d\t%d\n",maxen,maxco,maxma,maxch); /*分数调用*/ printf("最低分 \t%d\t%d\t%d\t%d\n",minen,minco,minma,minch); printf ("-----------------------------------------------------...
  • (3)能统计单科成绩最高分。 (4)能统计全班前3名的名单 (5)能统计指定课程不及格的学生名单。 (6)能统计指定课程在不同分数段的学生人数百分比。 2.设计提示: (1)定义一个 Student学生类,包含字段(学号、...
  • 1.根据姓名查询学生的总成绩; 2.统计全班学生总分平均成绩; 3.统计全班单科成绩最高分; 4.统计全班总分前三名名单; 5.学生总容量不超过1000 设计提示: 1.定义一个Student学生类,包含字段(学号、姓名、...
  • C#程序设计 设计一个Windows应用程序,在该程序中定义一个学生...(3)能统计单科成绩的最高分 (4)能统计全班前三名的名单 (5)能统计指定课程不及格学生名单 (6)能统计课程在不同分数段的学生人数百分比 窗口界面
  • 根据姓名查询学生的总成绩; 统计全班学生总分平均成绩; 统计全班单科成绩最高分; 统计全班总分前三名名单; 学生总容量不超过1000 设计提示: 定义一个Student学生类,包含字段(学号、姓名、语文成绩、...
  • 1、查询年龄在18岁到22岁的学生学号和姓名。 2、查询不同性别的学生人数 3、查询不姓张的同学的信息 4、查询每个同学的平均成绩 5、查询每个同学的最高成绩 6、查询平均分大于70分的同学的学号(多表连接和嵌套) 7、...
  • 两表sql-专业学生

    2021-02-05 21:39:29
    1.查询学生表中所有学生的姓名和分数 2.查询分数小于80分的学生编号、姓名和入学日期 ...8.查询各专业最高分的学生记录 9.用左外连接(专业表为左表),查询各专业的专业编号、专业名称、人数 ...
  •  计算最高分Max:包括每门课程的最高分,和学生平均分的最高分,并给出最高分对应的学生姓名和学号。  计算最低分Min:包括每门课程的最低分,和学生平均分的最低分,并给出最低分对应的学生姓名和学号。  ...
  • 一、建库要求 二、题目要求 三、SQL 1)查询学生表中所有学生的姓名和分数。 2)查询分数小于80分的学生编号、姓名和入学日期。...9)查询各专业最高分的学生记录。(子查询) 10)用左外连接(专业表为左
  • MySQL Select 语句查询

    2020-11-01 12:23:05
    3.查询Sc表中的最高分的学生学号和课程号 4.查询其它系中课程‘0002’比信息系所有学生分数高的学生学号和姓名; 5.查询其它系中比信息系所有学生年龄大的学生姓名和性别; 6.查询每门课程中低于该课程平均成绩的...
  • MySQL查询

    2021-01-12 23:29:37
    2.查询参加考试的学生中,每个学生的平均分、最高分 select studentno,avg(score),max(score) from result group by studentno; 3.查询姓张的每个学生的最低分大于60的学号、姓名 select s.student
  • -- 获取最高分的学生的学号 select sid from tb_record where score = (select max(score) from tb_record); -- 获取分数大于90分的学生姓名 select stuname from tb_student where stuid in (select distinct sid ...
  • 数据查询小练习

    2020-10-31 16:31:39
    查询成绩在70~80分的学生的学号、课程号和成绩。 查询计算机系年龄在18~20岁的男生姓名和年龄。 查询C001课程的最高分查询计算机系学生的最大年龄和最小年龄。 统计每个系的学生人数。 统计每门课程...
  • SQL单表查询基本操作

    2020-04-21 11:48:57
    查询计算机系的学生姓名、年龄。 查询成绩在70~80之间的学生的学号、课程号和成绩。 查询计算机系年龄在18~20之间且性别为“男”的学生姓名、年龄。 查找姓王的同学的所有信息。 查找姓王的两个字的...
  • 功能:先用对话框提示输入5个同学的姓名和语数外成绩,然后提示输入数字1-5,实现下面相应的功能,在控制台显示...3) 平均在60以下的学生姓名和人数 4) 给出提示,输入一个学生的姓名,查询这个学生的总分 5)退出程序
  • mysql查询综合案例

    2020-07-23 09:29:49
    -- 二、查询参加考试的学生中,每个学生的平均分、最高分 select studentno 学号,AVG(score) 平均分,max(score) 最高分 from result GROUP BY studentno; -- 三、查询姓张的每个学生的最低分大于60的学号、姓名 ...
  • 查询

    2021-01-12 23:35:56
    2.查询参加考试的学生中,每个学生的平均分、最高分 select studentno,avg(score),max(score) from result group by studentno 3.查询姓张的每个学生的最低分大于60的学号、姓名 select s.studentno,s.studentname,...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 229
精华内容 91
关键字:

查询最高分的学生姓名