Appearance
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 |
逻辑操作符
| 操作符 | 描述 | 示例 |
|---|---|---|
| AND | 与 | condition1 AND condition2 |
| OR | 或 | condition1 OR condition2 |
| NOT | 非 | NOT 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注意事项
SQL 大小写:SQL 关键字不区分大小写,但建议使用大写以提高可读性。
表名和列名:不同数据库系统对表名和列名的大小写敏感性不同,建议保持一致的命名规范。
字符串引号:SQL 中字符串通常使用单引号,数字不需要引号。
分号:SQL 语句通常以分号结尾。
注释:SQL 支持单行注释(--)和多行注释(/* */)。
NULL 值:NULL 值表示缺失或未知的数据,与空字符串不同。
性能优化:
- 使用索引加速查询
- 避免在 WHERE 子句中使用函数
- 避免使用 SELECT *
- 使用适当的连接类型
- 优化子查询
安全性:
- 使用参数化查询防止 SQL 注入
- 对用户输入进行验证
- 使用最小权限原则
- 加密敏感数据
小结
本快速参考指南涵盖了 SQL 中最常用的语法和示例,包括基本查询、数据操作、数据定义、约束、索引、连接、子查询、视图、函数、操作符、事务、权限管理和系统命令等内容。通过参考本指南,您可以快速查阅和使用 SQL 命令,提高 SQL 编程效率。
请注意,不同的数据库系统(如 MySQL、SQL Server、PostgreSQL、Oracle 等)可能在语法上略有差异,使用时需要根据具体的数据库系统进行调整。