题解 | #SQL 2.插入记录(二)#

插入记录(二)

http://www.nowcoder.com/practice/9681abf28745468c8adacb3b029a18ce

明确考点:

插入记录的方式汇总:

  • 普通插入(全字段):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]

细节剖析:

  • 新表exam_record_before_2021已创建好;
  • 第一列为自增主键列,不能直接复制过去;
  • 只复制2021年之前的记录;
  • 只复制已完成了的试题作答纪录;

思路实现:

  • 本题可采用第四种插入方式,需根据细节剖析的点做稍微改动,改为限定字段插入,即只插入除自增id列以外的列:
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';
  • 注意上面的WHERE条件简化了细节剖析里的后两个条件,用submit_time来判断可以隐含的保证已完成这个条件。如果用start_time判断可能会出错(如下代码),比如20201231晚上开始做,20210101凌晨完成,分开来筛选结果会不对,写作:
-- 错误示例
WHERE YEAR(start_time) < '2021' and submit_time IS NOT NULL;
SQL进阶 文章被收录于专栏

SQL进阶step by step

全部评论
请问为什么不能用select *
1 回复 分享
发布于 2022-01-20 10:52
为什么 第一句 表结构后面加 (uid, exam_id, start_time, submit_time, score)呢 ?
1 回复 分享
发布于 2021-12-20 17:59
可以给我解答下 细节剖析 的第二条吗?为什么有自增主键列不能直接复制过去,我试了下变2了,可以给我解答下吗?谢谢!
3 回复 分享
发布于 2021-11-29 23:38
笔记:WHERE YEAR(submit_time) < '2021' = year(submit_time)<2021 and submit_time is not null
2 回复 分享
发布于 2022-01-25 20:35
请问,我看MOSH视频里说,创建一个表复制时,复制表默认不会复制原表的主键和自动递增,可是这个例题里,id在复制表里默认是主键和递增,是怎么回事呢
点赞 回复 分享
发布于 2022-03-14 11:28
id为 主 不能复制
点赞 回复 分享
发布于 2022-01-16 11:05

相关推荐

09-19 19:43
已编辑
广东工业大学 golang
zizi哦:很牛了,稳大厂给几点建议:一、想被稳的问题,关键点,可以加深一点,一眼看过去全是文字,没事干容易抓不住重点;二、第一个开源项目很多人 star,这是一个证明你牛逼的证据,建议放在项目背景,开头就是这句话,背景到结果,并且重点标注;三、个人技能可以放后,没什么把握的可以不写上去,比如你列了这么多微服务中间件,你确定自己真的理解底层吗?如果不熟悉,可以表述为熟悉微服务体系开发,如 xxx 中间件;四、项目很多描述在讲述架构,有没有自己觉得亮点的设计,体现不出你解决问题的过程和思考。
如何写一份好简历
点赞 评论 收藏
分享
09-09 06:44
已编辑
浙江大学 深度学习
无敌王八拳:貌似10月线下面?
投递华为技术有限公司等公司10个岗位
点赞 评论 收藏
分享
评论
237
42
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务