Mysql面试题库

SQL插入

SQL 插入记录(一)

描述
现在有一套ID为9003的高难度SQL试卷,时长为一个半小时,请你将 2021-01-01 00:00:00 作为发布时间插入到试题信息表examination_info(其表结构如下图),不管该ID试卷是否存在,都要插入成功,请尝试插入它。
试题信息表examination_info
Mysql面试题库_第1张图片
预计结果:

9003|SQL|hard|90|2021-01-01 00:00:00

执行语句(方法一):

replace into examination_info values(null,9003,'SQL','hard',90,'2021-01-01 00:00:00')

执行语句(方法二):

delete from examination_info
where exam_id=9003;
insert into examination_info
value(null,9003,'SQL','hard',90,'2021-01-01 00:00:00');

总结:使用insert into只能添加没有的数据,可以***使用replace into替换***或者先删除在添加

SQL 更新记录(一)

描述
现有一张试卷信息表examination_info,表结构如下图所示:
Mysql面试题库_第2张图片
请把examination_info表中tag为PYTHON的tag字段全部修改为Python。
执行语句(方法一):

update examination_info
set tag='Python'
where tag='PYTHON'

总结:更新语句不使用关键字from

SQL 更新记录(二)

描述
现有一张试卷作答记录表exam_record,其中包含多年来的用户作答试卷记录,结构如下表:
作答记录表exam_record:
submit_time为 完成时间
Mysql面试题库_第3张图片
请把exam_record表中2021年9月1日之前开始作答的未完成记录全部改为被动完成,即:将完成时间改为’2099-01-01 00:00:00’,分数改为0。
表数据

drop table if EXISTS exam_record;
CREATE TABLE IF NOT EXISTS exam_record (
id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
uid int NOT NULL COMMENT '用户ID',
exam_id int NOT NULL COMMENT '试卷ID',
start_time datetime NOT NULL COMMENT '开始时间',
submit_time datetime COMMENT '提交时间',
score tinyint COMMENT '得分'
)CHARACTER SET utf8 COLLATE utf8_general_ci;
INSERT INTO exam_record(uid,exam_id,start_time,submit_time,score) VALUES
(1001, 9001, '2020-01-02 09:01:01', '2020-01-02 09:21:01', 80),
(1001, 9002, '2021-09-01 09:01:01', '2021-09-01 09:21:01', 90),
(1002, 9001, '2021-08-02 19:01:01', null, null),
(1002, 9002, '2021-09-05 19:01:01', '2021-09-05 19:40:01', 89),
(1003, 9001, '2021-09-02 12:01:01', null, null),
(1003, 9002, '2021-09-01 12:01:01', null, null);

执行语句(方法一):

update exam_record
set submit_time='2099-01-01 00:00:00' ,score=0
where start_time <'2021-09-01 00:00:00' and submit_time is null

SQL 删除记录(一)

描述
现有一张试卷作答记录表exam_record,其中包含多年来的用户作答试卷记录,结构如下表:

作答记录表exam_record:
start_time是试卷开始时间
submit_time 是交卷,即结束时间
Mysql面试题库_第4张图片
请删除exam_record表中作答时间小于5分钟整且分数不及格(及格线为60分)的记录;
表格数据:


drop table if EXISTS exam_record;
CREATE TABLE IF NOT EXISTS exam_record (
id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
uid int NOT NULL COMMENT '用户ID',
exam_id int NOT NULL COMMENT '试卷ID',
start_time datetime NOT NULL COMMENT '开始时间',
submit_time datetime COMMENT '提交时间',
score tinyint COMMENT '得分'
)CHARACTER SET utf8 COLLATE utf8_general_ci;
TRUNCATE exam_record;
INSERT INTO exam_record(uid, exam_id, start_time, submit_time, score) VALUES
(1001, 9001, '2020-01-01 22:11:12', '2020-01-01 23:16:12', 50),
(1001, 9002, '2020-01-02 09:01:01', '2020-01-02 09:06:00', 58),
(1002, 9001, '2021-05-02 10:01:01', '2021-05-02 10:05:58', 60),
(1002, 9002, '2021-06-02 19:01:01', '2021-06-02 19:05:01', 54),
(1003, 9001, '2021-09-05 19:01:01', '2021-09-05 19:40:01', 49),
(1003, 9001, '2021-09-05 19:01:01', '2021-09-05 19:15:01', 70),
(1003, 9001, '2021-09-06 19:01:01', '2021-09-06 19:05:01', 80),
(1003, 9002, '2021-09-09 07:01:02', null, null);

执行语句(方法一):

delete from exam_record
where timestampdiff(minute,start_time,submit_time)<5 and score<60

总结:delete语句使用关键字from,使用timestampdiff求时间差,minute分钟

SQL 删除记录(二)

描述
现有一张试卷作答记录表exam_record,其中包含多年来的用户作答试卷记录,结构如下表:

作答记录表exam_record:
start_time是试卷开始时间
submit_time 是交卷时间,即结束时间,如果未完成的话,则为空
Mysql面试题库_第5张图片
请删除exam_record表中未完成作答或作答时间小于5分钟整的记录中,开始作答时间最早的3条记录。
表格数据:

drop table if EXISTS exam_record;
CREATE TABLE IF NOT EXISTS exam_record (
id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
uid int NOT NULL COMMENT '用户ID',
exam_id int NOT NULL COMMENT '试卷ID',
start_time datetime NOT NULL COMMENT '开始时间',
submit_time datetime COMMENT '提交时间',
score tinyint COMMENT '得分'
)CHARACTER SET utf8 COLLATE utf8_general_ci;
TRUNCATE exam_record;
INSERT INTO exam_record(uid, exam_id, start_time, submit_time, score) VALUES
(1001, 9001, '2020-01-01 22:11:12', '2020-01-01 23:16:12', 50),
(1001, 9002, '2020-01-02 09:01:01', '2020-01-02 09:06:00', 58),
(1001, 9002, '2020-01-02 09:01:01', '2020-01-02 09:05:01', 58),
(1002, 9001, '2021-05-02 10:01:01', '2021-05-02 10:06:58', 60),
(1002, 9002, '2021-06-02 19:01:01', null, null),
(1003, 9001, '2021-09-05 19:01:01', null, null),
(1003, 9001, '2021-09-05 19:01:01', null, null),
(1003, 9002, '2021-09-09 07:01:02', null, null);

执行语句(方法一):

delete from exam_record
where submit_time is null or timestampdiff(minute,start_time,submit_time)<5
order by start_time 
limit 3

SQL 删除记录(三)

描述
现有一张试卷作答记录表exam_record,其中包含多年来的用户作答试卷记录,结构如下表:
Mysql面试题库_第6张图片
请删除exam_record表中所有记录,并重置自增主键。
执行语句(方法一):

truncate table exam_record

总结:truncate

SQL 创建一张新表

描述
现有一张用户信息表,其中包含多年来在平台注册过的用户信息,随着牛客平台的不断壮大,用户量飞速增长,为了高效地为高活跃用户提供服务,现需要将部分用户拆分出一张新表。
原来的用户信息表:
Mysql面试题库_第7张图片
作为数据分析师,请创建一张优质用户信息表user_info_vip,表结构和用户信息表一致。

你应该返回的输出如下表格所示,请写出建表语句将表格中所有限制和说明记录到表里。
Mysql面试题库_第8张图片
执行语句(方法一):

create table if not exists user_info_vip (
id int(11) primary key auto_increment comment "自增ID",
uid int(11) unique not null comment '用户ID',
nick_name varchar(64) comment '昵称',
achievement int(11) default 0 comment '成就值',
level int(11) comment '用户等级',
job varchar(32) comment '职业方向',
register_time datetime default CURRENT_TIMESTAMP comment '注册时间'
)

总结:primary key主键 auto_increment 主键自增 unique 非空约束 comment 备注 ***
*** if not exists创建已经有的表,不报错,显示警示

SQL10 修改表

现有一张用户信息表user_info,其中包含多年来在平台注册过的用户信息。

用户信息表user_info:
Mysql面试题库_第9张图片
请在用户信息表,字段level的后面增加一列最多可保存15个汉字的字段school;并将表中job列名改为profession,同时varchar字段长度变为10;achievement的默认值设置为0。

输出结果示例:
Mysql面试题库_第10张图片

执行语句(方法一):

alter table user_info add school varchar(15) after level;
alter table user_info change job profession varchar(10);
alter table user_info modify achievement int(11) default 0
)

总结:alter更改表结构,配合关键字table,add添加字段,change修改字段名,type
modify重写字段所有

你可能感兴趣的:(mysql,面试,sql)