❤欢迎大家阅读我的文章呀❤
今天开始的是SQL进阶挑战
希望你们在我的文章当中能有所收获!!!
SLogan:日拱一卒,功不唐捐!
插入记录的方式汇总:
普通插入(全字段):INSERT INTO table_name VALUES (value1, value2, …)
普通插入(限定字段):INSERT INTO table_name (column1, column2, …) VALUES
(value1, value2, …)多条一次性插入:INSERT INTO table_name (column1,column2, …) VALUES
(value1_1, value1_2, …), (value2_1, value2_2, …), …从另一个表导入:
INSERT INTO table_name
SELECT * FROM table_name2
[WHERE key=value]
带更新的插入:
REPLACE INTO table_name VALUES (value1, value2, …) (注意这种原理是检测到主键或唯一性索引键重复就删除原记录后重新插入)
解题思路:
这题主要考查的是SQL插入多行数据的方法:
INSERT INTO table_name (column1, column2, …) VALUES
(value1, value2, …)
但是我们要注意题目中的两个小细节:
第一个就是插入的表格存在自增主键,id是自增主键(PRIMARY KEY),不需要手动填入,它会跟随表格行数进行自己增加
所以我们在插入数据的时候,指定插入的列名, 可以不用填写id这一列的数据,让id自增。
第二个细节就是要注意题目当中所提到的10分钟后退出了平台,NULL列为YES,说明没有提交,也没有成绩,为空值NULL。
代码如下:
INSERT INTO exam_record (uid, exam_id, start_time, submit_time, score) VALUES
(1001, 9001, '2021-09-01 22:11:12', '2021-09-01 23:01:12', 90),
(1002, 9002, '2021-09-04 07:01:02', NULL, NULL);
解题思路:
这题考查的是从另一个表导入,可以看第一点开始的引用部分,有具体格式。
这道题需要注意的有几下几点:
①id是自增的,所以可以不写,和上一题一样
②筛选条件:一是2021年之前的,需要用到日期函数YEAR(),二是已完成了的试题作答情况,也就是提交过的,有成绩的记录,说明成绩score不为NULL
代码如下:
INSERT INTO exam_record_before_2021(uid,exam_id,start_time,submit_time,score)
SELECT uid, exam_id, start_time, submit_time, score
FROM exam_record
WHERE YEAR(submit_time)< '2021' AND submit_time IS NOT NULL
解题思路:
时长为一个半小时,等于90分钟,所以第三个参数为90.
不管该ID试卷是否存在,都要插入成功,试卷ID列有唯一性索引,自增主键可直接设置为NULL或0或DEFAULT。
本题的格式可以参考前言当中的“带更新的插入”
代码如下:
REPLACE INTO examination_info VALUES
(NULL,9003,'SQL','hard',90,'2021-01-01 00:00:00');
修改记录的方式汇总:
设置为新值:
UPDATE table_name SET column_name=new_value [,column_name2=new_value2]
[WHERE column_name3=value3]
根据已有值替换:
UPDATE table_name SET key1=replace(key1, ‘查找内容’, ‘替换成内容’)
[WHERE column_name3=value3]
解题思路:
tag为PYTHON的tag字段全部修改为Python
具体的修改方式参考第二点开头的方式汇总,这道题两种方式都可以用。
正确代码如下:
UPDATE examination_info
SET tag='Python'
WHERE tag='PYTHON'
解题思路:
改2021年9月1日之前开始作答的记录 对应 start_time <‘2021-09-01 00:00:00’
改未完成的记录 对应 score IS NULL
改为被动完成:完成时间改为’2099-01-01 00:00:00’,分数改为0
正确代码如下:
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
删除记录的方式汇总:
根据条件删除:
DELETE FROM tb_name
[WHERE options] [ [ ORDER BY fields ] LIMIT n ]
全部删除(表清空,包含自增计数器重置):
TRUNCATE tb_name
时间差:
TIMESTAMPDIFF(interval, time_start, time_end)可计算time_start-time_end的时间差,单位以指定的interval为准,常用可选:SECOND 秒
MINUTE 分钟(返回秒数差除以60的整数部分)
HOUR 小时(返回秒数差除以3600的整数部分)
DAY天数(返回秒数差除以3600*24的整数部分)
MONTH 月
YEAR 年
解题思路:
本题有两个条件需要同时满足:
作答时间小于5分钟整的记录
因此可以使用**TIMESTAMPDIFF(interval, time_start, time_end)可计算time_start-time_end的时间差
分数不及格(及格线为60分)的记录
正确代码如下:
DELETE FROM exam_record
WHERE TIMESTAMPDIFF(MINUTE,start_time, submit_time) < 5 AND score < 60
解题思路:
本题的删除条件有三个:
未完成作答的记录,即submit_time IS NULL
或作答时间小于5分钟整的记录,与上一题一样
开始作答时间最早的3条记录,即ORDER BY start_time LIMIT 3
具体的答题格式参考上面。
正确代码如下:
DELETE FROM exam_record
WHERE submit_time IS NULL OR TIMESTAMPDIFF(MINUTE,start_time, submit_time) < 5
ORDER BY start_time LIMIT 3
解题思路:
本题题意,删除表中所有记录,并重置自增主键
全部删除(表清空,包含自增计数器重置):
TRUNCATE tb_name
正确代码如下:
TRUNCATE exam_record
今天是【SQL进阶挑战】这一个小专题的练习和分享!
有点点小难度哟,我之前学的知识都碎碎片片的,今天边做题边回忆,边记,明天复习巩固!
今天课太多啦,所以很晚,还好抓住了今天的尾巴!
感谢您宝贵的阅读,关注和点赞噢!晚安❤