• 数据库经典笔试题


    一、分享背景:        

            由于最近测试这个行业,内卷的非常严重,不得不再得好好的学习一下,测试周边的一些知识,今天为大家整理一些数据库经典的笔试题,可以好好的备战一下测试在数据库方面的知识。

    二、分享内容:

    1.1 本题目的表结构
    Student(S#,Sname,Sage,Ssex)学生表
    Course(C#,Cname,T#)课程表
    SC(S#,C#,score)成绩表
    Teacher(T#,Tname)教师表
    1.2本题目的建表及测试数据
    1建表
    create table Student(
       S# int,
       Sname varchar(32),
       Sage int,
       Ssex varchar(8)
    )
    create table Course(
       C# int ,
       Cname varchar(32),
       T# int 
    )
    create table Sc(
       S# int ,
       C# int ,
       score int ,
    )
    create table Teacher(
        T# int ,
        Tname varchar(32)
    )    
    (1)查询“001”课程比002课程成绩高的所有学生的学号;

    select a.S# from 2 (select S#,Score from SC where C#='001') a, 3 (select S#,Score 
    from SC where C#='002') b 4 where a.S#=b.S# and a.Score>b.Score 
      
    (2) 查询平均成绩大于60分的同学的学号和平均成绩; 

     1 select S#,AVG(Score) as 
    AvgScore  2 from SC 3 group by S# 4 having AVG(Score)>60   

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

     1 select s.S#,s.Sname,COUNT(sc.C#) as CourseCount,SUM(sc.Score) as ScoreSum 2 from 
    Student s left outer join SC sc 3 on s.S# = sc.S# 4 group by s.S#,s.Sname 5 
    order by s.S#   

    (4)查询姓“李”的老师的个数; 

     1 select COUNT(distinct Tname) as 
    count 2 from Teacher 3 where Tname like '李%'   

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

    1 select s.S#,s.Sname 2 from 
    Student s 3 where s.S# not in 4 ( 5     select distinct(sc.S#) from SC sc,Course 
    c,Teacher t 6     where sc.C#=c.C# and c.T#=t.T# and t.Tname='叶平' 7 )
       
    (6)查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;  

    1 --解法一:求交集  2 select s.S#,s.Sname  3 from Student s,SC sc  4 where 
    s.S#=sc.S# and sc.C#='001'  5 intersect  6 select s.S#,s.Sname  7 from Student 
    s,SC sc  8 where s.S#=sc.S# and sc.C#='002'  9 
    --解法二:使用exists 10 select 
    s.S#,s.Sname 11 from Student s,SC sc 12 where s.S#=sc.S# and sc.C#='001' and 
    exists 13 ( 14     select * from SC sc2 where sc.S#=sc2.S# and sc2.C#='002' 15 )
       
    PS: 
    EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是
    返回值True或False。那么, 这里我们来看一下 in和exists的区别 :  ①in 
    是把外表和内表作hash 
    连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。  ②一直以来认为 
    exists比in效率高的说法是不准确的 。
      
    -->如果查询的两个表大小相当,那么用in和exists差别不大。  
    -->如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in。  

     三、拓展内容,下边有更详细的经典数据库笔试题和面试题

    (1条消息) 经典的数据库笔试题你值得拥有-其它文档类资源-CSDN文库icon-default.png?t=M85Bhttps://download.csdn.net/download/m0_49428126/86540014

  • 相关阅读:
    ESP32-CAM初始篇:Arduino环境搭建-->实现局域网推流
    腾讯云HiFlow场景连接器
    C/C++总结笔记——关键字3:malloc/free、new/delete、malloc&new区别、内存泄漏
    P4310 绝世好题
    大厂光环下的功能测试,出去面试自动化一问三不知
    docker-compose 安装MongoDB续:创建用户及赋权
    1452_TC275 DataSheet阅读笔记13_供电
    广电行业没落了吗?生成式人工智能(AIGC)媒体应用标准联盟发布,超清化、移动化和智能化是发展趋势
    何为博弈心理学?
    redis的实际使用
  • 原文地址:https://blog.csdn.net/m0_49428126/article/details/126880898