SQL牛客网刷题易错点1

1, not like
2, 插入数据 insert

  • 普通插入(全字段):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, …) (注意这种原理是检测到主键或唯一性索引键重复就删除原记录后重新插入)

SQL111-插入数据
自增列不能直接复制,year(时间列),插入时如果某列没给值就用NULL

replace into···values的用法
replace into 跟 insert into功能类似,不同点在于:replace into 首先尝试插入数据到表中,如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据;否则,直接插入新数据。
要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。

3,更新数据 update

  • 设置为新值: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]

where tag = ‘PYTHON’;
易错:1,不用’==‘ 2,SQL每句后分号
where submit_time is null
易错:判断为空用is 不是等号

4,删除记录 delete

  • 根据条件删除:delete from tb_name [WHERE options] [ [ ORDER BY fields ] LIMIT n ]
  • 全部删除(表清空,包含自增计数器重置):truncate tb_name
    "请删除exam_record表中所有记录,并重置自增主键“时用truncate 表名

5,时间差
timestampdiff(interval,time_start,time_end)可计算time_start-time_end的时间差,单位以指定的interval为准,常用可选:
second秒
minute分钟(返回秒数差除以60的整数部分)
hour小时(返回秒数差除以3600的整数部分)
day天数(返回秒数差除以3600*24的整数部分)
month月数
year年数

6,创建新表
create table 表名 (id int primary key auto_increment comment ‘自增ID’,。。。)default charset=utf8

7,修改表 alter table 表名 。。。
增加列在某列之后
alter table 增加的表格 add 增加列的名称 数据类型 位置(after level 在level 之后)
alter table 表名 add school varchar(15) after level;

更换列的名称及数据类型
alter table user_info change 原列名 修改列名 修改数据类型
alter table 表名 change job profession varchar(10);

更改数据类型
alter table 表名 modify 修改列名称 数据类型 默认值等
alter table 表名 modify achievenment int(11) default 0;
易错:设置默认值default 0 ,中间没有等号

表的创建、修改与删除:
8.1 直接创建表:
CREATE TABLE
[IF NOT EXISTS] tb_name – 不存在才创建,存在就跳过
(column_name1 data_type1 – 列名和类型必选
[ primary key – 可选的约束,主键
| foreign key – 外键,引用其他表的键值
| auto_increment – 自增ID
| comment – 列注释(评论)
| default default_value – 默认值
| unique – 唯一性约束,不允许两条记录该列值相同
| not null – 该列非空
], …
) [CHARACTER SET charset] – 字符集编码
[COLLATE collate_value] – 列排序和比较时的规则(是否区分大小写等)

8.2 从另一张表复制表结构创建表:create table 表名 like 旧表名

8.3 从另一张表的查询结果创建表:create table 表名 as select * from 旧表 where …

9.1 修改表:alter table 表名 修改选项 。选项集合:
{ add column <列名> <类型> – 增加列
| change column <旧列名> <新列名> <新列类型> – 修改列名或类型
| alter column <列名> { set default <默认值> | drop default } – 修改/删除 列的默认值
| modify column <列名> <类型> – 修改列类型
| drop column <列名> – 删除列
| rename to <新表名> – 修改表名
| character set <字符集名> – 修改字符集
| collate <校对规则名> } – 修改校对规则(比较和排序时用到)

10.1 删除表:drop table [if exists] 表名1 [,表2]

11,字符串问题

  • 字符串的截取:substring(字符串,起始位置,截取字符数)
  • 字符串的拼接:concat(字符串1,字符串2,字符串3,…)
  • 字母大写:upper(字符串)

12,
切割字符串:left(order_date, 7)
date_format函数:where date_format(order_date, ‘%Y-%m’)=‘2020-01’

13,sum是求和 count是计数 ,别混

14,where 与 having的区别
where条件语句后面不能加聚合函数(分组函数)
having 不能单独使用,必须和group by 联合使用

15,左连接:from 表1 join 表2 on 连接条件(表1.a列=表2.a列)
where判断:from 表1 ,表2 where 连接条件
子查询:from 表1 where a列 in (select a列 from 表2 where 其他筛选条件)

16,
mysql不支持outer join,但能使用left join +right join实现全联结
即 outer join = (left join )union (right join)

17,

  • union–将两个表做行拼接,同时自动删除重复的行。
  • union all—将两个表做行拼接,保留重复的行
    即想将两个表上下拼接—用union ,字段不同的话可以重命名后再拼接

18,
union 拼接时,上表order by 后再下表 order by ----会报错
应该union拼接后,再order by

19,
索引创建、删除与使用:

1.1 create方式创建索引:

create
[ unique-- 唯一索引
| fulltext – 全文索引
] index index_name ON table_name – 不指定唯一或全文时默认普通索引
(column1[(length) [DESC|ASC]] [,column2,…]) – 可以对多列建立组合索引

#在duration列创建普通索引idx_duration
create index idx_duration on 表名(duration) ;
#在exam_id列创建唯一性索引uniq_idx_exam_id
create unique index uniq_idx_exam_id on 表名(exam_id);
#在tag列创建全文索引full_idx_tag。
create fulltext index full_idx_tag on 表名(tag);

1.2 alter方式创建索引:alter table 表名 add [unique|fulltext] [index] index_content(content)
ALTER TABLE tb_name ADD [UNIQUE | FULLTEXT] [INDEX] index_content(content)

2.1 drop方式删除索引:DROP INDEX <索引名> ON <表名>

2.2 alter方式删除索引:ALTER TABLE <表名> DROP INDEX <索引名>

3.1 索引的使用:
索引使用时满足最左前缀匹配原则,即对于组合索引(col1, col2),在不考虑引擎优化时,条件必须是col1在前col2在后,或者只使用col1,索引才会生效;
索引不包含有NULL值的列
一个查询只使用一次索引,where中如果使用了索引,order by就不会使用
like做字段比较时只有前缀确定时才会使用索引
在列上进行运算后不会使用索引,如year(start_time)<2020不会使用start_time上的索引

20,count(distinct exam_id and score is not null)
distinct 去重,and可以放在count里面作为条件,is not null 而不是 not is null

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值