Skip to content

SQL 快速参考

本快速参考指南提供了 SQL 中最常用的语法和示例,帮助您快速查阅和使用 SQL 命令。

基本查询

SELECT 语句

sql
-- 选择所有列
SELECT * FROM table_name;

-- 选择特定列
SELECT column1, column2 FROM table_name;

-- 选择并指定别名
SELECT column1 AS alias1, column2 AS alias2 FROM table_name;

-- 选择不同的值
SELECT DISTINCT column1 FROM table_name;

-- 限制返回行数
SELECT * FROM table_name LIMIT 10;

-- 带条件的查询
SELECT * FROM table_name WHERE condition;

-- 排序
SELECT * FROM table_name ORDER BY column1 ASC, column2 DESC;

-- 分组
SELECT column1, COUNT(*) FROM table_name GROUP BY column1;

-- 分组并过滤
SELECT column1, COUNT(*) FROM table_name GROUP BY column1 HAVING COUNT(*) > 1;

数据操作

INSERT 语句

sql
-- 插入完整行
INSERT INTO table_name VALUES (value1, value2, value3);

-- 插入特定列
INSERT INTO table_name (column1, column2) VALUES (value1, value2);

-- 插入多行
INSERT INTO table_name (column1, column2) VALUES (value1, value2), (value3, value4);

-- 从另一个表插入数据
INSERT INTO table_name (column1, column2) SELECT column1, column2 FROM another_table;

UPDATE 语句

sql
-- 更新所有行
UPDATE table_name SET column1 = value1;

-- 带条件的更新
UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;

-- 使用子查询更新
UPDATE table_name SET column1 = (SELECT column1 FROM another_table WHERE condition) WHERE condition;

DELETE 语句

sql
-- 删除所有行
DELETE FROM table_name;

-- 带条件的删除
DELETE FROM table_name WHERE condition;

-- 使用子查询删除
DELETE FROM table_name WHERE column1 IN (SELECT column1 FROM another_table WHERE condition);

数据定义

CREATE TABLE 语句

sql
-- 创建表
CREATE TABLE table_name (
    column1 datatype constraints,
    column2 datatype constraints,
    ...
    PRIMARY KEY (column1)
);

-- 创建带外键的表
CREATE TABLE table_name (
    column1 datatype PRIMARY KEY,
    column2 datatype,
    foreign_key_column datatype,
    FOREIGN KEY (foreign_key_column) REFERENCES another_table (primary_key_column)
);

-- 创建临时表
CREATE TEMPORARY TABLE temp_table (
    column1 datatype,
    column2 datatype
);

ALTER TABLE 语句

sql
-- 添加列
ALTER TABLE table_name ADD column_name datatype constraints;

-- 修改列
ALTER TABLE table_name MODIFY column_name datatype constraints;

-- 删除列
ALTER TABLE table_name DROP COLUMN column_name;

-- 添加主键
ALTER TABLE table_name ADD PRIMARY KEY (column_name);

-- 添加外键
ALTER TABLE table_name ADD FOREIGN KEY (foreign_key_column) REFERENCES another_table (primary_key_column);

-- 删除主键
ALTER TABLE table_name DROP PRIMARY KEY;

-- 删除外键
ALTER TABLE table_name DROP FOREIGN KEY foreign_key_name;

DROP TABLE 语句

sql
-- 删除表
DROP TABLE table_name;

-- 如果表存在则删除
DROP TABLE IF EXISTS table_name;

-- 删除多个表
DROP TABLE table1, table2;

约束

常用约束

sql
-- NOT NULL 约束
CREATE TABLE table_name (
    column1 datatype NOT NULL,
    ...
);

-- UNIQUE 约束
CREATE TABLE table_name (
    column1 datatype UNIQUE,
    ...
);

-- PRIMARY KEY 约束
CREATE TABLE table_name (
    column1 datatype PRIMARY KEY,
    ...
);

-- FOREIGN KEY 约束
CREATE TABLE table_name (
    column1 datatype PRIMARY KEY,
    foreign_key_column datatype,
    FOREIGN KEY (foreign_key_column) REFERENCES another_table (primary_key_column),
    ...
);

-- CHECK 约束
CREATE TABLE table_name (
    column1 datatype CHECK (condition),
    ...
);

-- DEFAULT 约束
CREATE TABLE table_name (
    column1 datatype DEFAULT default_value,
    ...
);

索引

CREATE INDEX 语句

sql
-- 创建普通索引
CREATE INDEX index_name ON table_name (column1);

-- 创建唯一索引
CREATE UNIQUE INDEX index_name ON table_name (column1);

-- 创建复合索引
CREATE INDEX index_name ON table_name (column1, column2);

-- 创建降序索引
CREATE INDEX index_name ON table_name (column1 DESC);

-- 创建全文索引
CREATE FULLTEXT INDEX index_name ON table_name (column1);

DROP INDEX 语句

sql
-- 删除索引
DROP INDEX index_name;

-- 在 MySQL 中删除索引
DROP INDEX index_name ON table_name;

-- 在 SQL Server 中删除索引
DROP INDEX table_name.index_name;

连接

INNER JOIN

sql
SELECT columns FROM table1 INNER JOIN table2 ON table1.column = table2.column;

LEFT JOIN

sql
SELECT columns FROM table1 LEFT JOIN table2 ON table1.column = table2.column;

RIGHT JOIN

sql
SELECT columns FROM table1 RIGHT JOIN table2 ON table1.column = table2.column;

FULL JOIN

sql
SELECT columns FROM table1 FULL JOIN table2 ON table1.column = table2.column;

CROSS JOIN

sql
SELECT columns FROM table1 CROSS JOIN table2;

子查询

标量子查询

sql
SELECT column1 FROM table1 WHERE column2 = (SELECT MAX(column2) FROM table2);

行子查询

sql
SELECT column1, column2 FROM table1 WHERE (column1, column2) = (SELECT column1, column2 FROM table2 WHERE condition);

列子查询

sql
SELECT column1 FROM table1 WHERE column2 IN (SELECT column2 FROM table2 WHERE condition);

表子查询

sql
SELECT column1 FROM (SELECT column1, column2 FROM table1 WHERE condition) AS subquery WHERE subquery.column2 > value;

视图

CREATE VIEW 语句

sql
-- 创建视图
CREATE VIEW view_name AS SELECT column1, column2 FROM table_name WHERE condition;

-- 创建可更新视图
CREATE VIEW view_name AS SELECT column1, column2 FROM table_name WHERE condition WITH CHECK OPTION;

-- 替换视图
CREATE OR REPLACE VIEW view_name AS SELECT column1, column2, column3 FROM table_name WHERE condition;

DROP VIEW 语句

sql
-- 删除视图
DROP VIEW view_name;

-- 如果视图存在则删除
DROP VIEW IF EXISTS view_name;

-- 删除多个视图
DROP VIEW view1, view2;

函数

聚合函数

sql
-- 计算总和
SELECT SUM(column1) FROM table_name;

-- 计算平均值
SELECT AVG(column1) FROM table_name;

-- 计算计数
SELECT COUNT(*) FROM table_name;
SELECT COUNT(column1) FROM table_name;
SELECT COUNT(DISTINCT column1) FROM table_name;

-- 计算最大值
SELECT MAX(column1) FROM table_name;

-- 计算最小值
SELECT MIN(column1) FROM table_name;

字符串函数

sql
-- 连接字符串
SELECT CONCAT(string1, string2) FROM table_name;

-- 转换为大写
SELECT UPPER(string) FROM table_name;

-- 转换为小写
SELECT LOWER(string) FROM table_name;

-- 计算字符串长度
SELECT LENGTH(string) FROM table_name;

-- 提取子串
SELECT SUBSTRING(string, start, length) FROM table_name;

-- 去除空格
SELECT TRIM(string) FROM table_name;
-- 去除左侧空格
SELECT LTRIM(string) FROM table_name;
-- 去除右侧空格
SELECT RTRIM(string) FROM table_name;

-- 替换字符串
SELECT REPLACE(string, old_substring, new_substring) FROM table_name;

数值函数

sql
-- 计算绝对值
SELECT ABS(number) FROM table_name;

-- 四舍五入
SELECT ROUND(number, decimal_places) FROM table_name;

-- 向上取整
SELECT CEIL(number) FROM table_name;
-- 或
SELECT CEILING(number) FROM table_name;

-- 向下取整
SELECT FLOOR(number) FROM table_name;

-- 计算模运算
SELECT MOD(number1, number2) FROM table_name;
-- 或
SELECT number1 % number2 FROM table_name;

-- 计算幂运算
SELECT POWER(number, exponent) FROM table_name;
-- 或
SELECT number ^ exponent FROM table_name;

-- 计算平方根
SELECT SQRT(number) FROM table_name;

日期函数

sql
-- 获取当前日期
SELECT CURRENT_DATE;
-- 或
SELECT CURDATE();

-- 获取当前时间
SELECT CURRENT_TIME;
-- 或
SELECT CURTIME();

-- 获取当前日期和时间
SELECT CURRENT_TIMESTAMP;
-- 或
SELECT NOW();

-- 日期加间隔
SELECT DATE_ADD(date, INTERVAL value unit);
-- 例如
SELECT DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY);

-- 日期减间隔
SELECT DATE_SUB(date, INTERVAL value unit);
-- 例如
SELECT DATE_SUB(CURRENT_DATE, INTERVAL 1 MONTH);

-- 计算两个日期之间的差值
SELECT DATEDIFF(date1, date2);

-- 格式化日期
SELECT DATE_FORMAT(date, format);
-- 例如
SELECT DATE_FORMAT(CURRENT_DATE, '%Y-%m-%d');

-- 提取日期部分
SELECT YEAR(date);
SELECT MONTH(date);
SELECT DAY(date);
SELECT HOUR(time);
SELECT MINUTE(time);
SELECT SECOND(time);

操作符

算术操作符

操作符描述示例
+加法1 + 2 = 3
-减法5 - 3 = 2
*乘法2 * 3 = 6
/除法6 / 2 = 3
%模运算7 % 3 = 1

比较操作符

操作符描述示例
=等于column = value
<>不等于column <> value
!=不等于column != value
<小于column < value
>大于column > value
<=小于等于column <= value
>=大于等于column >= value
BETWEEN在范围内column BETWEEN value1 AND value2
LIKE模糊匹配column LIKE 'pattern'
IN在集合中column IN (value1, value2, ...)
IS NULL是空值column IS NULL
IS NOT NULL不是空值column IS NOT NULL

逻辑操作符

操作符描述示例
ANDcondition1 AND condition2
ORcondition1 OR condition2
NOTNOT condition

事务

基本事务操作

sql
-- 开始事务
START TRANSACTION;
-- 或
BEGIN;

-- 提交事务
COMMIT;

-- 回滚事务
ROLLBACK;

-- 设置保存点
SAVEPOINT savepoint_name;

-- 回滚到保存点
ROLLBACK TO savepoint_name;

-- 删除保存点
RELEASE SAVEPOINT savepoint_name;

事务隔离级别

sql
-- 设置事务隔离级别
SET TRANSACTION ISOLATION LEVEL level;

-- 隔离级别选项:
-- READ UNCOMMITTED
-- READ COMMITTED
-- REPEATABLE READ
-- SERIALIZABLE

权限管理

用户管理

sql
-- 创建用户
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

-- 修改用户密码
ALTER USER 'username'@'localhost' IDENTIFIED BY 'new_password';

-- 删除用户
DROP USER 'username'@'localhost';

权限管理

sql
-- 授予权限
GRANT privileges ON database_name.table_name TO 'username'@'localhost';

-- 常见权限:SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, EXECUTE, ALL PRIVILEGES

-- 授予所有权限
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';

-- 撤销权限
REVOKE privileges ON database_name.table_name FROM 'username'@'localhost';

-- 查看用户权限
SHOW GRANTS FOR 'username'@'localhost';

系统命令

数据库操作

sql
-- 显示所有数据库
SHOW DATABASES;

-- 创建数据库
CREATE DATABASE database_name;

-- 使用数据库
USE database_name;

-- 删除数据库
DROP DATABASE database_name;

-- 显示当前数据库
SELECT DATABASE();

表操作

sql
-- 显示所有表
SHOW TABLES;

-- 显示表结构
DESCRIBE table_name;
-- 或
SHOW COLUMNS FROM table_name;

-- 显示表索引
SHOW INDEX FROM table_name;

-- 显示表创建语句
SHOW CREATE TABLE table_name;

其他系统命令

sql
-- 显示当前用户
SELECT USER();

-- 显示版本信息
SELECT VERSION();

-- 显示当前时间
SELECT NOW();

-- 显示服务器状态
SHOW STATUS;

-- 显示服务器变量
SHOW VARIABLES;

常见 SQL 模式

分页查询

sql
-- MySQL / PostgreSQL
SELECT * FROM table_name LIMIT offset, limit;
-- 例如:第 1 页,每页 10 条
SELECT * FROM table_name LIMIT 0, 10;
-- 第 2 页,每页 10 条
SELECT * FROM table_name LIMIT 10, 10;

-- SQL Server
SELECT * FROM table_name OFFSET offset ROWS FETCH NEXT limit ROWS ONLY;
-- 例如:第 1 页,每页 10 条
SELECT * FROM table_name OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY;

批量更新

sql
-- 使用 CASE 语句批量更新
UPDATE table_name SET column1 = CASE 
    WHEN condition1 THEN value1
    WHEN condition2 THEN value2
    ELSE value3
END;

批量删除

sql
-- 分批删除大量数据
DELETE FROM table_name WHERE condition LIMIT 1000;

-- 循环执行直到删除完成

数据导出导入

sql
-- 导出表结构和数据
-- MySQL:
mysqldump -u username -p database_name table_name > dump.sql

-- 导入表结构和数据
-- MySQL:
mysql -u username -p database_name < dump.sql

注意事项

  1. SQL 大小写:SQL 关键字不区分大小写,但建议使用大写以提高可读性。

  2. 表名和列名:不同数据库系统对表名和列名的大小写敏感性不同,建议保持一致的命名规范。

  3. 字符串引号:SQL 中字符串通常使用单引号,数字不需要引号。

  4. 分号:SQL 语句通常以分号结尾。

  5. 注释:SQL 支持单行注释(--)和多行注释(/* */)。

  6. NULL 值:NULL 值表示缺失或未知的数据,与空字符串不同。

  7. 性能优化

    • 使用索引加速查询
    • 避免在 WHERE 子句中使用函数
    • 避免使用 SELECT *
    • 使用适当的连接类型
    • 优化子查询
  8. 安全性

    • 使用参数化查询防止 SQL 注入
    • 对用户输入进行验证
    • 使用最小权限原则
    • 加密敏感数据

小结

本快速参考指南涵盖了 SQL 中最常用的语法和示例,包括基本查询、数据操作、数据定义、约束、索引、连接、子查询、视图、函数、操作符、事务、权限管理和系统命令等内容。通过参考本指南,您可以快速查阅和使用 SQL 命令,提高 SQL 编程效率。

请注意,不同的数据库系统(如 MySQL、SQL Server、PostgreSQL、Oracle 等)可能在语法上略有差异,使用时需要根据具体的数据库系统进行调整。