sql学习,刷题6

现有一张试卷作答记录表exam_record,结构如下表,其中包含多年来的用户作答试卷记录,由于数据越来越多,维护难度越来越大,需要对数据表内容做精简,历史数据做备份。
表exam_record
在这里插入图片描述
注意新表会自动生成id序列,可以用null代替 或者insert into后面的表名括号中声名从哪里开始插入
– 用法:insert into 新表 (a ,b,)select (A,B)from 旧表 where

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 submit_time < '2021-01-01'
INSERT INTO exam_record_before_2021
SELECT null,uid,exam_id,start_time,submit_time,score FROM exam_record WHERE year(submit_time) <2021

在这里插入图片描述

insert into 表名(列名) VALUES (对应列数值)【,(对应列数值)】

注意:即使是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) 如果把null的地方空着会报错的

在这里插入图片描述
关键字NULL可以用DEFAULT替代。
掌握replace into···values的用法
replace into 跟 insert into功能类似,不同点在于:replace into 首先尝试插入数据到表中,

如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据;
否则,直接插入新数据。
要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。

REPLACE INTO examination_info
VALUES(NULL,9003,'SQL','hard',90,'2021-01-01 00:00:00');

在这里插入图片描述

update exam_record
set submit_time='2099-01-01 00:00:00',score=0
where start_time<'2021-09-01' and submit_time is null
#注意set后面有多个对象用','而不是'and'连接

在这里插入图片描述

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

现有一张试卷作答记录表exam_record,其中包含多年来的用户作答试卷记录,结构如下表:
请删除exam_record表中所有记录,并重置自增主键。

DROP TABLE, TRUNCATE TABLE, DELETE TABLE 三种删除语句的区别
1.DROP TABLE 清除数据并且销毁表,是一种数据库定义语言(DDL Data Definition Language), 执行后不能撤销,被删除表格的关系,索引,权限等等都会被永久删除。
2.TRUNCATE TABLE 只清除数据,保留表结构,列,权限,索引,视图,关系等等,相当于清零数据,是一种数据库定义语言(DDL Data Definition Language),执行后不能撤销。
3.DELETE TABLE 删除(符合某些条件的)数据,是一种数据操纵语言(DML Data Manipulation Language),执行后可以撤销。(还不太明白怎么撤销TT,在什么情况下可以撤销,求大神指点。
运行速度一般DROP最快,DELETE最慢,但是DELETE最安全。
详细可看 https://www.educba.com/sql-truncate/https://www.educba.com/sql-truncate/

truncate table exam_record

在这里插入图片描述
请删除exam_record表中未完成作答或作答时间小于5分钟整的记录中,开始作答时间最早的3条记录。
说明:
条件:
1.未完成作答或作答时间小于5分钟整
where timestampdiff(minute, start_time, submit_time) < 5
or submit_time is null
2.开始作答时间最早的3条记录。
order by start_time
limit 3
考察点:时间差函数的应用和分页的使用
mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15

//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.

//如果只给定一个参数,它表示返回最大的记录行数目:
mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行

//换句话说,LIMIT n 等价于 LIMIT 0,n。

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

在这里插入图片描述
此题的难点是求出两个时间之间的时间差,注意是分钟
所以用时间差函数
timestampdiff(minute,start_time,submit_time)
TIMESTAMPDIFF函数返回begin-end的结果,其中begin和end是DATE或DATETIME表达式。

TIMESTAMPDIFF函数允许其参数具有混合类型,例如,begin是DATE值,end可以是DATETIME值。 如果使用DATE值,则TIMESTAMPDIFF函数将其视为时间部分为“00:00:00”的DATETIME值。

unit参数是确定(end-begin)的结果的单位,表示为整数。 以下是有效单位:

MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH

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

在这里插入图片描述

create table user_info_vip 
(
    id int(11) not null primary key auto_increment comment '自增ID',
    uid int(11) not null unique  comment '用户ID',
    nick_name varchar(64) comment '昵称',
    achievement int(11) default 0 comment '成就值',
    level int(11) comment '用户等级',
    job varchar(32) comment '职业方向',
    register datetime default current_timestamp comment '注册时间'
)default charset=utf8
CREATE TABLE `user_info_vip`(
    `id` int(11) NOT NULL  AUTO_INCREMENT COMMENT '自增ID',
    `uid` int(11) 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 (`id`),
    UNIQUE KEY (`uid`)
)COLLATE = utf8_general_ci;

在这里插入图片描述
1、 添加列

Alter table 表名add column 列名 类型;(默认添加到表的最后一列)

【first|after 字段名】可以指定位置

Eg:alter table employees add column full_name varchar after last_name;

2、 修改列的类型或约束

Alter table 表名 modify column 列名 新类型【新约束】;

3、 修改列名

Alter table 表名 change column 旧列名 新列名 类型;

4、 删除列

Alter table 表名 drop column 列名;

5、 修改表名

Alter table 表名 rename 【to】新表名;

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

现有一张试卷作答记录表exam_record,其中包含多年来的用户作答试卷记录。一般每年都会为exam_record表建立一张备份表exam_record_{YEAR},{YEAR}为对应年份。
现在随着数据越来越多,存储告急,请你把很久前的(2011到2014年)备份表都删掉(如果存在的话)。
备注:后台会通过SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME LIKE ‘exam_record_201_’ 来对比输出结果。

drop table if exists
exam_record_2011,exam_record_2012,exam_record_2013,exam_record_2014;

现有一张试卷信息表examination_info,其中包含各种类型试卷的信息。为了对表更方便快捷地查询,需要在examination_info表创建以下索引,规则如下:
在duration列创建普通索引idx_duration、在exam_id列创建唯一性索引uniq_idx_exam_id、在tag列创建全文索引full_idx_tag

create index idx_duration on examination_info(duration);
create unique index uniq_idx_exam_id on examination_info(exam_id);
create fulltext index full_idx_tag on examination_info(tag);
-- 唯一索引
ALTER TABLE examination_info
ADD UNIQUE INDEX uniq_idx_exam_id(exam_id);

-- 全文索引
ALTER TABLE examination_info
ADD FULLTEXT INDEX full_idx_tag(tag);

-- 普通索引
ALTER TABLE examination_info
ADD INDEX idx_duration(duration);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以为您介绍一下 SQL Server 刷题的相关内容。SQL Server 是一种关系型数据库管理系统,用于存储和管理大量结构化数据。在刷题过程中,您可以通过解决一系列与 SQL Server 相关的问题来提高对其的理解和应用能力。 以下是一些常见的 SQL Server 刷题方向和相关问题: 1. SQL 基础知识: - 什么是 SQL Server?它有哪些特点和优势? - SQL Server 中的数据类型有哪些?它们分别用于存储什么类型的数据? - 如何创建数据库和表格? - 如何插入、更新和删除数据? - 如何使用 SELECT 语句查询数据? 2. 数据查询与筛 - 如何使用 WHERE 子句进行条件选? - 如何使用 ORDER BY 子句对查询结果进行排序? - 如何使用 GROUP BY 子句进行分组聚合操作? - 如何使用 HAVING 子句进行条件筛选(针对分组后的结果)? . 数据操作与修改: - 如何使用 UPDATE 语句修改表格中的数据? - 如何使用 DELETE 语句删除表格中的数据? - 如何使用 INSERT INTO 语句插入新的数据? 4. 数据连接与联结: - 如何使用 JOIN 连接多个表格? - 什么是内连接、外连接和交叉连接? - 如何使用子查询进行复杂的数据查询? 5. 数据聚合与统计: - 如何使用聚合函数(如 SUM、AVG、COUNT、MAX、MIN)进行数据统计? - 如何使用 GROUP BY 子句进行分组统计? - 如何使用 HAVING 子句进行条件筛选(针对分组后的统计结果)? 这些问题只是 SQL Server 刷题中的一部分,您可以根据自己的需求和水平选择适合的题目进行练习。同,还可以参考 SQL Server 官方文档、教程和在线资源来深入学习和提高技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值