牛客sql题笔记3--清扫知识盲区

该笔记总结了:建表的七大约束、三种删除语句区别、修改表小结、解决only_full_group_by报错

这一块46道题查缺补漏了我个人很多知识盲区~   感觉像回到了学生时代通过刷题找到不会的知识点,每次遇到不会的题 首先庆幸一下还好不是在高考上才发现的,再去找一些同类型的题目,通过刷题巩固知识点,加深记忆!~


第三板块

SQL1-3  插入记录

复制旧表部分内容带新表

insert into 新表(列1,列2,...) select 列1,列2,...  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 year(start_time)<2021 and score is not null;   #sql2



知识点小结:

(一)建表约束

1、主键约束

使某个字段不重复且不得为空,确保表内所有数据的唯一性。

create table 表名(

    id int primary key,

    name varchar(20));

2、联合约束

联合主键中的每个字段都不能为空,并且加起来不能和已设置的联合主键重复。

create table 表名(

    id int ,

    name varchar(20) ,

    primary key(id,name)  );

3、自增约束

自增约束的主键由系统自动递增分配。

create table 表名(

    id int primary key auto_increment,

    name varchar(20) );

4、唯一约束

create table 表名(

    id int ,

    name varchar(20) ,

    unique (name) );

5、非空约束

约束某个字段不能为空

create table 表名(

    id int ,

    name varchar(20)  not null  );

6、默认约束

约束某个字段的默认值

create table 表名(

    id int ,

   name varchar(20),

   age int default 10 );

7、外键约束

(1) 主表(父表)classes 中没有的数据值,在副表(子表)students 中,是不可以使用的;

(2) 主表中的记录被副表引用时,主表不可以被删除。



SQL7   delete 中limit限制

删除记录(二)_牛客题霸_牛客网

delete from exam_record where submit_time is null

or date_sub(submit_time,interval 5 minute)<start_time

order by start_time asc limit 3;

#limit 0,3 就通过不了..

评论区解答:delete 是支持 limit 关键字的,但仅支持单个参数


在这道题还学到了一个有用的函数:

timestampdiff (minute,  start_time,  submit_time)  <  5

当然了,date_sub或date_add也是好理解的~



SQL8   删除语句

删除记录(三)_牛客题霸_牛客网

(二)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),执行后通过事务回滚可以撤销。

delete  vs  truncate

1.delete 可以加where 条件,truncate 不能加

2.truncate删除,效率高一些

3.假如要删除的表中有自增长列,如果用delete 删除后,再插入数据,自增长列的值从断点开始,而truncate删除后,再插入数据,自增长列的值从1开始

4.truncate删除后没有返回值,delete 删除有返回值

5.truncate 删除后不能回滚,delete 删除可以回滚


SQL9   comment用法:添加字段注释

创建一张新表_牛客题霸_牛客网 

create table user_info_vip(

    id int primary key auto_increment comment '自增ID',

    uid int unique not null comment '用户ID',

    nick_name varchar(64) comment '昵称',

    achievement int default 0 comment '成就值',

    level int comment '用户等级',

    job varchar(32) comment '职业方向',

    register_time datetime default current_timestamp comment '注册时间'

)default  charset = UTF8 ; 

comment 属性用来添加字段注释


SQL10   alter table 表名 add|modify|drop|change column 字段名 【字段类型】

修改表_牛客题霸_牛客网

alter table user_info add column school varchar(15) after level;

alter table user_info change column job profession varchar(10);

alter table user_info modify column achievement int(11) default 0;

知识点小结:

语法:alter table 表名 add|modify|drop|change column 字段名 【字段类型】;

①修改字段名

alter table 表 change  column 原列名 现列名 char|int..;

②修改表名

alter table 原表名  rename [TO]  新表明;

③修改字段类型和列级约束

alter table 表 modify column 列名 date|char|int.. ;

④添加字段

alter table 表  add column 列名 varchar(20) first;

⑤删除字段

alter table 表 drop column 列名;

注:

1.默认添加一行列的语句是表示在所有列之后添加

2.如果想在指定列后面添加则要使用after xxx(指定列名)

3.如果是在最开始添加,则在最后使用first即可


SQL18   解决only_full_group_by报错

月总刷题数和日均刷题数_牛客题霸_牛客网

select date_format(submit_time,'%Y%m') as submit_month,

count(submit_time) as month_q_cnt,

any_value(round(count(submit_time)/day(last_day(submit_time)),3) as avg_day_q_cnt

from practice_record where year(submit_time)=2021

group by date_format(submit_time,'%Y%m')

union

select '2021汇总' as submit_month,

count(*) as month_q_cnt,

any_value(round(count(*)/31,3)) as avg_day_q_cnt

from practice_record

where year(submit_time)=2021

order by submit_month;

①关于解决最新的SQL版本中ONLY_FULL_GROUP_BY报错的办法:

ONLY_FULL_GROUP_BY的语义就是确定select 中的所有列的值要么是来自于聚合函数(sum、avg、max等)的结果,要么是来自于group by list中的表达式的值。MySQL提供了any_value()函数来抑制ONLY_FULL_GROUP_BY值被拒绝。

所以只需要在非group by的列上加any_value()就可以了

②给一个任意的日期,查询这个日期对应的月份有多少天

day(last_day(submit_time))


SQL19   group_concat函数

未完成试卷数大于1的有效用户_牛客题霸_牛客网

select uid,count(*)-count(submit_time) as incomplete_cnt,

count(submit_time) as complete_cnt,

group_concat(distinct concat(date_format(start_time,'%Y-%m-%d'),':',ei.tag)

            order by start_time separator ';') as detail

from exam_record er left join examination_info ei

on er.exam_id=ei.exam_id

where year(start_time)=2021

group by uid

having complete_cnt>=1 and incomplete_cnt<5

and incomplete_cnt>1

order by incomplete_cnt desc;


SQL23   union排序问题

每个题目和每份试卷被作答的人数和次数_牛客题霸_牛客网

首先明确,union可以使用任何selcet语句,但order by子句只能在最后一次使用

所以,如果想要对未union前两个sql语句的查询结果进行排序,分别单独排序需要的数据,查出以后再使用union连接

select * from (select exam_id as tid,count(distinct ex.uid) as uv,count(*) as pv  from exam_record ex

group by exam_id order by uv desc,pv desc) t1

union

select * from (select question_id as tid,count(distinct pr.uid) as uv,count(*) as pv  from practice_record pr

group by question_id order by uv desc,pv desc) t2








题目来源:牛客网

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容