MySQL经典面试题

这篇具有很好参考价值的文章主要介绍了MySQL经典面试题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、查询课程名称为“数据库”,且分数低于60分的学生姓名和分数

2、对所有性别为“女”的学生,同时课程名为“高等数学”的分数统一加5

3、删除姓名为“张翰”(学号=1)课程名为“数据库”的课程成绩

4、统计2021年11月每天新用户的次日保留率(保留两位小数)

5、问题:编写SQL语句,查找所有订购了数量至少100个的BR01、BR02或BR03的订单。你需要返回OrderItem表的订单号(order_num)、产品ID(prod_id)和数量(quantity),并按产品ID或数量进行过滤

7、检索每个顾客的名称(Customers表中的cust_name)和所有的订单号(Orders表中的order_num),列出所有的顾客,即使他们没有下过订单。在最后根据顾客姓名cust_name升序返回

8、请统计2021年10月每个有展示记录的退货率不大于0.5的商品各项指标


1、查询课程名称为“数据库”,且分数低于60分的学生姓名和分数

2、对所有性别为“女”的学生,同时课程名为“高等数学”的分数统一加5

3、删除姓名为“张翰”(学号=1)课程名为“数据库”的课程成绩

创建student表
create table Student(
    Sno int primary key,
    Sname varchar(255),
    Ssex varchar(10),
    Sdept varchar(50)
);

创建Course表
create table Course(
    Cno int primary key,
    Cname varchar(255),
    Tno int
);

创建Score表
create table Score(
    Sno int,
    Cno int,
    Degree int,
    primary key(Sno, Cno)
);

创建Teacher表
create table Teacher(
    Tno int primary key,
    Tname varchar(255),
    Tsex varchar(10),
    Prof varchar(50)
);

在Student表中插入一条记录
insert into Student (Sno, Sname, Ssex, Sdept) values (1,'张翰','男','17届计算机一班');

查询课程名称为“数据库”,且分数低于60分的学生姓名和分数
select s.Sname, SC.Degree
from Student s
join Score SC
on s.Sno = SC.Sno
join Course c
on SC.Cno = c.Cno
where c.Cname = "数据库" and SC.Degree < 60;

对所有性别为“女”的学生,同时课程名为“高等数学”的分数统一加5
update Score SC
set Degree = Degree + 5
where SC.Sno in (
    select S.Sno
    from Student s
    where s.Ssex = "女")
and SC.Cno in (
    select c.Cno
    from Course c
    where c.Cname = "高等数学");
    
删除姓名为“张翰”(学号=1)课程名为“数据库”的课程成绩
delete from Score
where Sno =1 and Cno in(
    select c.Cno
    from Course c
    where c.Cname = "数据库");

4、统计2021年11月每天新用户的次日保留率(保留两位小数)

创建用户行为日志表tb_user_log(uid-用户ID,artical_id-文章ID,in_time-进入时间,out_time-离开时间,sign_in-是否签到)
create table tb_user_log(
    id int primary key,
	uid int,
    artical_id int,
    in_time datetime,
    out_time datetime,
    sign_in  int
);

insert into tb_user_log values(1, 101, 0, '2021-11-01 10:00:00', '2021-11-01 10:00:42', 1);
insert into tb_user_log values(2, 102, 9001, '2021-11-01 10:00:00', '2021-11-01 10:00:09', 0);
insert into tb_user_log values(3, 103, 9001, '2021-11-01 10:00:01', '2021-11-01 10:01:50', 0);
insert into tb_user_log values(4, 101, 9002, '2021-11-02 10:00:09', '2021-11-02 10:00:28', 0);
insert into tb_user_log values(5, 103, 9002, '2021-11-02 10:00:51', '2021-11-02 10:00:59', 0);
insert into tb_user_log values(6, 104, 9001, '2021-11-02 11:00:28', '2021-11-02 11:01:24', 0);
insert into tb_user_log values(7, 101, 9003, '2021-11-03 11:00:55', '2021-11-03 11:01:24', 0);
insert into tb_user_log values(8, 104, 9003, '2021-11-03 11:00:45', '2021-11-03 11:00:55', 0);
insert into tb_user_log values(9, 105, 9003, '2021-11-03 11:00:53', '2021-11-03 11:00:59', 0);
insert into tb_user_log values(10, 101, 9002, '2021-11-04 11:00:55', '2021-11-04 11:00:59', 0);

问题:统计2021年11月每天新用户的次日保留率(保留两位小数)
注意:次日保留率为当天新增的用户数中第二天右活跃了的用户数占比。
	 如果in_time-进入时间和out_time-离开时间跨天了,在两天里都记为该用户活跃过,结果按日期升序
with t2 as (
    select uid, date(in_time) dt from tb_user_log
    union
    select uid, date(out_time) dt from tb_user_log
)
select t1.dt dt, round(count(t2.uid) / count(t1.uid), 2) uv_left_rate
from (
    select uid, min(date(in_time)) dt 
    from tb_user_log 
    group by uid) as t1 
left join t2 
on t1.uid = t2.uid and t1.dt = date_sub(t2.dt, interval 1 day) 
where date_format(t1.dt, '%Y-%m') = '2021-11'
group by dt;

5、问题:编写SQL语句,查找所有订购了数量至少100个的BR01、BR02或BR03的订单。你需要返回OrderItem表的订单号(order_num)、产品ID(prod_id)和数量(quantity),并按产品ID或数量进行过滤

OrderItem表包含了所有已订购的产品(有些已被订购多次)
create table OrderItem(
    prod_id varchar(255) not null,
    order_num varchar(255) not null,
    quantity int not null
);

insert into OrderItem values ('BR01', 'a1', '105');
insert into OrderItem values ('BR02', 'a2', '1100');
insert into OrderItem values ('BR02', 'a2', '200');
insert into OrderItem values ('BR03', 'a4', '1121');
insert into OrderItem values ('BR017', 'a5', '10');
insert into OrderItem values ('BR02', 'a2', '19');
insert into OrderItem values ('BR017', 'a7', '5');

问题:编写SQL语句,查找所有订购了数量至少100个的BR01、BR02或BR03的订单。你需要返回OrderItem表的订单号(order_num)、产品ID(prod_id)和数量(quantity),并按产品ID或数量进行过滤
select order_num, prod_id, quantity
from OrderItem
where quantity >= 100
and prod_id in ('BR01', 'BR02', 'BR03')
order by prod_id;

6、编写SQL语句,从Products表中检索所有的产品名称(prod_name),以及名为quant_sold的计算列,其中包含所售产品的总数(在OrderItems表上使用子查询和SUM(quantity)检索)文章来源地址https://www.toymoban.com/news/detail-808272.html

Products表中检索所有的产品名称:prod_name、产品ID:prod_id
create table Products(
    prod_id varchar(255) not null,
    prod_name varchar(255) not null
);

insert into Products values('a0001','egg');
insert into Products values('a0002','sockets');
insert into Products values('a0013','coffee');
insert into Products values('a0003','cola');

OrderItems代表订单商品表,订单产品:prod_id、售出数量:quantity
create table OrderItems(
    prod_id varchar(255) not null,
    quantity int not null
);

insert into OrderItems values('a0001','105');
insert into OrderItems values('a0002','1100');
insert into OrderItems values('a0002','200');
insert into OrderItems values('a0013','1121');
insert into OrderItems values('a0003','10');
insert into OrderItems values('a0003','19');
insert into OrderItems values('a0003','5');

问题:编写SQL语句,从Products表中检索所有的产品名称(prod_name),以及名为quant_sold的计算列,其中包含所售产品的总数(在OrderItems表上使用子查询和SUM(quantity)检索)
select t1.prod_name, round(sum(t2.quantity), 3) as quant_sold
from Products t1
join OrderItems t2
on t1.prod_id = t2.prod_id
group by t1.prod_name;

7、检索每个顾客的名称(Customers表中的cust_name)和所有的订单号(Orders表中的order_num),列出所有的顾客,即使他们没有下过订单。在最后根据顾客姓名cust_name升序返回

Orders表代表订单信息含有订单号order_num和顾客id cust_id
create table Orders(
    order_num varchar(255) not null,
    cust_id varchar(255) not null
);

insert into Orders values('a1','cust10');
insert into Orders values('a2','cust1');
insert into Orders values('a3','cust2');
insert into Orders values('a4','cust22');
insert into Orders values('a5','cust221');
insert into Orders values('a7','cust2217');

Customers表代表顾客信息含有顾客id cust_id和顾客名称cust_name
create table Customers(
    cust_id varchar(255) not null,
    cust_name varchar(255) not null
);

insert into Customers values('cust10','andy');
insert into Customers values('cust1','ben');
insert into Customers values('cust2','tony');
insert into Customers values('cust22','tom');
insert into Customers values('cust221','an');
insert into Customers values('cust2217','hex');
insert into Customers values('cust40','ace');

问题:检索每个顾客的名称(Customers表中的cust_name)和所有的订单号(Orders表中的order_num),列出所有的顾客,即使他们没有下过订单。在最后根据顾客姓名cust_name升序返回
select a.cust_name, b.order_num
from Orders b
right join Customers a
on a.cust_id = b.cust_id
order by a.cust_name;

8、请统计2021年10月每个有展示记录的退货率不大于0.5的商品各项指标

现有用户对展示的商品行为表tb_user_event(uid-用户ID,product_id-商品ID,event_time-行为时间,if_click-是否点击,if_cart-是否加购物车,if_payment-是否付款,if_refund-是否退货退款)
create table tb_user_event(
    id int primary key,
    uid int not null,
    product_id int not null,
    event_time datetime,
    if_click tinyint,
    if_cart tinyint,
    if_payment tinyint,
    if_refund tinyint
);

insert into tb_user_event values(1,101,8001,'2021-10-01 10:00:00',0 ,0,0,0);
insert into tb_user_event values(2,102,8001,'2021-10-01 10:00:00',1 ,0,0,0);
insert into tb_user_event values(3,103,8001,'2021-10-01 10:00:00',1 ,1,0,0);
insert into tb_user_event values(4,104,8001,'2021-10-02 10:00:00',1 ,1,1,0);
insert into tb_user_event values(5,105,8001,'2021-10-02 10:00:00',1 ,1,1,0);
insert into tb_user_event values(6,101,8002,'2021-10-03 10:00:00',1 ,1,1,0);
insert into tb_user_event values(7,109,8001,'2021-10-04 10:00:00',1 ,1,1,1);

问题:请统计2021年10月每个有展示记录的退货率不大于0.5的商品各项指标
注意:商品点展比=点击数÷展示数;
	 加购率=加购数÷点击数;
	 成单率=付款数÷加购数;退货率=退款数÷付款数,
	 当分母为0时整体结果记为0,结果中各项指标保留3位小数,并按商品ID升序排序。
select product_id,
	round(cnt_click / cnt_prod, 3) ctr,
	round(cnt_cart / cnt_click, 3) cart_rate,
	round(cnt_pay / cnt_cart, 3) payment_rate,
	round(cnt_refund / cnt_pay, 3) refund_rate
from(
    select product_id,
    	count(*) cnt_prod,
    	sum(if_click) cnt_click,
    	sum(if_cart) cnt_cart,
    	sum(if_payment) cnt_pay,
    	sum(if_refund) cnt_refund
    from tb_user_event
    where date_format(event_time, '%Y-%m') = '2021-10'
    group by product_id
)t_product
having refund_rate <= 0.5
order by product_id;

到了这里,关于MySQL经典面试题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mysql和Oracle数据库死锁查看以及解决

    一、Mysql数据库死锁排查 SQL : SQL: SQL: 示例: 备注:通过查看事务的trx_started(开始时间)来判断该事务的阻塞时间。 SQL  : 备注:线程ID指的是 1.1.3步骤中查询出来的 trx_mysql_thread_id。 SQL : 示例 : 字段解析 : SQL : 示例: SQL : 备注:多个session用逗号隔开。 View Code   造

    2024年01月20日
    浏览(46)
  • 数据库加密AES 适用 Mysql Oracle 以及java

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 备忘录:加密key为:vU4C!~0_HQtlU_p@ 可采用任意长度为16位的字符串 数据库数据需要对敏感数据进行加密,比如手机号,身份证号以及银行卡号等进行加密。需要一套通用的加密方法可以在java项目以及or

    2024年02月15日
    浏览(50)
  • 查询Oracle和MySQL数据库中当前所有连接信息

    查询Oracle当前所有连接信息: 查询MySQL当前所有连接信息: 在这两个查询中,我为每个字段添加了中文别名,以提高查询结果的可读性

    2024年02月12日
    浏览(72)
  • docker安装mysql、clickhouse、oracle等各种数据库汇总

    1:docker 安装mongo数据库并使用 官网:https://www.mongodb.com/docs/manual/ mongo shell教程1:http://c.biancheng.net/mongodb2/connection.html 安装1 :https://www.zhihu.com/question/54602953/answer/3047452434?utm_id=0 安装2:https://www.duidaima.com/Group/Topic/ArchitecturedDesign/9182 使用驱动进行java开发:https://mongodb.github.

    2024年02月10日
    浏览(53)
  • DataGrip连接数据库设置(MySQL、Oracle、SQL Server)

    1.1 配置信息 1.2 测试查询employees库中departments表信息 employees为测试库,具体来源,参考这篇文章 下载并导入MySQL示例数据库employees 。 1.3 测试查询employees库中employees表信息 将SID改为orcl: 3.1 打开DG后新建Data Source-Microsoft SQL Server 下载驱动文件后按图中配置: 3.2 开启Named Pipes和

    2024年02月12日
    浏览(50)
  • 从MySQL迁移到Oracle数据库的详细步骤和方法

    在一些情况下,可能需要将现有的MySQL数据库迁移到Oracle数据库。本文将详细介绍如何进行这一迁移过程,涵盖了备份、转换和导入等关键步骤,以帮助你顺利完成数据库迁移。 在开始迁移之前,务必备份你的MySQL数据库,以便在出现问题时可以还原数据。 确保你已经安装了

    2024年02月08日
    浏览(55)
  • 使用Apache Doris自动同步整个 MySQL/Oracle 数据库进行数据分析

    Flink-Doris-Connector 1.4.0 允许用户一步将包含数千个表的整个数据库(MySQL或Oracle )摄取到Apache Doris(一种实时分析数据库)中。 通过内置的Flink CDC,连接器可以直接将上游源的表模式和数据同步到Apache Doris,这意味着用户不再需要编写DataStream程序或在Doris中预先创建映射表。

    2024年02月09日
    浏览(62)
  • Oracle、MySQL数据库常规命令语法-简易记录(非常规持续更新)

    前言:呈现的是非常基础必备命令以及常规关联语法,因涉及到不同数据库其表达都会有所区别,此篇纯属做个仓库记录更非常规持续更新,专业人士可忽略,且看且珍惜… MySQL: 关系型数据库、重点开源、支持大型规模、标准SQL数据语言、多平台多架构、高可用集群、可定

    2024年01月25日
    浏览(58)
  • 数据库sql 根据身份证计算年龄段mysql、oracle

    mysql: mysql通过函数可以精确到日 结果: Oracle: oracle只是年份相减,不够精确 结果:

    2024年02月12日
    浏览(69)
  • 主流数据库(SQL Server、Mysql、Oracle)通过sql实现多行数据合为一行

    1、方法一:使用 STUFF 和 FOR XML PATH 进行多行合并成一行 (1)FOR XML PATH用法 FOR XML 是 SQL Server 提供的一种功能,允许您将查询结果转换为 XML 格式。 PATH 模式则是其中一种灵活的方式来构造自定义的XML结构。 1、基本字符串连接 : 当您想从单列中提取所有行的数据并连接成一

    2024年04月10日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包