该文章整理于牛客刷题中遇到的语法等问题
该文章整理于牛客刷题中遇到的问题
-
SQL
执行语句:**select –>where –> group by–> having–>order by**
-
UNION【ALL】
:
- 使用
UNION
可以实现将多个查询结果集合并为一个结果集。 -
ALL
:表示在结果几种不去除重复的记录 - 没有指定
ALL
:去除合并后结果集中重复的记录 - 所有查询语句中列的个数和列的顺序必须相同。
- 所有查询语句中对应列的数据类型必须兼容。
- ORDER BY语句要放在最后一个查询语句的后边。
- 时间处理:
-
YEAR/MONTH
函数等 -
date_format()
函数:date_format(date, "%Y-%m")="202108" -
day(last_day(xxxx))
当前月份中有多少天: -
last_day()
函数:返回月份中的最后一天。
- 模糊匹配:
-
like _
单个 -
like %
多个 - 正则:
regexp
-
instr(M,S)
M 模板串,S子串; 返回结果:<= 0不存在,> 0存在 - like模糊匹配多个
-
like %xxx%xxx%
-
like %xxx% and like %yyy%
- 联结:
- 内联结:
inner join
。取两列的交集。 - 外联结:
-
left join
:左连接,以左边表的列为主,取两列的交集,对于不在右边列存在的名称取null。 -
right join
:右连接,以右边表的列为主,取两列的交集,对于不在左边列存在的名称取null。
- 统计(
count
函数)
-
count(*)
包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL -
count(1)
包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL -
count(列名)
只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。
- 数据更新或插入(
replace
)
- 通过主键 / 唯一索引,先删除源数据(若存在),再插入数据(格式与
insert into
相似) -
replace into
:有就覆盖,没有就插入
-
timestampdiff
函数
-
TIMESTAMPDIFF(interval, time_start, time_end)
可计算time_start-time_end
的时间差,单位以指定的interval为准,常用可选:
- SECOND 秒
- MINUTE 分钟(返回秒数差除以60的整数部分)
- HOUR 小时(返回秒数差除以3600的整数部分)
- DAY 天数(返回秒数差除以3600*24的整数部分)
- MONTH 月数
- YEAR 年数
- 删除数据:
- 根据条件删除:
DELETE FROM tb_name [WHERE options] [ [ ORDER BY fields ] LIMIT n ]
-
TRUNCATE tb_name
:全部删除(表清空,包含自增计数器重置)
- DDL(数据定义语言)
- 添加列
-
alter table 表名 add column 列名 类型 【first|after 字段名】
;
- 修改列的类型或约束
-
alter table 表名 modify column 列名 新类型 【新约束】
;
- 修改列名
-
alter table 表名 change column 旧列名 新列名 类型
;
- 删除列
-
alter table 表名 drop column 列名
;
- 修改表名
-
alter table 表名 rename 【to】 新表名
;
- 将某一列放到第一列
-
alter table 表名 modify column 列名 类型 first
;
- 删除表
-
drop table【if exists】 表名
;
- 复制表结构
-
create table 表名 like 旧表
;
- 复制表的结构+数据
-
create table 表名
-
select 查询列表 from 旧表【where 筛选】
;
- 四舍五入(
ROUND
) -
ROUND(X)
,返回参数 X 最近似的整数 -
ROUND(X,D)
,返回 X ,其值保留到小数点后 D 位,第 D 位的保留方式为四舍五入