牛客SQL.2.4 2.5

131 阅读4分钟

「这是我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战

2.4

描述

现有一张试卷信息表examination_info,表结构如下图所示:

img

请把examination_info表中tag为PYTHON的tag字段全部修改为Python。

后台会通过执行'SELECT exam_id,tag,difficulty,duration,release_time FROM examination_info;'语句来对比结果。

示例1

drop table if EXISTS examination_info;
CREATE TABLE IF NOT EXISTS examination_info (
id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
exam_id int UNIQUE NOT NULL COMMENT '试卷ID',
tag varchar(32) COMMENT '类别标签',
difficulty varchar(8) COMMENT '难度',
duration int NOT NULL COMMENT '时长',
release_time datetime COMMENT '发布时间'
)CHARACTER SET utf8 COLLATE utf8_bin;
TRUNCATE examination_info;
INSERT INTO examination_info(exam_id,tag,difficulty,duration,release_time) VALUES
(9001, 'SQL', 'hard', 60, '2020-01-01 10:00:00'),
(9002, 'python', 'easy', 60, '2020-01-01 10:00:00'),
(9003, 'Python', 'medium', 80, '2020-01-01 10:00:00'),
(9004, 'PYTHON', 'hard', 80, '2020-01-01 10:00:00');
9001|SQL|hard|60|2020-01-01 10:00:00
9002|python|easy|60|2020-01-01 10:00:00
9003|Python|medium|80|2020-01-01 10:00:00
9004|Python|hard|80|2020-01-01 10:00:00

方法一

根据题意将表中tag标签为PYTHONtag标签全部改为Python,那么我们需要用到的就是UPDATE语句,改语句的格式为:

UPDATE table_name SET column1_name=new_value[, column2_name=new_value...] [WHERE 条件]

其中[]中为可选;

那么根据上面的格式,我们就可以写出符合题意的sql语句了。sql语句如下:

UPDATE examination_info SET tag='Python' WHERE tag='PYTHON';

另外,注意REPLACEUPDATE的区别,前者是对一整条记录的值做修改,后者可以只修改某个值或者某些记录的值。

2.5

描述

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

作答记录表exam_record:

submit_time为 完成时间

请把exam_record表中2021年9月1日之前开始作答的未完成记录全部改为被动完成,即:将完成时间改为'2099-01-01 00:00:00',分数改为0。

示例1

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);
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|2099-01-01 00:00:00|0
1002|9002|2021-09-05 19:01:01|2021-09-05 19:40:01|89
1003|9001|2021-09-02 12:01:01|None|None
1003|9002|2021-09-01 12:01:01|None|None

方法一

根据题意,在UPDATE的语法格式下,多加上两个条件即可:

  • 开始时间在2021年9月1日之前
  • 且没有提交,在表中表现为分数字段为NULL

sql语句如下:

UPDATE exam_record SET submit_time='2099-01-01 00:00:00', score=0
WHERE start_time<'2021-09-01 00:00:00' AND score IS NULL;