zoukankan      html  css  js  c++  java
  • MySQL 面试题1

    题目一:

    有一个【保单车辆】数据库,数据库包括三个表:

    1、保单表:保单号(po)、被保险人(iname)、产品类型(pc)、保险起期(sdate)、保险止期(edate),

    五个属性组成,记为:t_poliey_base(po,iname,pc,sdate,edate), po 为关键字。

    2、车辆表:车辆编号(vo)、车牌号码(vc)、品牌(vbrand)、 车架号(vframe)、制造日期(vdate)

    五个属性组成,记为:t_vehicele(vo,vc,vbrand,vframe,vdate),vo为关键字。

    3、保单车辆表:保单号(po), 车辆编号(vo)、创建时间(cdate)

    三个属性组成,记为:t_poliey_vehicle(po,vo,cdate)

    # 1.将一个保单记录( 保单号:010,被保人:小美,产品类型: 109, 保险起期:2021-01 -01,保险止期:2021-12-31 )

    insert into t_policy_base values('010','小美',109,'2021-01-01', '2021-12-31');

    # 2.删除车辆表中车辆编号为 001 的数据;

    delete from t_vehicle where po = '001';

    # 3.将保单号为 002 的被保险人改为 “李四”;

    update t_policy_base set iname='李四' where po = 002;

    # 4.查询保单表中起保时商大于 2021-02-01 的所有数据,按照保单号降序排列;

    select * from t_policy_base where sdate > '2021-02-01' order by po desc ;

    # 5.查询品牌为宝马并且产品类型为109的所有车牌号码,车架号,保单号,被保险人;

    select b.vc, b.vframe, a.po, a.iname from t_policy_base a ,t_vehicele b,t_poliey_vehicle c 
    where a.po = c.po and b.vo = c.vo and b.vbrand = '宝马’ and a.pc = 109;

    题目二:

        

      查询每门课程都大于80分的学生姓名

    1、最小分数 > 80 

    select C.name from C group by c.name HAVING min (C.fenshu) > 80;

    2、子查询,排除小于80的,只要有一门没超过 80分 就不符合要求

    select DISTINCT C.name from C where C.name not in (select C.name from C where C.fenshu <= 80);

    题目三:集团有多个部门,部门下有多名员工,求每个部门绩效分数排名第二的人员

        

    根据部门自连接,再给每个员工绩效排序

    第一种:先再组内进行排序,并添加一列,再取第二名的人员;

    select *,
    (select count(*) from b b1 where b1.departmentid = b2.departmentid and b1.score <= b2.score )
    from b b2;

        

    select * from b b2
    where
    (select count(*) from b b1 where b1.departmentid = b2.departmentid and b1.score >= b2.score ) = 2;

          

    第二种:先排除最大的,再用 not in 取当前最大的就是第二名

    select max(b.score),b.name from b where b.score not in (
    select max(b.score) from b group by b.departmentid )
    group by b.departmentid ;

    第二行SQL取出最大的结果为:

    第一二行SQL结果为:

    全部执行结果为:

    题目四:

          

    1、查询数学平均成绩最好的那个班级

    ->两表关联,所有数学成绩

    ->分组平均值

    ->排序取第

    第一步:先查每个班级的平均成绩

    select avg(a.score) from scores a, student b
    where a.name = b.name and a.course = '数学'
    group by b.class;

        

    # avg(a.score):平均成绩;b.class:班级;scores a, student b查询那两个表
    select avg(a.score) as avgscore, b.class from scores a, student b
    # 两个表之间的关联条件;及数学平均成绩
    where a.name = b.name and a.course = '数学'
    # group by=根据班级分组;order by=平均成绩排序;limit=取第一个
    group by b.class order by avgscore desc limit 1;

        

    本文仅供参考;如果这篇文件对你有所帮助,麻烦动动发财的小手,推荐一波支持下万分感谢 *******请大家尊重原创,如要转载,请注明出处:作者:守护@往昔;转载自:https://www.cnblogs.com/shouhu/,谢谢!!*******
  • 相关阅读:
    软件开发 —— 重构(refactor)
    语言与哲学 —— 维特根斯坦
    【撸码caffe 三】 caffe.cpp
    编程语言入门及进阶、设计模式、面向对象书籍
    用ISA2006配置单网卡缓存服务器
    Forefront TMG 之 ISP 冗余传输链路(ISP-R)
    MDT配置数据库
    MDT概念说明
    更改SQL实例端口
    SCCM2012安装、配置
  • 原文地址:https://www.cnblogs.com/shouhu/p/14453056.html
Copyright © 2011-2022 走看看