SQL编程语法

SQL 编程语法速查手册

简洁记录常用 SQL 语法,便于快速回顾与查阅。


1. 基础查询

SELECT

1
2
SELECT1, 列2 FROM 表名;
SELECT * FROM 表名; -- 所有列

DISTINCT

1
SELECT DISTINCT 列名 FROM 表名;   -- 去重查询

WHERE 子句

1
SELECT * FROM 表名 WHERE 条件;
运算符 含义
= 等于
<>!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在两值之间
LIKE 模糊匹配
IN 在列表内
IS NULL 为空
IS NOT NULL 不为空

逻辑运算符

  • AND:同时成立
  • OR:任一成立

LIKE 与通配符

1
SELECT * FROM 表名 WHERE 列名 LIKE 'a%';   -- 以 a 开头
通配符 含义
% 任意多个字符(含0个)
_ 单个字符
[a-c] 括号内任一字符(如 a,b,c)
[^a-c][!a-c] 不在括号内的任一字符

IN / NOT IN

1
2
SELECT * FROM 表名 WHERE 列名 IN (值1, 值2);
SELECT * FROM 表名 WHERE 列名 NOT IN (值1, 值2);

BETWEEN / NOT BETWEEN

1
2
SELECT * FROM 表名 WHERE 列名 BETWEEN1 AND2;
SELECT * FROM 表名 WHERE 列名 NOT BETWEEN1 AND2;

别名 AS

1
SELECT 列名 AS 别名 FROM 表名 AS 别名;

ORDER BY 排序

1
SELECT * FROM 表名 ORDER BY1 ASC, 列2 DESC;   -- ASC 升序(默认),DESC 降序

LIMIT / TOP

  • MySQL / PostgreSQL / SQLite
    1
    2
    SELECT * FROM 表名 LIMIT 数字;               -- 返回前 N 行
    SELECT * FROM 表名 LIMIT 偏移量, 数量; -- 分页查询
  • SQL Server
    1
    SELECT TOP 数字 * FROM 表名;

2. 数据操作

INSERT

1
INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2);

UPDATE

1
UPDATE 表名 SET1 = 新值, 列2 = 新值 WHERE 条件;

DELETE

1
DELETE FROM 表名 WHERE 条件;

3. 数据定义

数据库操作

1
2
CREATE DATABASE 数据库名;        -- 创建
DROP DATABASE 数据库名; -- 删除

表操作

1
2
3
4
5
6
7
CREATE TABLE 表名 (
1 数据类型 约束,
2 数据类型 约束,
...
);

DROP TABLE 表名; -- 删除表

约束

约束 说明
NOT NULL 列值不能为空
UNIQUE 列值唯一
PRIMARY KEY 主键(唯一且非空)
FOREIGN KEY 外键,引用另一表的主键
CHECK 检查条件
DEFAULT 默认值 默认值
AUTO_INCREMENT (MySQL) / IDENTITY (SQL Server) / SERIAL (PostgreSQL) 自动递增

示例

1
2
3
4
5
6
CREATE TABLE Students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT CHECK (age > 0),
city VARCHAR(50) DEFAULT '未知'
);

ALTER 修改表结构

1
2
3
4
5
ALTER TABLE 表名 ADD 列名 数据类型;               -- 添加列
ALTER TABLE 表名 DROP COLUMN 列名; -- 删除列
ALTER TABLE 表名 ALTER COLUMN 列名 新数据类型; -- 修改列类型 (SQL Server)
ALTER TABLE 表名 MODIFY COLUMN 列名 新数据类型; -- MySQL
ALTER TABLE 表名 RENAME COLUMN 旧名 TO 新名; -- 重命名列 (部分数据库)

4. 连接与集合

JOIN 连接

1
2
3
4
5
6
7
8
9
10
11
-- INNER JOIN:两表匹配的行
SELECT * FROM1 INNER JOIN2 ON1.=2.列;

-- LEFT JOIN:左表所有行 + 右表匹配行,无匹配则为 NULL
SELECT * FROM1 LEFT JOIN2 ON1.=2.列;

-- RIGHT JOIN:右表所有行 + 左表匹配行
SELECT * FROM1 RIGHT JOIN2 ON1.=2.列;

-- FULL JOIN:两表所有行,不匹配处为 NULL (MySQL 不支持,可用 UNION 模拟)
SELECT * FROM1 FULL JOIN2 ON1.=2.列;

UNION / UNION ALL

1
2
3
4
5
6
7
SELECTFROM1
UNION -- 合并结果,去重
SELECTFROM2;

SELECTFROM1
UNION ALL -- 合并结果,不去重
SELECTFROM2;

5. 函数

聚合函数

函数 作用
AVG(列) 平均值
COUNT(列) 计数(可用 * 计行数)
MAX(列) 最大值
MIN(列) 最小值
SUM(列) 求和
FIRST(列) 第一个值 (MS Access)
LAST(列) 最后一个值 (MS Access)

字符串函数

函数 作用 (示例)
UCASE(列)UPPER(列) 转大写
LCASE(列)LOWER(列) 转小写
MID(列, 开始, 长度) 提取子串 (MySQL:SUBSTRING)
LEN(列)LENGTH(列) 字符串长度
FORMAT(列, 格式) 格式化 (日期/数值,不同数据库语法不同)

数值函数

函数 作用
ROUND(列, 小数位) 四舍五入

日期函数

函数 作用 (示例)
NOW() 当前日期和时间 (MySQL)
DATE() 提取日期部分
其他数据库差异大,使用时查阅对应文档

6. 分组与筛选

GROUP BY

1
SELECT 列, 聚合函数 FROM 表名 GROUP BY 列;

HAVING

1
2
SELECT 列, 聚合函数 FROM 表名 GROUP BYHAVING 条件;
-- 与 WHERE 区别:WHERE 过滤行,HAVING 过滤分组

7. 索引

CREATE INDEX

1
2
CREATE INDEX 索引名 ON 表名 (列1, 列2);        -- 普通索引
CREATE UNIQUE INDEX 索引名 ON 表名 (列); -- 唯一索引

DROP INDEX

1
2
DROP INDEX 索引名 ON 表名;                     -- SQL Server
DROP INDEX 表名.索引名; -- MySQL

8. 视图

创建视图

1
CREATE VIEW 视图名 AS SELECT 语句;

删除视图

1
DROP VIEW 视图名;

9. 注释

1
2
3
4
-- 单行注释
/*
多行注释
*/

提示:不同数据库(MySQL、SQL Server、PostgreSQL、SQLite)语法细节可能略有差异,实际使用时请根据具体环境微调。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 slowbirdie.top@outlook.com