SQL 常用语句总结(基于MySQL)
基本用法
SELECT a.column_name1, a.column_name2, … , b.column_name1, b.column_name2 …
FROM table_name1 a
(LEFT/RIGHT/OUTER/INNER(default)) JOIN table_name2 b
ON a.key = b.key
WHERE <some conditions>
GROUP BY <some columns>
HAVING <some conditions>
ORDER BY <some columns> (ASC(default)/DESC)
常用关键词
名称 | 作用 |
---|---|
DISTINCT | 去重 |
AS | 重命名 |
LIMIT a (OFFSET b) | 显示(第(b+1)个开始的)前a个 |
NOT | 取非 |
AND | 取交 |
OR | 取并 |
NULL | 空值 |
IN | 范围筛选 |
UNION (ALL) | 合并查询结果(不去重) |
WITH | 构建临时表 |
EXISTS | 判断是否存在 |
LIKE | 配合%进行通配符匹配 |
REGEX_LIKE | 正则表达式筛选 |
聚合函数
名称 | 作用 |
---|---|
AVG | 平均 |
COUNT | 求和 |
MAX | 最大 |
MIN | 最小 |
SUM | 汇总 |
条件函数
形式 | 说明 |
---|---|
IF(test,a,b) | 如果test成立,执行a,否则执行b |
CASE WHEN a THEN b END | 当a成立时执行b |
窗口函数
形式 | 说明 |
---|---|
ROW_NUMBER() OVER(PARTITION BY col_name ORDER BY col_name) | 获取每类按某项指标的排名 |
RANK() OVER(PARTITION BY col_name ORDER BY col_name) | 获取每类按某项指标的排名(可并列) |
DENSE_RANK() OVER(PARTITION BY col_name ORDER BY col_name) | 获取每类按某项指标的排名(相同记录属于同一排名) |
PERCENT_RANK() OVER(PARTITION BY col_name ORDER BY col_name) | 获取每类按某项指标的百分位数 |
LEAD/LAG (col_name ) OVER(PARTITION BY col_name ORDER BY col_name) | 获得超前/滞后记录 |
日期函数
形式 | 作用 |
---|---|
YEAR(date) | 获取date的年份 |
MONTH(date) | 获取date的月份 |
DAY(date) | 获取date的天 |
DATEDIFF(date1, date2) | 计算date1-date2的天数 |
DATE_ADD(date, INTERVAL num DAY) | 计算date过num天后的日期 |
DATE_FORMAT(date, “%Y%m”) | 将date转化为 yyyymm的形式 |
TIMESTAMPDIFF(unit,date1,date2) | 计算(date2-date1)/unit |
文本函数
形式 | 作用 |
---|---|
CHARACTER_LENGTH(s) | 返回字符串a的长度 |
CONCAT(s1,s2,s3, ⋯ \cdots ⋯) | 拼接字符串s1, s2, s3 … |
SUBSTRING_INDEX(s,t,a) | 将字符串s按分隔符t划分,返回前a个元素 |
SUBSTRING(s,a,b) | 从字符串s中提取子串(从位置 a 开始,提取 b 个字符) |
REPLACE(str, find_string, replace_with) | 替换 |
其他函数
形式 | 作用 |
---|---|
ROUND(value, k) | 保留k位小数 |
FLOOR(x) | ⌊ x ⌋ \lfloor x\rfloor ⌊x⌋ |
CEIL(x) | ⌈ x ⌉ \lceil x \rceil ⌈x⌉ |
插入记录
INSERT INTO table_name(column_name1, column_name2, …)
VALUES(value1, value2…), (…),(…)…
INSERT INTO table_name(column_name1, column_name2, …)
SELECT … FROM …
更新记录
UPDATE table_name SET <some conditions> WHERE <some conditions>
删除记录
DELETE FROM table_name WHERE <some conditions>
TRUNCATE TABLE table_name 删除表中所有记录,并重置自增主键
创建表
CREATE TABLE table_name (
field_name1 type_1 null_or_not_1 key_or_not_1 default_value_1 extra_1 comment_1,
field_name2 type_2 null_or_not_2 key_or_not_2 default_value_2 extra_2 comment_2,
…)
修改表
ALTER TABLE table_name ADD field_name_1 type AFTER field_name_2
在某列之后添加新的列
ALTER TABLE table_name CHANGE field_name_1 field_name_2 type
更改表中field_name_1的名字为field_name_2
ALTER TABLE table_name MODIFY field_name type DEFAULT value
更改某列的默认值
删除表
DROP TABLE table_name
附录
教程:
书籍:
《SQL 必知必会》
Cheat sheet
Cheat_sheet_1
Cheat_sheet_2
Cheat_sheet_3