澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

SQL面试笔试出色题,网络流行的学习者选课相关

正文是在Cat Qi的原贴的底子之上,经自个儿逐题分别在MySql数据库中落到实处的笔记,持续更新...**

SQL面试笔试经典题(Part 1),sqlpart

本文是在Cat Qi的原贴的底蕴之上,经本身逐题分别在MySql数据库中落到实处的笔记,持续更新...**

仿照效法原贴: 


SQL数据库面试题以及答案

Student(Sno,Sname,Sage,Ssex) 学生表       Sno:学号;Sname:学生姓名;Sage:学生年龄;Ssex:学生性别
Course(Cno,Cname,Tno) 课程表                    Cno,课程编号;Cname:课程名字;Tno:教师编号
SC(Sno,Cno,score) 成绩表                             Sno:学号;Cno,课程编号;score:战表
Teacher(Tno,Tname) 教授表                        Tno:教授编号; Tname:教授名字

 

创设数据表:

create table Student(

Sno varchar(10) not null primary key,

Sname varchar(20) null,

Sage int null,

Ssex varchar(2) null

)

create table Course(

Cno varchar(10) not null primary key,

Cname varchar(20) null,

Tno varchar(20) null

)

create table SC(

Sno varchar(10) not null primary key,

Cno varchar(10) not null primary key,

score int null

)

create table Teacher(

Tno varchar(20) primary key not null,

Tname varchar(20) null

)

问题:
1、查询“001”课程比“002”课程战绩高的保有学员的学号;
  select a.Sno from (select Sno,score from SC where Cno='001') a,(select Sno,score
  from SC where Cno='002') b
  where a.score>b.score and a.Sno=b.Sno;
2、查询平均成绩当先60分的同桌的学号和平均战绩;
    select Sno,avg(score)
    from sc
    group by Sno having avg(score) >60;
3、查询全数同学的学号、姓名、选课数、总成绩;
  select Student.Sno,Student.Sname,count(SC.Cno),sum(score)
  from Student left Outer join SC on Student.Sno=SC.Sno
  group by Student.Sno,Sname
4、查询姓“李”的教师的个数;
  select count(distinct(Tname))
  from Teacher
  where Tname like '李%';
5、查询没学过“叶平”老师课的同学的学号、姓名;
    select Student.Sno,Student.Sname
    from Student 
    where Sno not in (select distinct( SC.Sno) from SC,Course,Teacher where SC.Cno=Course.Cno and Teacher.Tno=Course.Tno  and Teacher.Tname='叶平');
6、查询学过“001”而且也学过数码“002”课程的同桌的学号、姓名;
  select Student.Sno,Student.Sname from Student,SC where Student.Sno=SC.Sno and SC.Cno='001'and exists( Select * from SC as SC_2 where SC_2.Sno=SC.Sno and SC_2.Cno='002');
7、查询学过“叶平”老师所教的全体课的同学的学号、姓名;
  select Sno,Sname
  from Student
  where Sno in (select Sno from SC ,Course ,Teacher where SC.Cno=Course.Cno and Teacher.Tno=Course.Tno and Teacher.Tname='叶平' group by Sno having count(SC.Cno)=(select count(Cno) from Course,Teacher  where Teacher.Tno=Course.Tno and Tname='叶平'));
8、查询课程编号“002”的大成比课程编号“001”课程低的全部同学的学号、姓名;
  Select Sno,Sname from (select Student.Sno,Student.Sname,score ,(select score from SC SC_2 where SC_2.Sno=Student.Sno and SC_2.Cno='002') score2
  from Student,SC where Student.Sno=SC.Sno and Cno='001') S_2 where score2 <score;
9、查询全体科目战表小于60分的同班的学号、姓名;
  select Sno,Sname
  from Student
  where Sno not in (select Student.Sno from Student,SC where S.Sno=SC.Sno and score>60);
10、查询未有学全全数课的同校的学号、姓名;
    select Student.Sno,Student.Sname
    from Student,SC
    where Student.Sno=SC.Sno group by  Student.Sno,Student.Sname having count(Cno) <(select count(Cno) from Course);

11、查询至少有一门课与学号为“1001”的同班所学一样的同班的学号和姓名;
    select Sno,Sname from Student,SC where Student.Sno=SC.Sno and Cno in select Cno from SC where Sno='1001';
12、查询至少学过学号为“001”同学所有一门课的其余同学学号和姓名;
    select distinct SC.Sno,Sname
    from Student,SC
    where Student.Sno=SC.Sno and Cno in (select Cno from SC where Sno='001');
13、把“SC”表中“叶平”老师教的课的战表都改成为此课程的平分成绩;
    update SC set score=(select avg(SC_2.score)
    from SC SC_2
    where SC_2.Cno=SC.Cno ) from Course,Teacher where Course.Cno=SC.Cno and Course.Tno=Teacher.Tno and Teacher.Tname='叶平');
14、查询和“1002”号的同窗学习的课程完全同样的其余同学学号和人名;
    select Sno from SC where Cno in (select Cno from SC where Sno='1002')
    group by Sno having count(*)=(select count(*) from SC where Sno='1002');
15、删除学习“叶平”老师课的SC表记录;
    Delect SC
    from course ,Teacher 
    where Course.Cno=SC.Cno and Course.Tno= Teacher.Tno and Tname='叶平';
16、向SC表中插入一些记录,那么些记录须要符合以下条件:未有上过编号“003”课程的校友学号、2、
    号课的平均战绩;
    Insert SC select Sno,'002',(Select avg(score)
    from SC where Cno='002') from Student where Sno not in (Select Sno from SC where Cno='002');
17、按平均成绩从高到低显示全数学生的“数据库”、“集团管理”、“越南语”三门的学科战表,按如下格局显得: 学生ID,,数据库,集团管理,克罗地亚共和国(Republika Hrvatska)语,有效课程数,有效平均分
    SELECT Sno as 学生ID
        ,(SELECT score FROM SC WHERE SC.Sno=t.Sno AND Cno='004') AS 数据库
        ,(SELECT score FROM SC WHERE SC.Sno=t.Sno AND Cno='001') AS 集团管理
        ,(SELECT score FROM SC WHERE SC.Sno=t.Sno AND Cno='006') AS 英语
        ,COUNT(*) AS 有效课程数, AVG(t.score) AS 平均战绩
    FROM SC AS t
    GROUP BY Sno
    ORDER BY avg(t.score) 
18、查询各科战表最高和压低的分:以如下格局体现:课程ID,最高分,最低分
    SELECT L.Cno As 课程ID,L.score AS 最高分,R.score AS 最低分
    FROM SC L ,SC AS R
    WHERE L.Cno = R.Cno and
        L.score = (SELECT MAX(IL.score)
                      FROM SC AS IL,Student AS IM
                      WHERE L.Cno = IL.Cno and IM.Sno=IL.Sno
                      GROUP BY IL.Cno)
        AND
        R.Score = (SELECT MIN(IR.score)
                      FROM SC AS IR
SQL面试笔试出色题,网络流行的学习者选课相关的肆15个常用sql语句。                      WHERE R.Cno = IR.Cno
                  GROUP BY IR.Cno
                    );
19、按各科平均战绩从低到高和及格率的比例从高到低依次
    SELECT t.Cno AS 课程号,max(course.Cname)AS 课程名,isnull(AVG(score),0) AS 平均成绩
        ,100 * SUM(CASE WHEN  isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数
    FROM SC T,Course
    where t.Cno=course.Cno
    GROUP BY t.Cno
    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)
    SELECT SUM(CASE WHEN Cno ='001' THEN score ELSE 0 END)/SUM(CASE Cno WHEN '001' THEN 1 ELSE 0 END) AS 集团管理平均分
        ,100 * SUM(CASE WHEN Cno = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN Cno = '001' THEN 1 ELSE 0 END) AS 公司管理及格百分数
        ,SUM(CASE WHEN Cno = '002' THEN score ELSE 0 END)/SUM(CASE Cno WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分
        ,100 * SUM(CASE WHEN Cno = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN Cno = '002' THEN 1 ELSE 0 END) AS 马克思及格百分数
        ,SUM(CASE WHEN Cno = '003' THEN score ELSE 0 END)/SUM(CASE Cno WHEN '003' THEN 1 ELSE 0 END) AS UML平均分
        ,100 * SUM(CASE WHEN Cno = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN Cno = '003' THEN 1 ELSE 0 END) AS UML及格百分数
        ,SUM(CASE WHEN Cno = '004' THEN score ELSE 0 END)/SUM(CASE Cno WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分
        ,100 * SUM(CASE WHEN Cno = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN Cno = '004' THEN 1 ELSE 0 END) AS 数据库及格百分数
  FROM SC
21、查询分歧老师所教不相同学科平均分从高到低呈现
  SELECT max(Z.Tno) AS 教师ID,MAX(Z.Tname) AS 教授姓名,C.Cno AS 课程ID,MAX(C.Cname) AS 课程名称,AVG(Score) AS 平均成绩
    FROM SC AS T,Course AS C ,Teacher AS Z
    where T.Cno=C.Cno and C.Tno=Z.Tno
  GROUP BY C.Cno
  ORDER BY AVG(Score) DESC
22、查询如下课程成绩第 3 名到第 6 名的学习者成绩单:企管(001),马克思(002),UML (003),数据库(004)
SQL面试笔试出色题,网络流行的学习者选课相关的肆15个常用sql语句。    [学生ID],[学生姓名],公司处理,马克思,UML,数据库,平均成绩
    SELECT  DISTINCT top 3
      SC.Sno As 学生学号,
        Student.Sname AS 学生姓名 ,
      T1.score AS 集团管理,
      T2.score AS 马克思,
      T3.score AS UML,
      T4.score AS 数据库,
      ISNULL(T1.score,0) ISNULL(T2.score,0) ISNULL(T3.score,0) ISNULL(T4.score,0) as 总分
      FROM Student,SC  LEFT JOIN SC AS T1
                      ON SC.Sno = T1.Sno AND T1.Cno = '001'
            LEFT JOIN SC AS T2
                      ON SC.Sno = T2.Sno AND T2.Cno = '002'
            LEFT JOIN SC AS T3
                      ON SC.Sno = T3.Sno AND T3.Cno = '003'
            LEFT JOIN SC AS T4
                      ON SC.Sno = T4.Sno AND T4.Cno = '004'
      WHERE student.Sno=SC.Sno and
      ISNULL(T1.score,0) ISNULL(T2.score,0) ISNULL(T3.score,0) ISNULL(T4.score,0)
      NOT IN
      (SELECT
            DISTINCT
            TOP 15 WITH TIES
            ISNULL(T1.score,0) ISNULL(T2.score,0) ISNULL(T3.score,0)

  • ISNULL(T4.score,0)
          FROM sc
                LEFT JOIN sc AS T1
                          ON sc.Sno = T1.Sno AND T1.Cno = 'k1'
                LEFT JOIN sc AS T2
                          ON sc.Sno = T2.Sno AND T2.Cno = 'k2'
                LEFT JOIN sc AS T3
                          ON sc.Sno = T3.Sno AND T3.Cno = 'k3'
                LEFT JOIN sc AS T4
                          ON sc.Sno = T4.Sno AND T4.Cno = 'k4'
          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]
    SELECT SC.Cno as 课程ID, Cname as 课程名称
        ,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85]
        ,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70]
        ,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60]
        ,SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -]
    FROM SC,Course
    where SC.Cno=Course.Cno
    GROUP BY SC.Cno,Cname;

24、查询学一生均成绩及其排名
      SELECT 1 (SELECT COUNT( distinct 平均成绩)
              FROM (SELECT Sno,AVG(score) AS 平均成绩
                      FROM SC
                  GROUP BY Sno
                  ) AS T1
            WHERE 平均战绩 > T2.等分成绩) as 排名,
      Sno as 学生学号,平均战表
    FROM (SELECT Sno,AVG(score) 平均成绩
            FROM SC
        GROUP BY Sno
        ) AS T2
    OSportageDEHaval BY 平均成绩 desc;
 
25、查询各科成绩前三名的笔录:(不思考战绩并列情状)
      SELECT t1.Sno as 学生ID,t1.Cno as 课程ID,Score as 分数
      FROM SC t1
      WHERE score IN (SELECT TOP 3 score
              FROM SC
              WHERE t1.Cno= Cno
            ORDER BY score DESC
              )
      ORDER BY t1.Cno;
26、查询每门学科被选修的学习者数
  select Cno,count(Sno) from sc group by Cno;
27、查询出只选修了一门科指标一切学员的学号和姓名
  select SC.Sno,Student.Sname,count(Cno) AS 选课数
  from SC ,Student
  where SC.Sno=Student.Sno group by SC.Sno ,Student.Sname having count(Cno)=1;
28、查询男生、女子人数
    Select count(Ssex) as 男子人数 from Student group by Ssex having Ssex='男';
    Select count(Ssex) as 女孩子人数 from Student group by Ssex having Ssex='女';
29、查询姓“张”的学生名单
    SELECT Sname FROM Student WHERE Sname like '张%';
30、查询同名同性学生名单,并总结同有名的人数
  select Sname,count(*) from Student group by Sname having  count(*)>1;;
31、一九八一年降生的学生名单(注:Student表中Sage列的品种是datetime)
    select Sname,  CONVERT(char (11),DATEPART(year,Sage)) as age
    from student
    where  CONVERT(char(11),DATEPART(year,Sage))='1981';
32、查询每门学科的平分成绩,结果按平均成绩升序排列,平均战表同样时,按学科号降序排列
    Select Cno,Avg(score) from SC group by Cno order by Avg(score),Cno DESC ;
33、查询平均成绩超越85的具备学生的学号、姓名和平均成绩
    select Sname,SC.Sno ,avg(score)
    from Student,SC
    where Student.Sno=SC.Sno group by SC.Sno,Sname having    avg(score)>85;
34、查询课程名称叫“数据库”,且分数低于60的学生姓名和分数
    Select Sname,isnull(score,0)
    from Student,SC,Course
    where SC.Sno=Student.Sno and SC.Cno=Course.Cno and  Course.Cname='数据库'and score <60;
35、查询全部学员的选课意况;
    SELECT SC.Sno,SC.Cno,Sname,Cname
    FROM SC,Student,Course
    where SC.Sno=Student.Sno and SC.Cno=Course.Cno ;
36、查询别的一门科目成绩在70分以上的人名、课程名称和分数;
    SELECT  distinct student.Sno,student.Sname,SC.Cno,SC.score
    FROM student,Sc
    WHERE SC.score>=70 AND SC.Sno=student.Sno;
37、查询不比格的课程,并按学科号从大到小排列
    select Cno from sc where scor e <60 order by Cno ;
38、查询课程编号为003且课程成绩在80分以上的学童的学号和人名;
    select SC.Sno,Student.Sname from SC,Student where SC.Sno=Student.Sno and Score>80 and Cno='003';
39、求选了课程的学员人数
    select count(*) from sc;
40、查询选修“叶平”老师所授课程的学员中,战表最高的学员姓名及其成绩
    select Student.Sname,score
    from Student,SC,Course C,Teacher
    where Student.Sno=SC.Sno and SC.Cno=C.Cno and C.Tno=Teacher.Tno and Teacher.Tname='叶平' and SC.score=(select max(score)from SC where Cno=C.Cno );
41、查询各样学科及相应的选修人数
    select count(*) from sc group by Cno;
42、查询分化学科战表一样的学生的学号、课程号、学生战表
  select distinct  A.Sno,B.score from SC A  ,SC B where A.Score=B.Score and A.Cno <>B.Cno ;
43、查询每门功成绩最棒的前两名
    SELECT t1.Sno as 学生ID,t1.Cno as 课程ID,Score as 分数
      FROM SC t1
      WHERE score IN (SELECT TOP 2 score
              FROM SC
              WHERE t1.Cno= Cno
            ORDER BY score DESC
              )
      ORDER BY t1.Cno;
44、总括每门课程的学生选修人数(超过10人的学科才总计)。须要输出课程号和选修人数,查询结果按人头降序排列,查询结果按人头降序排列,若人数相同,按学科号升序排列 
    select  Cno as 课程号,count(*) as 人数
    from  sc 
    group  by  Cno
    order  by  count(*) desc,Cno 
45、检索至少选修两门课程的学习者学号
    select  Sno 
    from  sc 
    group  by  Sno
    having  count(*)  >  =  2
46、查询任何学员都选修的课程的课程号和课程名
    select  Cno,Cname 
    from  Course 
    where  Cno  in  (select  Cno  from  sc group  by  Cno) 
47、查询没学过“叶平”老师上课的任一门课程的上学的儿童姓名
    select Sname from Student where Sno not in (select Sno from Course,Teacher,SC where Course.Tno=Teacher.Tno and SC.Cno=course.Cno and Tname='叶平');
48、查询两门以上比不上格课程的同学的学号及其平均战绩
    select Sno,avg(isnull(score,0)) from SC where Sno in (select Sno from SC where score <60 group by Sno having count(*)>2)group by Sno;
49、检索“004”课程分数小于60,按分数降序排列的同桌学号
    select Sno from SC where Cno='004'and score <60 order by score desc;

学生表 Student(S#,Sname,Sage,Ssex)

仿照效法原贴:http://www.cnblogs.com/qixuejia/p/3637735.html 

01 表结构

  Student(Sno,Sname,Sage,Ssex)    学生表 
  Course(Cno,Cname,Tno)       课程表 
  SC(Sno,Cno,score)          成绩表 
  Teacher(Tno,Tname)        教师表


教师表 Teacher(T#,Tname)


02 建表及插入测量试验数据

  (1) 建表:

图片 1 1 DROP TABLE IF EXISTS student ; 2 DROP TABLE IF EXISTS course ; 3 DROP TABLE IF EXISTS sc ; 4 DROP TABLE IF EXISTS teacher ; 5 6 CREATE TABLE Student 7 ( 8 Sno int, 9 Sname varchar(32), 10 Sage int, 11 Ssex varchar(8) 12 )ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 13 14 CREATE TABLE Course 15 ( 16 Cno INT, 17 Cname varchar(32), 18 Tno INT 19 )ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 20 21 CREATE TABLE Sc 22 ( 23 Sno INT, 24 Cno INT, 25 score INT 26 )ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 27 28 CREATE TABLE Teacher 29 ( 30 Tno INT, 31 Tname varchar(16) 32 )ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; View Code

  【注】MySQL数据库建表时索要增添“ENGINE=InnoDB DEFAULT CHA昂CoraSET=utf8 COLLATE=utf8_unicode_ci”命令,不然中文会发生乱码。

  (2) 插入测验数据:

图片 2 1 insert into Student select 1,'刘一',18,'男' union all 2 select 2,'钱二',19,'女' union all 3 select 3,'张三',17,'男' union all 4 select 4,'李四',18,'女' union all 5 select 5,'王五',17,'男' union all 6 select 6,'赵六',19,'女' 7 8 insert into Teacher select 1,'叶平' union all 9 select 2,'贺高' union all 10 select 3,'杨艳' union all 11 select 4,'周磊'; 12 13 insert into Course select 1,'语文',1 union all 14 select 2,'数学',2 union all 15 select 3,'英语',3 union all 16 select 4,'物理',4; 17 18 insert into SC 19 select 1,1,56 union all 20 select 1,2,78 union all 21 select 1,3,67 union all 22 select 1,4,58 union all 23 select 2,1,79 union all 24 select 2,2,81 union all 25 select 2,3,92 union all 26 select 2,4,68 union all 27 select 3,1,91 union all 28 select 3,2,47 union all 29 select 3,3,88 union all 30 select 3,4,56 union all 31 select 4,2,88 union all 32 select 4,3,90 union all 33 select 4,4,93 union all 34 select 5,1,46 union all 35 select 5,3,78 union all 36 select 5,4,53 union all 37 select 6,1,35 union all 38 select 6,2,68 union all 39 select 6,4,71; View Code


课程表 Course(C#,Cname,T#)

01 表结构

  Student(Sno,Sname,Sage,Ssex)    学生表 
  Course(Cno,Cname,Tno)       课程表 
  SC(Sno,Cno,score)          成绩表 
  Teacher(Tno,Tname)        教师表


03 难题及完毕代码

  (1)查询“1”课程比“2”课程战绩高的持有学员的学号; 

select a.sno from
(select sno,score from sc where cno=1) a,
(select sno,score from sc where cno=2) b
where a.sno=b.sno and a.score>b.score;

   (2)查询平均战表超越60分的同校的学号和平均成绩; 

 select Sno,AVG(Score) as AvgScore 
 from SC
 group by Sno
 having AVG(Score)>60

   (3)查询全数同学的学号、姓名、选课数、总成绩; 

 select student.sno,student.sname,count(sc.cno),sum(sc.score) from
 student left outer join sc
 on student.sno = sc.sno
 group by student.sno
 order by student.sno;

   (4)查询姓“李”的司令员的个数; 

 select count(distinct tname) as count
 from teacher
 where tname like '李%';

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

 select s.sno,s.sname 
 from student s
 where s.sno not in
 (
 select distinct(sc.sno) from sc ,course c,teacher t
 where sc.cno = c.cno and c.tno = t.tno and t.tname = '叶平'
 )

  (6)查询学过“1”并且也学过数码“2”课程的同校的学号、姓名;

select s.sno,s.sname from student s, (select sno from sc where cno=1) a, (select sno from sc where cno=2) b where s.sno = a.sno and a.sno = b.sno;

  方法二 用exist函数

 select s.Sno,s.Sname
 from Student s,SC sc
 where s.Sno=sc.Sno and sc.Cno=1 and exists
 (
     select * from SC sc2 where sc.Sno=sc2.Sno and sc2.Cno=2
 )

  (7)查询学过“叶平”老师所教的全数课的同班的学号、姓名;

select s.sno,s.sname from student s,teacher t, course c left outer join sc on c.cno = sc.cno where t.tname="叶平" and t.tno = c.cno and s.sno = sc.sno ;

  或者:

 select s.sno,s.sname 
 from student s
 where s.sno in 
 (
 select sc.sno
 from sc,course c,teacher t
 where c.cno=sc.cno and c.tno=t.tno and t.tname ="叶平"
 group by sc.sno
 having count(sc.cno)=
 (
  select count(c1.cno)
  from course c1,teacher t1
  where c1.tno=t1.tno and t1,tname ="叶平"
 )
 );

  (8)查询课程编号“2”的大成比课程编号“1”课程低的有着同学的学号、姓名;

select s.sno,s.sname from student s where s.sno in ( select a.sno from (select sno,score from sc where cno=2) a, (select sno,score from sc where cno=1) b where a.sno = b.sno and a.score < b.score );

  (9)查询有学科成绩小于60分的校友的学号、姓名;

select s.sno,s.sname from student s,sc where sc.score<60 and s.sno=sc.sno group by s.sno;

 

  (10)查询未有学全全体课的同学的学号、姓名;

select s.sno,s.sname from student s where s.sno not in ( select sc.sno from sc group by sc.sno having count(distinct sc.cno)= ( select count(distinct c.cno) from course c ) );

  (11)查询至少有一门课与学号为“1”的同桌所学同样的同桌的学号和姓名;

select distinct(s.sno),s.sname from student s,sc where s.sno=sc.sno and sc.cno in ( select distinct(cno) from sc where sno=1 );

  (12)查询至少学过学号为“1”同学全数一门课的其余同学学号和姓名;

select distinct(s.sno),s.sname from student s,sc where s.sno=sc.sno and s.sno != 1 and sc.cno in ( select distinct(cno) from sc where sno=1 );

  (13)把“SC”表中“叶平”老师教的课的成就都改动为此课程的平分成绩;

 

 update sc set score =
 (
 select avg(sc1.score) from sc sc1,course c,teacher t
 where sc1.cno = c.cno and c.tno = t.tno and t.tname="叶平"
 )
 where cno in
 (
 select cno from course c,teacher t 
 where c.tno = t.tno and t.tname="叶平"
 );

  (14)查询和“2”号的同校学习的学科一模二样的别的同学学号和人名;

select s.sno,s.sname from student s where s.sno != 2 and s.sno in ( select distinct(sno) from sc where cno in (select cno from sc where sno=2) group by sno having count(distinct cno)= ( select count(distinct cno) from sc where sno=2 ) );

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

delete from sc where cno in ( select c.cno from course c,teacher t where c.tno = t.tno and t.tname="叶平" );

  (16)向SC表中插入一些记下,这个记录必要符合以下法规:①从未上过编号“2”课程的同窗学号作为学号;②将“2”号课程的平均战表作为其成就; 

insert into sc select s.sno,2,(select avg(score) from sc where cno=2) from student s where s.sno not in (select distinct(sno) from sc where cno=2);

  (17)按平均战绩从低到高呈现全体学生的“语文”、“数学”、“土耳其共和国(The Republic of Turkey)语”三门的教程成绩,按如下情势呈现: 学生ID,语文,数学,德文,有效课程数,有效平均分; 【此处已补回15题中被剔除的数据】 

select sc0.sno as "学生ID", (select score from sc where sno=sc0.sno and cno =1) as "语文" , (select score from sc where sno=sc0.sno and cno =2) as "数学" , (select score from sc where sno=sc0.sno and cno =3) as "俄文" , count(sc0.cno) as "有效课程数", avg(sc0.score) as "有效平均分" from sc sc0 group by sc0.sno order by avg(sc0.score);

  (18)查询各科战绩最高和最低的分:以如下形式突显:课程ID,最高分,最低分; 

select cno as "课程ID",max(score) as "最高分",min(score) as "最低分" from sc group by cno;

  (19)按各科平均战绩从低到高和及格率的比重从高到低依次;

select sc.cno as "课程ID", c.cname as "课程名称", avg(sc.score) as "平均分", 100*sum(case when sc.score >= 60 then 1 else 0 end)/count(sc.score) as "Percent(%)" from sc ,course c where sc.cno = c.cno group by sc.cno order by avg(sc.score) desc ;

  (20)查询如下课程平均战绩和及格率的比重(备注:供给在1行内展现): 集团管理(2),OO&UML (3),数据库(4) 

select sum(case when cno=2 then score else 0 end)/sum(case when cno=2 then 1 else 0 end) as "公司管理平均战绩", 100sum(case when cno=2 and score >= 60 then 1 else 0 end)/sum(case when cno=2 then 1 else 0 end) as "公司处理及格率(%)", sum(case when cno=3 then score else 0 end)/sum(case when cno=3 then 1 else 0 end) as "OO&UML平均战表", 100*sum(case when cno=3 and score >= 60 then 1 else 0 end)/sum(case when cno=3 then 1 else 0 end) as "OO&UML及格率(%)", sum(case when cno=4 then score else 0 end)/sum(case when cno=4 then 1 else 0 end) as "数据库平均战绩", 100*sum(case when cno=4 and score >= 60 then 1 else 0 end)/sum(case when cno=4 then 1 else 0 end) as "数据库及格率(%)" from sc;*

  (21)查询分歧老师所教分化学科平均分从高到低展现; 

select t.tname as "老师姓名", c.cname as "课程名称", avg(sc.score) as "平均分" from sc,teacher t,course c where t.tno=c.tno and c.cno=sc.cno group by t.tno order by avg(sc.score) desc;

  (22)查询如下课程成绩第 3 名到第 6 名的学习者战表单:公司管理(1),马克思(2),UML (3),数据库(4)  

select distinct SC.Sno As "学生学号", Student.Sname as "学生姓名" , T1.score as "公司管理", T2.score as "马克思", T3.score as "UML", T4.score as "数据库", ifnull(T1.score,0) ifnull(T2.score,0) ifnull(T3.score,0) ifnull(T4.score,0) as "总分" from Student,SC left join SC as T1 on SC.Sno = T1.Sno and T1.Cno = 1 left join SC as T2 on SC.Sno = T2.Sno and T2.Cno = 2 left join SC as T3 on SC.Sno = T3.Sno and T3.Cno = 3 left join SC as T4 on SC.Sno = T4.Sno and T4.Cno = 4 where student.Sno=SC.Sno order by ifnull(T1.score,0) ifnull(T2.score,0) ifnull(T3.score,0) ifnull(T4.score,0) desc ;

  

 

1),sqlpart 本文是在 Cat Qi的原贴的基础之上,经本身逐题分别在MySql数据库中贯彻的笔记,持续更新... 参谋原贴:...

学生成绩表 SC(S#,C#,score)

02 建表及插入测量试验数据

  (1) 建表:

图片 3图片 4

 1 DROP TABLE IF EXISTS student ;
 2 DROP TABLE IF EXISTS course ;
 3 DROP TABLE IF EXISTS sc ;
 4 DROP TABLE IF EXISTS teacher ;
 5 
 6 CREATE TABLE Student
 7 (
 8 Sno int,
 9 Sname varchar(32),
10 Sage int,
11 Ssex varchar(8)
12 )ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
13 
14 CREATE TABLE Course 
15   ( 
16      Cno    INT, 
17      Cname varchar(32), 
18      Tno    INT 
19   )ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
20 
21 CREATE TABLE Sc 
22 ( 
23 Sno    INT, 
24 Cno   INT,
25 score INT 
26 )ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
27 
28 CREATE TABLE Teacher 
29   ( 
30      Tno    INT, 
31      Tname varchar(16) 
32   )ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

View Code

  【注】MySQL数据库建表时索要丰富“ENGINE=InnoDB DEFAULT CHA揽胜极光SET=utf8 COLLATE=utf8_unicode_ci”命令,否则中文会发生乱码。

  (2) 插入测量试验数据:

图片 5图片 6

 1  insert into Student select 1,'刘一',18,'男' union all
 2  select 2,'钱二',19,'女' union all
 3  select 3,'张三',17,'男' union all
 4  select 4,'李四',18,'女' union all
 5  select 5,'王五',17,'男' union all
 6  select 6,'赵六',19,'女' 
 7  
 8  insert into Teacher select 1,'叶平' union all
 9  select 2,'贺高' union all
10  select 3,'杨艳' union all
11  select 4,'周磊';
12  
13  insert into Course select 1,'语文',1 union all
14  select 2,'数学',2 union all
15  select 3,'英语',3 union all
16  select 4,'物理',4;
17  
18  insert into SC 
19  select 1,1,56 union all 
20  select 1,2,78 union all 
21  select 1,3,67 union all 
22  select 1,4,58 union all 
23  select 2,1,79 union all 
24  select 2,2,81 union all 
25  select 2,3,92 union all 
26  select 2,4,68 union all 
27  select 3,1,91 union all 
28  select 3,2,47 union all 
29  select 3,3,88 union all 
30  select 3,4,56 union all 
31  select 4,2,88 union all 
32  select 4,3,90 union all 
33  select 4,4,93 union all 
34  select 5,1,46 union all 
35  select 5,3,78 union all 
36  select 5,4,53 union all 
37  select 6,1,35 union all 
38  select 6,2,68 union all 
39  select 6,4,71;

View Code


问题:

03 难点及贯彻代码

  (1)查询“1”课程比“2”课程战绩高的全部学生的学号; 

select a.sno from
(select sno,score from sc where cno=1) a,
(select sno,score from sc where cno=2) b
where a.sno=b.sno and a.score>b.score;

   (2)查询平均成绩超乎60分的校友的学号和平均战表; 

 select Sno,AVG(Score) as AvgScore 
 from SC
 group by Sno
 having AVG(Score)>60

   (3)查询全数同学的学号、姓名、选课数、总成绩; 

 select student.sno,student.sname,count(sc.cno),sum(sc.score) from
 student left outer join sc
 on student.sno = sc.sno
 group by student.sno
 order by student.sno;

   (4)查询姓“李”的教师职员和工人的个数; 

 select count(distinct tname) as count
 from teacher
 where tname like '李%';

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

 select s.sno,s.sname 
 from student s
 where s.sno not in
 (
 select distinct(sc.sno) from sc ,course c,teacher t
 where sc.cno = c.cno and c.tno = t.tno and t.tname = '叶平'
 )

  (6)查询学过“1”而且也学过数码“2”课程的校友的学号、姓名;

图片 7

 select s.sno,s.sname from 
 student s,
 (select sno from sc where cno=1) a,
 (select sno from sc where cno=2) b
 where s.sno = a.sno and a.sno = b.sno;

  方法二 用exist函数

 select s.Sno,s.Sname
 from Student s,SC sc
 where s.Sno=sc.Sno and sc.Cno=1 and exists
 (
     select * from SC sc2 where sc.Sno=sc2.Sno and sc2.Cno=2
 )

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

图片 8

 select s.sno,s.sname 
 from student s,teacher t,
 course c left outer join sc
 on c.cno = sc.cno 
 where t.tname="叶平" and t.tno = c.cno and s.sno = sc.sno ;

  或者:

 select s.sno,s.sname 
 from student s
 where s.sno in 
 (
 select sc.sno
 from sc,course c,teacher t
 where c.cno=sc.cno and c.tno=t.tno and t.tname ="叶平"
 group by sc.sno
 having count(sc.cno)=
 (
  select count(c1.cno)
  from course c1,teacher t1
  where c1.tno=t1.tno and t1,tname ="叶平"
 )
 );

  (8)查询课程编号“2”的成就比课程编号“1”课程低的富有同学的学号、姓名;

图片 9

 select s.sno,s.sname
 from student s
 where s.sno in
 (
 select a.sno from  
 (select sno,score from sc where cno=2) a,
 (select sno,score from sc where cno=1) b
 where a.sno = b.sno and a.score < b.score
 );

  (9)查询有学科成绩小于60分的同班的学号、姓名;

图片 10

 

select s.sno,s.sname
 from student s,sc
 where sc.score<60 and s.sno=sc.sno
 group by s.sno;

 

  (10)查询未有学全全数课的同校的学号、姓名;

图片 11

 select s.sno,s.sname
 from student s
 where s.sno not in
 (
 select sc.sno from sc
 group by sc.sno
 having count(distinct sc.cno)=
 (
  select count(distinct c.cno) from course c
 )
 );

  (11)查询至少有一门课与学号为“1”的同班所学一样的同班的学号和人名;

图片 12

 select distinct(s.sno),s.sname 
 from student s,sc 
 where s.sno=sc.sno and sc.cno in 
 (
 select distinct(cno) from sc where sno=1
 );

  (12)查询至少学过学号为“1”同学全体一门课的其余同学学号和人名;

图片 13

 select distinct(s.sno),s.sname 
 from student s,sc 
 where s.sno=sc.sno and s.sno != 1 and sc.cno in 
 (
 select distinct(cno) from sc where sno=1
 );

  (13)把“SC”表中“叶平”老师教的课的实际业绩都退换为此课程的平分战表;

 

 update sc set score =
 (
 select avg(sc1.score) from sc sc1,course c,teacher t
 where sc1.cno = c.cno and c.tno = t.tno and t.tname="叶平"
 )
 where cno in
 (
 select cno from course c,teacher t 
 where c.tno = t.tno and t.tname="叶平"
 );

  (14)查询和“2”号的校友学习的学科完全同样的别的同学学号和姓名;

图片 14

 select s.sno,s.sname 
 from student s
 where s.sno != 2 and s.sno in
 (
 select distinct(sno) from sc
 where cno in (select cno from sc where sno=2)
 group by sno
 having count(distinct cno)=
 (
  select count(distinct cno) from sc where sno=2
 )
 );

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

图片 15

 delete from sc where cno in
 (
 select c.cno from course c,teacher t
 where c.tno = t.tno and t.tname="叶平"
 );

  (16)向SC表中插入一些记录,这么些记录要求符合以下标准:①不曾上过编号“2”课程的同室学号作为学号;②将“2”号课程的平分战表作为其成就; 

图片 16

 insert into sc
 select s.sno,2,(select avg(score) from sc where cno=2)
 from student s
 where s.sno not in (select distinct(sno) from sc where cno=2);

  (17)按平均成绩从低到高彰显全体学员的“语文”、“数学”、“葡萄牙语”三门的课程战表,按如下情势体现: 学生ID,语文,数学,葡萄牙共和国语,有效课程数,有效平均分; 【此处已补回15题中被剔除的多少】 

图片 17

 select sc0.sno as "学生ID",
 (select score from sc where sno=sc0.sno and cno =1) as "语文" ,
 (select score from sc where sno=sc0.sno and cno =2) as "数学" ,
 (select score from sc where sno=sc0.sno and cno =3) as "英语" ,
 count(sc0.cno) as "有效课程数",
 avg(sc0.score) as "有效平均分"
 from sc sc0
 group by sc0.sno
 order by avg(sc0.score);

  (18)查询各科战表最高和压低的分:以如下情势显得:课程ID,最高分,最低分; 

图片 18

 select cno as "课程ID",max(score) as "最高分",min(score) as "最低分"
 from sc 
 group by cno;

  (19)按各科平均战绩从低到高和及格率的比重从高到低依次;

图片 19

 select sc.cno as "课程ID",
 c.cname as "课程名称",
 avg(sc.score) as "平均分", 
 100*sum(case when sc.score >= 60 then 1 else 0 end)/count(sc.score) as "Percent(%)"
 from sc ,course c
 where sc.cno = c.cno
 group by sc.cno
 order by avg(sc.score) desc ;

  (20)查询如下课程平均成绩和及格率的百分比(备注:供给在1行内显示): 公司管理(2),OO&UML (3),数据库(4) 

图片 20

 select
 sum(case when cno=2 then score else 0 end)/sum(case when cno=2 then 1 else 0 end) as "企业管理平均成绩",
 100*sum(case when cno=2 and score >= 60 then 1 else 0 end)/sum(case when cno=2 then 1 else 0 end) as "企业管理及格率(%)",
 sum(case when cno=3 then score else 0 end)/sum(case when cno=3 then 1 else 0 end) as "OO&UML平均成绩",
 100*sum(case when cno=3 and score >= 60 then 1 else 0 end)/sum(case when cno=3 then 1 else 0 end) as "OO&UML及格率(%)",
 sum(case when cno=4 then score else 0 end)/sum(case when cno=4 then 1 else 0 end) as "数据库平均成绩",
 100*sum(case when cno=4 and score >= 60 then 1 else 0 end)/sum(case when cno=4 then 1 else 0 end) as "数据库及格率(%)"
 from sc;

  (21)查询不相同老师所教差别科目平均分从高到低展现; 

图片 21

 select t.tname as "老师姓名",
 c.cname as "课程名称",
 avg(sc.score) as "平均分" 
 from sc,teacher t,course c
 where t.tno=c.tno and c.cno=sc.cno
 group by t.tno
 order by avg(sc.score) desc;

  (22)查询如下课程战表第 3 名到第 6 名的上学的小孩子成绩单:企管(1),马克思(2),UML (3),数据库(4)  

图片 22

 select distinct 
      SC.Sno As "学生学号", 
      Student.Sname as "学生姓名" , 
      T1.score as "企业管理", 
      T2.score as "马克思", 
      T3.score as "UML", 
      T4.score as "数据库", 
      ifnull(T1.score,0)   ifnull(T2.score,0)   ifnull(T3.score,0)   ifnull(T4.score,0) as "总分" 
      from Student,SC  left join SC as T1 
                      on SC.Sno = T1.Sno and T1.Cno = 1
            left join SC as T2 
                      on SC.Sno = T2.Sno and T2.Cno = 2 
            left join SC as T3 
                      on SC.Sno = T3.Sno and T3.Cno = 3 
            left join SC as T4 
                      on SC.Sno = T4.Sno and T4.Cno = 4 
      where student.Sno=SC.Sno 
      order by ifnull(T1.score,0)   ifnull(T2.score,0)   ifnull(T3.score,0)   ifnull(T4.score,0) desc ; 

  

 

1、查询“001”课程比“002”课程成绩高的具备学生的学号;

SELECT  a.s#
FROM    ( SELECT    *
          FROM      dbo.SC
          WHERE     c# = '001'
        ) a
        INNER JOIN ( SELECT *
                     FROM   dbo.SC
                     WHERE  c# = '002'
                   ) b ON a.s# = b.s#
WHERE   a.score > b.score

 

2、查询平均战绩超越60分的同桌的学号和平均成绩;

SELECT  s# ,
        AVG(score)
FROM    dbo.SC
GROUP BY s#
HAVING  AVG(score) > 60 

 

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

SELECT  a.s# ,
        a.sname ,
        COUNT(b.c#) ,
        SUM(b.score)
FROM    dbo.Student a
        LEFT OUTER JOIN dbo.SC b ON a.s# = b.s#
GROUP BY a.s# ,
        a.sname

 

4、查询姓“李”的教师职员和工人的个数;

SELECT  COUNT(DISTINCT tname)
FROM    dbo.Teacher
WHERE   tname LIKE '李%'

 

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

SELECT  Student.S# ,
        Student.Sname
FROM    Student
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”课程的校友的学号、姓名;

SELECT  Student.S# ,
        Student.Sname
FROM    Student ,
        SC
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、查询学过“叶平”老师所教的全数课的同学的学号、姓名;

SELECT  S# ,
        Sname
FROM    Student
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”课程低的保有同学的学号、姓名;

SELECT  S# ,
        Sname
FROM    ( SELECT    Student.S# ,
                    Student.Sname ,
                    score ,
                    ( SELECT    score
                      FROM      SC SC_2
                      WHERE     SC_2.S# = Student.S#
                                AND SC_2.C# = '002'
                    ) score2
          FROM      Student ,
                    SC
          WHERE     Student.S# = SC.S#
                    AND C# = '001'
        ) S_2
WHERE   score2 < score

 

9、查询全数科目成绩小于60分的同窗的学号、姓名;

SELECT  S# ,
        Sname
FROM    Student
WHERE   S# NOT IN ( SELECT  Student.S#
                    FROM    Student ,
                            SC
                    WHERE   Student.S# = SC.S#
                            AND score > 60 )

 

10、查询未有学全全体课的同桌的学号、姓名;

SELECT  Student.S# ,
        Student.Sname
FROM    Student ,
        SC
WHERE   Student.S# = SC.S#
GROUP BY Student.S# ,
        Student.Sname
HAVING  COUNT(C#) < ( SELECT    COUNT(C#)
                      FROM      Course
                    )

 

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

SELECT  S# ,
        Sname
FROM    Student ,
        SC
WHERE   Student.S# = SC.S#
        AND C# IN ( SELECT  C#
                    FROM    SC
                    WHERE   S# = '1001' )

 

12、查询至少学过学号为“001”同学全数一门课的其余同学学号和人名;

SELECT DISTINCT
        SC.S# ,
        Sname
FROM    Student ,
        SC
WHERE   Student.S# = SC.S#
        AND C# IN ( SELECT  C#
                    FROM    SC
                    WHERE   S# = '001' )

 

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

UPDATE  SC
SET     score = ( SELECT    AVG(SC_2.score)
                  FROM      SC SC_2
                  WHERE     SC_2.C# = SC.C#
                )
FROM    Course ,
        Teacher
WHERE   Course.C# = SC.C#
        AND Course.T# = Teacher.T#
        AND Teacher.Tname = '叶平'

 

14、查询和“1002”号的同室学习的科目完全同样的其余同学学号和人名;

SELECT  S#
FROM    SC
WHERE   C# IN ( SELECT  C#
                FROM    SC
                WHERE   S# = '1002' )
GROUP BY S#
HAVING  COUNT(*) = ( SELECT COUNT(*)
                     FROM   SC
                     WHERE  S# = '1002'
                   )

 

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

DELETE  SC
FROM    course ,
        Teacher
WHERE   Course.C# = SC.C#
        AND Course.T# = Teacher.T#
        AND Tname = '叶平'

 

16、向SC表中插入一些记下,那一个记录供给符合以下准绳:未有上过编号“003”课程的同班学号、2、 号课的平分成绩;

INSERT  SC
        SELECT  S# ,
                '002' ,
                ( SELECT    AVG(score)
                  FROM      SC
                  WHERE     C# = '002'
                )
        FROM    Student
        WHERE   S# NOT IN ( SELECT  S#
                            FROM    SC
                            WHERE   C# = '002' )

 

17、按平均成绩从高到低突显全数学生的“数据库”、“公司管理”、“西班牙语”三门的科目成绩,按如下方式显得: 学生ID,,数据库,公司处理,保加伊兹密尔语,有效课程数,有效平均分

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

 

18、查询各科战表最高和最低的分:以如下方式显得:课程ID,最高分,最低分

SELECT  L.C# AS 课程ID ,
        L.score AS 最高分 ,
        R.score AS 最低分
FROM    SC L ,
        SC AS R
WHERE   L.C# = R.C#
        AND L.score = ( SELECT  MAX(IL.score)
                        FROM    SC AS IL ,
                                Student AS IM
                        WHERE   L.C# = IL.C#
                                AND IM.S# = IL.S#
                        GROUP BY IL.C#
                      )
        AND R.Score = ( SELECT  MIN(IR.score)
                        FROM    SC AS IR
                        WHERE   R.C# = IR.C#
                        GROUP BY IR.C#
                      )

 

19、按各科平均成绩从低到高和及格率的比例从高到低依次

SELECT  t.C# AS 课程号 ,
        MAX(course.Cname) AS 课程名 ,
        ISNULL(AVG(score), 0) AS 平均成绩 ,
        100 * SUM(CASE WHEN ISNULL(score, 0) >= 60 THEN 1
                       ELSE 0
                  END) / COUNT(*) AS 及格百分数
FROM    SC T ,
        Course
WHERE   t.C# = course.C#
GROUP BY t.C#
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)

SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企业管理平均分 
,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 企业管理及格百分数 
,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分 
,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 马克思及格百分数 
,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分 
,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及格百分数 
,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分 
,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 数据库及格百分数 
FROM SC 

 

21、查询分化老师所教分化学科平均分从高到低展现

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

 

22、查询如下课程战绩第 3 名到第 6 名的学习者战表单:企业管理(001),马克思(002),UML (003),数据库(004) [学生ID],[学员姓名],集团处理,马克思,UML,数据库,平均战表

SELECT DISTINCT top 3 
SC.S# As 学生学号, 
Student.Sname AS 学生姓名 , 
T1.score AS 企业管理, 
T2.score AS 马克思, 
T3.score AS UML, 
T4.score AS 数据库, 
ISNULL(T1.score,0)   ISNULL(T2.score,0)   ISNULL(T3.score,0)   ISNULL(T4.score,0) as 总分 
FROM Student,SC LEFT JOIN SC AS T1 
ON SC.S# = T1.S# AND T1.C# = '001' 
LEFT JOIN SC AS T2 
ON SC.S# = T2.S# AND T2.C# = '002' 
LEFT JOIN SC AS T3 
ON SC.S# = T3.S# AND T3.C# = '003' 
LEFT JOIN SC AS T4 
ON SC.S# = T4.S# AND T4.C# = '004' 
WHERE student.S#=SC.S# and 
ISNULL(T1.score,0)   ISNULL(T2.score,0)   ISNULL(T3.score,0)   ISNULL(T4.score,0) 
NOT IN 
(SELECT 
DISTINCT 
TOP 15 WITH TIES 
ISNULL(T1.score,0)   ISNULL(T2.score,0)   ISNULL(T3.score,0)   ISNULL(T4.score,0) 
FROM sc 
LEFT JOIN sc AS T1 
ON sc.S# = T1.S# AND T1.C# = 'k1' 
LEFT JOIN sc AS T2 
ON sc.S# = T2.S# AND T2.C# = 'k2' 
LEFT JOIN sc AS T3 
ON sc.S# = T3.S# AND T3.C# = 'k3' 
LEFT JOIN sc AS T4 
ON sc.S# = T4.S# AND T4.C# = 'k4' 
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]

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

 

24、查询学平生均战表及其排行

SELECT 1 (SELECT COUNT( distinct 平均成绩) 
FROM (SELECT S#,AVG(score) AS 平均成绩 
FROM SC 
GROUP BY S# 
) AS T1 
WHERE 平均成绩 > T2.平均成绩) as 名次, 
S# as 学生学号,平均成绩 
FROM (SELECT S#,AVG(score) 平均成绩 
FROM SC 
GROUP BY S# 
) AS T2 
ORDER BY 平均成绩 desc

 

25、查询各科战绩前三名的笔录:(不思虑成绩并列意况)

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

 

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

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

 

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

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

 

28、查询男人、女孩子人数

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

 

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

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

 

30、查询同名同性学生名单,并总计同名家数

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

 

31、一九八四年诞生的学生名单(注:Student表中Sage列的花色是datetime)

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

 

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

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

 

33、查询平均战绩超过85的全部学生的学号、姓名和平均战绩

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

 

34、查询课程名称叫“数据库”,且分数低于60的上学的儿童姓名和分数  

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

 

35、查询全体学员的选课景况;

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

 

36、查询别的一门学科成绩在70分以上的全名、课程名称和分数;

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

 

37、查询不如格的学科,并按学科号从大到小排列

select c# from sc where score <60 order by C# ; 

 

38、查询课程编号为003且课程战绩在80分以上的学员的学号和人名;

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

 

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

select count(*) from sc; 

 

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

select Student.Sname,score 
from Student,SC,Course C,Teacher 
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、查询各种科目及相应的选修人数

select c#,count(*) from sc group by C#; 

 

42、查询不一致学科成绩同样的上学的儿童的学号、课程号、学生成绩

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

 

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

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

 

44、总结每门课程的上学的儿童选修人数(超越10人的课程才总括)。须要输出课程号和选修人数,查询结果按人头降序排列,查询结果按人头降序排列,若人数同样,按学科号升序排列

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

 

45、检索至少选修两门科指标学员学号

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

 

46、查询任何学生都选修的学科的课程号和科目名

select C#,Cname 
from Course 
where C# in (select c# from sc group by c#) 

 

47、查询没学过“叶平”老师授课的任一门科指标学习者姓名 

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、查询两门以上不比格课程的同班的学号及其平均成绩

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,按分数降序排列的同室学号

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

 

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

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

 

本文由澳门新浦京娱乐场网站发布于数据库,转载请注明出处:SQL面试笔试出色题,网络流行的学习者选课相关