SQL面试题

经典Hive SQL面试题 第一题 需求 我们有如下的用户访问数据 userId visitDate visitCount u01 2017/1/21 5 u02 2017/1/23 6 u03 2017/1/22 8 u04 2017/1/20 3 u01 2017/1/23 6 u01 2017/2/21 8 U02 2017/1/23 6 U01 2017/2/22 ... 阅读详情
  sql面试题大全 
Student(S#,Sname,Sage,Ssex) 学生表     
Course(C#,Cname,T#) 课程表     
SC(S#,C#,score) 成绩表     
Teacher(T#,Tname) 教师表     
   
问题:     
1、查询“001”课程比“002”课程成绩高的所有学生的学号;     
  select a.S# from (select s#,score from SC where C#='001') a,(select s#,score     
  from SC where C#='002') b     
  where a.score>b.score and a.s#=b.s#;     
2、查询平均成绩大于60分的同学的学号和平均成绩;     
    select S#,avg(score)     
    from sc     
    group by S# having avg(score) >60;     
3、查询所有同学的学号、姓名、选课数、总成绩;     
  select Student.S#,Student.Sname,count(SC.C#),sum(score)     
  from Student left Outer join SC on Student.S#=SC.S#     
  group by Student.S#,Sname     
4、查询姓“李”的老师的个数;     
  select count(distinct(Tname))     
  from 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 S.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表记录;     
    Delect 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、1981年出生的学生名单(注: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 scor e <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 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';     
问题描述:    
本题用到下面三个关系表:    
CARD     借书卡。   CNO 卡号,NAME  姓名,CLASS 班级    
BOOKS    图书。     BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数     
BORROW   借书记录。 CNO 借书卡号,BNO 书号,RDATE 还书日期    
备注:限定每人每种书只能借一本;库存册数随借书、还书而改变。    
要求实现如下15个处理:    
  1. 写出建立BORROW表的SQL语句,要求定义主码完整性约束和引用完整性约束。    
  2. 找出借书超过5本的读者,输出借书卡号及所借图书册数。    
  3. 查询借阅了"水浒"一书的读者,输出姓名及班级。    
  4. 查询过期未还图书,输出借阅者(卡号)、书号及还书日期。    
  5. 查询书名包括"网络"关键词的图书,输出书号、书名、作者。    
  6. 查询现有图书中价格最高的图书,输出书名及作者。    
  7. 查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出。   
  8. 将"C01"班同学所借图书的还期都延长一周。    
  9. 从BOOKS表中删除当前无人借阅的图书记录。    
  10.如果经常按书名查询图书信息,请建立合适的索引。    
  11.在BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)。    
  12.建立一个视图,显示"力01"班学生的借书信息(只要求显示姓名和书名)。    
  13.查询当前同时借有"计算方法"和"组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出。    
  14.假定在建BOOKS表时没有定义主码,写出为BOOKS表追加定义主码的语句。    
  15.对CARD表做如下修改:    
    a. 将NAME最大列宽增加到10个字符(假定原为6个字符)。    
    b. 为该表增加1列NAME(系名),可变长,最大20个字符。    
   
   
1. 写出建立BORROW表的SQL语句,要求定义主码完整性约束和引用完整性约束    
--实现代码:    
CREATE TABLE BORROW(    
    CNO int FOREIGN KEY REFERENCES CARD(CNO),    
    BNO int FOREIGN KEY REFERENCES BOOKS(BNO),    
    RDATE datetime,    
    PRIMARY KEY(CNO,BNO))     
   
2. 找出借书超过5本的读者,输出借书卡号及所借图书册数    
--实现代码:    
SELECT CNO,借图书册数=COUNT(*)    
FROM BORROW    
GROUP BY CNO    
HAVING COUNT(*)>5   
   
3. 查询借阅了"水浒"一书的读者,输出姓名及班级    
--实现代码:    
SELECT * FROM CARD c    
WHERE EXISTS(    
    SELECT * FROM BORROW a,BOOKS b     
    WHERE a.BNO=b.BNO    
        AND b.BNAME=N'水浒'   
        AND a.CNO=c.CNO)     
   
4. 查询过期未还图书,输出借阅者(卡号)、书号及还书日期    
--实现代码:    
SELECT * FROM BORROW     
WHERE RDATE<GETDATE()     
   
5. 查询书名包括"网络"关键词的图书,输出书号、书名、作者    
--实现代码:    
SELECT BNO,BNAME,AUTHOR FROM BOOKS    
WHERE BNAME LIKE N'%网络%'     
   
6. 查询现有图书中价格最高的图书,输出书名及作者    
--实现代码:    
SELECT BNO,BNAME,AUTHOR FROM BOOKS    
WHERE PRICE=(    
    SELECT MAX(PRICE) FROM BOOKS)     
   
7. 查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出    
--实现代码:    
SELECT a.CNO    
FROM BORROW a,BOOKS b    
WHERE a.BNO=b.BNO AND b.BNAME=N'计算方法'   
    AND NOT EXISTS(    
        SELECT * FROM BORROW aa,BOOKS bb    
        WHERE aa.BNO=bb.BNO    
            AND bb.BNAME=N'计算方法习题集'   
            AND aa.CNO=a.CNO)    
ORDER BY a.CNO DESC     
   
8. 将"C01"班同学所借图书的还期都延长一周    
--实现代码:    
UPDATE b SET RDATE=DATEADD(Day,7,b.RDATE)    
FROM CARD a,BORROW b    
WHERE a.CNO=b.CNO    
    AND a.CLASS=N'C01'     
   
9. 从BOOKS表中删除当前无人借阅的图书记录    
--实现代码:    
DELETE A FROM BOOKS a    
WHERE NOT EXISTS(    
    SELECT * FROM BORROW    
    WHERE BNO=a.BNO)     
   
10. 如果经常按书名查询图书信息,请建立合适的索引    
--实现代码:    
CREATE CLUSTERED INDEX IDX_BOOKS_BNAME ON BOOKS(BNAME)    
   
11. 在BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)    
--实现代码:    
CREATE TRIGGER TR_SAVE ON BORROW    
FOR INSERT,UPDATE    
AS    
IF @@ROWCOUNT>0   
INSERT BORROW_SAVE SELECT i.*    
FROM INSERTED i,BOOKS b    
WHERE i.BNO=b.BNO    
    AND b.BNAME=N'数据库技术及应用'     
   
12. 建立一个视图,显示"力01"班学生的借书信息(只要求显示姓名和书名)    
--实现代码:    
CREATE VIEW V_VIEW    
AS    
SELECT a.NAME,b.BNAME    
FROM BORROW ab,CARD a,BOOKS b    
WHERE ab.CNO=a.CNO    
    AND ab.BNO=b.BNO    
    AND a.CLASS=N'力01'   
   
13. 查询当前同时借有"计算方法"和"组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出    
--实现代码:    
SELECT a.CNO    
FROM BORROW a,BOOKS b    
WHERE a.BNO=b.BNO    
    AND b.BNAME IN(N'计算方法',N'组合数学')    
GROUP BY a.CNO    
HAVING COUNT(*)=2   
ORDER BY a.CNO DESC     
   
14. 假定在建BOOKS表时没有定义主码,写出为BOOKS表追加定义主码的语句    
--实现代码:    
ALTER TABLE BOOKS ADD PRIMARY KEY(BNO)     
   
15.1 将NAME最大列宽增加到10个字符(假定原为6个字符)    
--实现代码:    
ALTER TABLE CARD ALTER COLUMN NAME varchar(10)     
   
15.2 为该表增加1列NAME(系名),可变长,最大20个字符    
--实现代码:    
ALTER TABLE CARD ADD 系名 varchar(20)    
   
问题描述:    
为管理岗位业务培训信息,建立3个表:    
S (S#,SN,SD,SA)   S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄    
C (C#,CN )        C#,CN       分别代表课程编号、课程名称    
SC ( S#,C#,G )    S#,C#,G     分别代表学号、所选修的课程编号、学习成绩    
   
要求实现如下5个处理:    
  1. 使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名    
  2. 使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位    
  3. 使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位    
  4. 使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位    
  5. 查询选修了课程的学员人数    
  6. 查询选修课程超过5门的学员学号和所属单位    
   
1. 使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名     
--实现代码:    
SELECT SN,SD FROM S    
WHERE [S#] IN(    
    SELECT [S#] FROM C,SC    
    WHERE C.[C#]=SC.[C#]    
        AND CN=N'税收基础')    
   
   
2. 使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位    
--实现代码:    
SELECT S.SN,S.SD FROM S,SC    
WHERE S.[S#]=SC.[S#]    
    AND SC.[C#]='C2'   
   
3. 使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位    
--实现代码:    
SELECT SN,SD FROM S    
WHERE [S#] NOT IN(    
    SELECT [S#] FROM SC     
    WHERE [C#]='C5')    
   
4. 使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位    
--实现代码:    
SELECT SN,SD FROM S    
WHERE [S#] IN(    
    SELECT [S#] FROM SC     
        RIGHT JOIN C ON SC.[C#]=C.[C#]    
    GROUP BY [S#]    
    HAVING COUNT(*)=COUNT(DISTINCT [S#]))    
   
5. 查询选修了课程的学员人数    
--实现代码:    
SELECT 学员人数=COUNT(DISTINCT [S#]) FROM SC    
   
6. 查询选修课程超过5门的学员学号和所属单位    
--实现代码:    
SELECT SN,SD FROM S    
WHERE [S#] IN(    
    SELECT [S#] FROM SC     
    GROUP BY [S#]    
    HAVING COUNT(DISTINCT [C#])>5)    
   
if not object_id('cj')is null     
   drop table cj    
go    
create table cj(stuName nvarchar(10),KCM nvarchar(10),cj numeric(5,2))     
insert into cj select '张三','语文',98     
union select '李四','语文',89     
union select '王五','语文',67     
union select '周攻','语文',56     
union select '张三','数学',89   
union select '李四','数学',78     
union select '王五','数学',90     
union select '周攻','数学',87     
方法一:    
select stuname from    
    (select stuName,kcm,(select count(*) from cj where stuname!=a.stuname and kcm=a.kcm and cj>a.cj) cnt from cj a) x    
    group by stuname having max(cnt)<=1   
go    
方法二:    
SELECT stuname FROM cj1 a      
where cj IN(SELECT TOP 2 cj FROM cj1 WHERE kcm=a.kcm ORDER BY cj desc)    
GROUP BY stuname HAVING(count(1)>1)    
方法三:    
select distinct stuname from cj a    
    where not exists(select kcm from cj b where a.stuname=stuname    
                and (select count(*) from cj where kcm=b.kcm and stuname!=a.stuname and cj>b.cj)>1)  

Hive SQL大厂面试题必考大全 专栏内容涵盖了基于Hive SQL的各类题目,旨在通过解析经典问题和案例,帮助读者深入理解Hive SQL的原理和应用。每篇文章都将附带完整的题目代码和详细的解题思路,理论与实践相结合,帮助你更好地掌握Hive SQL的知识。 阅读详情

相关推荐

大模型LLM部署方式

建议根据实际需求选择方案,企业级服务优先考虑vLLM或TGI,个人用户可尝试Ollama或Hugging Face本地加载。若需完整代码示例,可参考网页2的VLLM实战或网页5的TGI部署案例。:高并发、低延迟的API服务,需分布式推理支持。:快速创建可分享的Web应用。:个人开发、快速原型验证。

u010249118的博客 516

sql server 练习题

题目1:   问题描述: 为管理岗位业务培训信息,建立3个表: S (S#,SN,SD,SA)   S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄 C (C#,CN )        C#,CN       分别代表课程编号、课程名称 SC ( S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩 1. 使用标准SQL嵌套语句查询选修课程名称为’税收

q3280053的专栏 1204

R_柱状图(加误差线,显著性差异)

先放最终效果图 结果图 # bar_plot 2021/01/19 # 导入所需的包 library(ggplot2) library(ggthemr) library(ggsignif) library(tidyverse) library(dplyr) library(ggpubr) library(devEMF) # 导入并处理数据,需要两张表,一个是原始汇总表格,另外一些是每一...

wt141643的博客 2万+

面试题---Sql语句-图书类

本题用到下面三个关系表: CARD 借书卡。   CNO 卡号,NAME  姓名,CLASS 班级 BOOKS  图书。    BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数  BORROW 借书记录。 CNO 借书卡号,BNO 书号,RDATE 还书日期 备注:限定每人每种书只能借一本;库存册数随借书、还书而改变。 要求实现如下15个处...

韦军辉 1760

10位PWM能否满足电梯±5mm平层精度?4位扩展法让10位PWM达到14位精度

电梯平层精度直接关系乘坐舒适性与安全性,而PWM分辨率是决定精度的关键因素之一。10位PWM能否满足±5mm的平层精度要求?本文从分辨率与物理量的对应关系出发,结合工程精度需求与实战对比,给出明确的选型结论与解决方案,请参考优快云博客《4位扩展法:基于ATtiny816的高精度PWM软件扩展方法》和《低成本高精度PWM:4位扩展法原理、实现和工程实践》。10位PWM的分辨率为 $2^{10} = 1024$ 级。

m0_73354873的博客 244

别再死记硬背了!一张图搞懂无刷电机半桥与全桥驱动的核心差异(附避坑指南)

本文深入解析无刷直流电机的半桥与全桥驱动方式的核心差异,提供直观对比与选型指南。半桥驱动结构简单、成本低,适合低要求场景;全桥驱动性能优越但复杂,适用于高精度控制。文章还包含实战避坑指南,帮助工程师优化驱动方案选择与应用。

weixin_29290947的博客 321

SQL经典面试50题 | 附答案

大家好,我是宝器!今天给大家分享一份星友对SQL经典面试50题的刷题记录,宝器稍作了一些修改,以下是星友自述正文:看完了SQL基础教程,然后再看SQL进阶教程感觉有些不是很懂,于是就开始...

weixin_44747933的博客 5735

Python的WNTR库---基于供水网络

WNTR使用小结(一) 本人最近主要再做设施网络的内容,主要聚焦供水管网(water distribution network,WDN),在做实验中主要用的包为WNTR,下载连接: 链接: WNTR.最好安装最新版本 如果有做这方面研究的小伙伴们需要测试数据可以直接从WNTR实例数据中下载,其中提供了四种规模大小的管网,格式为.inp,可以搭配Epanet使用。如果需要更多示例数据可私信我! 以下内容全部为本人自己探索的小心得,希望能给你带来一点点帮助,如果不够详尽可以自行参阅官方文档:链接: 官方文档.

pushhy的博客 4934

7. 查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出...

--实现代码:SELECT a.CNOFROM BORROW a,BOOKS bWHERE a.BNO=b.BNO AND b.BNAME=N'计算方法' AND NOT EXISTS( SELECT * F...

csxc65837的博客 2002

从零开始:如何用Python建立你的第一个人工智能模型

在这篇文章中,我们将介绍如何从零开始使用Python建立你的第一个人工智能模型。无论你是刚接触编程的新手,还是有经验的开发者想进一步探索人工智能领域,这篇文章都将为你提供清晰、详细的指南。我们将一步步探索数据预处理、模型建立、训练和测试的过程,以及如何解读模型的结果。

Allen1862105的博客 4万+

OpenHarmony电源管理驱动架构剖析:HDI框架下的低功耗实现

鸿蒙电源管理驱动模块是OpenHarmony操作系统中负责设备电源状态管理的核心组件。该模块基于HDI(Hardware Device Interface)框架实现,提供了完整的电源管理功能,包括系统休眠/唤醒、运行锁管理、休眠模式控制等核心功能。public:// 主要接口函数// 运行锁管理private:// 内部辅助函数// 成员变量public:// 运行锁控制接口// 回调管理private:// 内部辅助函数。

m0_67505153的博客 209

10. 如果经常按书名查询图书信息,请建立合适的索引

--实现代码:CREATE CLUSTERED INDEX IDX_BOOKS_BNAME ON BOOKS(BNAME)[@more@] ...

csxc65837的博客 1376

Python爬虫实战:爬取国家气象局台风路径数据的完整教程

国家气象局(如中国气象局)一般会在官方网站公布台风的实时路径,包括台风编号、名称、时间点、经纬度、中心气压、最大风速等信息。这些数据以图形和表格的形式呈现,有时以JSON或CSV文件形式下载。爬取这类数据,有助于构建台风数据库、历史路径分析、趋势预测等应用。本文详细介绍了如何通过Python爬取国家气象局发布的台风路径数据,涵盖了数据采集、解析、存储和可视化全流程。通过实践,你可以构建自己的台风数据库,结合机器学习开展路径预测和风险评估等高级分析。后续可结合深度学习技术,实现台风轨迹预测;

2201_76125261的博客 1026

SQL岗位30个面试题,SQL面试问题及答案

SQL岗位30个面试题,SQL面试问题及答案: 什么是SQL? SQL(结构化查询语言)是一种设计用于检索和操作数据的数据库。它属于美国国家标准协会(ANSI)的一种标准,可用于执行Select(选择)、Update(更新)、Delete(删除)和Insert(插入)等数据任务。 数据库中的表和字段是什么? 表是在具有列和行的模型中设计的数据集合。在表中,指定了列数称为字段,但未定义行数称...

qfxulei的博客 2万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SQL 常见面试题解析

SQL 常见面试题解析

Tony.Dong的专栏 6308

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SQL语句面试题

ONWHEREUNIONWHEREWHERE:按指定列分组,常与聚合函数(如COUNT、SUM)结合使用。:对分组后的结果进行过滤(类似WHERE,但针对分组)。

FAQEW的博客 2026

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

常见的SQL面试题:经典50例

本文从基础到高级再到实战,由浅入深,把MySQL讲的清清楚楚,明明白白,这应该是我目前为止看到过最好的有关MySQL的学习笔记了,我相信如果你把这份笔记认真看完后,无论是工作中碰到的问题还是被面试官问到的问题都能迎刃而解!MySQL50道高频面试题整理:《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!每组最大的N条记录案例:查询各科成绩前两名的记录第1步,查出有哪些组我们可以按课程号分组,查询出有哪些组,对应这个问题里就是有哪些课程号。

2401_84046677的博客 1万+

常见的SQL面试题

来 源:优快云SQL在数据分析中举足轻重,学习SQL实战也是必不可少,经典的50题要是能熟练,相信就没有大问题了,这篇文章分享给各位小伙伴,一起来学习吧!select …组函数(MIN/MAX/SUM/AVG/COUNT)from …join … on …左外连接:left join … on … 右外连接: right join … on …where …group by …(oracle,SQL server中出现在select 子句后的非分组函数,必须出现在 group by子句后)

itisme_的博客 1954

常见的SQL面试题:经典50题(附详解)

已知有如下4张表: 学生表:student(学号,学生姓名,出生年月,性别) 成绩表:score(学号,课程号,成绩) 课程表:course(课程号,课程名称,教师号) 教师表:teacher(教师号,教师姓名) 根据以上信息按照下面要求写出对应的SQL语句。 ps:这些题考察SQL的编写能力,对于这类型的题目,需要你先把4张表之间的关联关系搞清楚了,最好的办法是自己在草稿纸上画出关联图,然后再编...

q_1092535160的博客 1万+

sql面试题

介绍 如题!记录一些sql面试题,加深理解记忆。 **个人理解:**关于复杂的sql查询,你首先需要明确返回字段,提炼条件(where),拆分查询语句、复杂查询逐步简单化。 具体问题。 1.查询出下面表每门课都大于80分的学生。 表名为tb_score +----+------+---------+-------+ | id | name | subject | score | +----+---...

qq_39724895的博客 2755

Sql常见面试题

Sql常见面试题(总结) Sql常见面试题(总结)1.用一条SQL语句 查询出每门课都大于80分的学生姓名 name kecheng fenshu 张三 语文 81张三 数学 75李四 语文 76李四 数学 90王五 语文 81王五 数学 100王五 英语 90A: select distinct name from table where name not in (select distinc

一米阳光的专栏 383

LeetCode上的SQL面试题

不管使用何种语言进行项目开发,都避免不了接触数据库,接触SQL语句,下面的这18道SQL语句面试题摘自力扣,比较具有代表性。 1. 查找重复的电子邮箱 2. 大的国家 3. 交换性别 4. 有趣的电影 5. 组合两个表 6. 超过经理收入的员工 7. 重新格式化部门表 8. 从不订购的客户 9. 删除重复的电子邮箱 10. 上升的温度 11. 超过5名学生的课 12. 第二高的薪水 13. 换座...

yygEwing的博客 790

sql查询成绩最高分_二、SQL面试题

一、SQL经典面试题45道超经典SQL练习题,做完这些你的SQL就过关了_flycat296的博客-优快云博客_sql练习​blog.youkuaiyun.commysql45道练习题_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com数据源:MySQL45道练习题 提取码:q5141. 查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数SELECT ...

weixin_39964590的博客 2353

的面试题_SQL面试题

课程思维导图:针对课程里的面试题要重新写一遍,达到熟能生巧,举一反三:1、面试题类型一(简单查询)练习一:创建学校数据库的表练习二:查找学生查询姓“孟”老师的个数2、面试题类型二(汇总分析)查询不及格的课程并按课程号从大到小排列查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列检索课程编号为“0004”且分数小于60的学生学号,结果按按分数降序排列统计每门课程的学生选...

weixin_30289299的博客 98
下一篇: java基础面试题
johnnydev
博客等级 码龄15年 16粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值