SQL 速查
现代 SQL 快速参考指南
Section titled “现代 SQL 快速参考指南”本指南提供了常见 SQL 语句及其现代语法的快速参考。请注意,不同数据库管理系统(DBMS),如 MySQL、PostgreSQL、SQL Server、Oracle 等之间,具体的语法细节有时可能略有差异。
SQL 语句 | 语法 / 示例
AND / OR 运算符
用于在 WHERE 子句中组合多个条件。
SELECT column1, column2FROM table_nameWHERE condition1 AND condition2;
SELECT column1, column2FROM table_nameWHERE condition1 OR condition2;ALTER TABLE
修改现有表结构。
-- 添加列ALTER TABLE table_nameADD COLUMN column_name datatype [constraints];
-- 删除列ALTER TABLE table_nameDROP COLUMN column_name;
-- 修改列的数据类型(语法有所不同)-- PostgreSQL, SQL Server:ALTER TABLE table_nameALTER COLUMN column_name TYPE new_datatype;-- MySQL:ALTER TABLE table_nameMODIFY COLUMN column_name new_datatype;注意:修改列(类型、约束)很常见,但语法差异很大。添加/删除列更为标准。
AS (别名)
为表或列指定一个临时名称。
-- 列别名SELECT column_name AS alias_nameFROM table_name;
-- 表别名(常用于 JOIN)SELECT t1.column1, t2.column2FROM table_name1 AS t1JOIN table_name2 AS t2 ON t1.id = t2.fk_id;BETWEEN 运算符
选择给定范围内的值(包含边界)。
SELECT column_name(s)FROM table_nameWHERE column_name BETWEEN value1 AND value2;CASE 表达式
允许在 SQL 语句中使用条件逻辑。
SELECT column_name, CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ELSE result_else END AS new_column_nameFROM table_name;CREATE DATABASE
创建一个新数据库。
CREATE DATABASE database_name;CREATE TABLE
创建一个新表。
CREATE TABLE table_name ( column1 datatype [constraints], column2 datatype [constraints], column3 datatype [constraints], ... PRIMARY KEY (column_name_pk), FOREIGN KEY (column_name_fk) REFERENCES other_table(other_column));-- 包含常见约束的示例:CREATE TABLE employees ( id INT PRIMARY KEY AUTO_INCREMENT, -- PostgreSQL 中为 SERIAL name VARCHAR(100) NOT NULL, email VARCHAR(100) UNIQUE, department_id INT, salary DECIMAL(10, 2) CHECK (salary > 0), FOREIGN KEY (department_id) REFERENCES departments(id));CREATE INDEX
创建一个索引以提高查询性能。
CREATE INDEX index_nameON table_name (column1, column2, ...);
-- 创建唯一索引CREATE UNIQUE INDEX index_name_uniqueON table_name (column_unique);CREATE VIEW
基于 SQL 语句的结果集创建一个虚拟表。
CREATE VIEW view_name ASSELECT column1, column2FROM table_nameWHERE condition;DELETE
从表中删除行。
-- 删除特定行DELETE FROM table_nameWHERE condition;
-- 删除所有行(请谨慎使用!)DELETE FROM table_name;注意:TRUNCATE TABLE 删除所有行更快,但特性不同。
DROP DATABASE
删除现有数据库(请极其谨慎使用!)。
DROP DATABASE database_name;DROP INDEX
删除索引。
-- 常见语法 (MySQL, PostgreSQL, SQL Server)DROP INDEX index_name ON table_name;
-- Oracle 语法DROP INDEX index_name;
-- 较旧的 MySQL 语法(仍然可用)-- ALTER TABLE table_name DROP INDEX index_name;DROP TABLE
删除现有表(请极其谨慎使用!)。
DROP TABLE table_name;EXISTS 运算符
测试子查询中是否存在任何记录。
SELECT column_name(s)FROM table_nameWHERE EXISTS (SELECT 1 FROM another_table WHERE condition);GROUP BY 子句
将指定列中具有相同值的行分组到汇总行中。常与聚合函数一起使用。
SELECT column_name, aggregate_function(column_to_aggregate) AS resultFROM table_nameWHERE condition -- 可选GROUP BY column_nameORDER BY column_name; -- 可选HAVING 子句
过滤由 GROUP BY 创建的分组。使用它是因为 WHERE 无法对聚合函数进行过滤。
SELECT column_name, aggregate_function(column_to_aggregate) AS resultFROM table_nameGROUP BY column_nameHAVING aggregate_function(column_to_aggregate) operator value;IN 运算符
允许你在 WHERE 子句中指定多个值。
SELECT column_name(s)FROM table_nameWHERE column_name IN (value1, value2, ...);-- 也可以与子查询一起使用WHERE column_name IN (SELECT column_from_another_table FROM another_table WHERE condition);INSERT INTO
向表中插入新行。
-- 为所有列插入值(顺序很重要)INSERT INTO table_nameVALUES (value1, value2, value3, ...);
-- 为特定列插入值INSERT INTO table_name (column1, column2, column3, ...)VALUES (value1, value2, value3, ...);INSERT INTO SELECT
从一个表复制数据并将其插入到另一个表中。
INSERT INTO target_table (column1, column2)SELECT source_column1, source_column2FROM source_tableWHERE condition;JOIN 操作 (INNER, LEFT, RIGHT, FULL OUTER)
根据相关列组合两个或多个表中的行。
-- INNER JOIN(返回两个表中匹配的行)SELECT columnsFROM table1INNER JOIN table2 ON table1.common_column = table2.common_column;
-- LEFT JOIN(返回左表的所有行,右表匹配的行,否则为 NULL)SELECT columnsFROM table1LEFT JOIN table2 ON table1.common_column = table2.common_column;
-- RIGHT JOIN(返回右表的所有行,左表匹配的行,否则为 NULL)SELECT columnsFROM table1RIGHT JOIN table2 ON table1.common_column = table2.common_column;
-- FULL OUTER JOIN(在任一表有匹配项时返回所有行,不匹配的为 NULL)SELECT columnsFROM table1FULL OUTER JOIN table2 ON table1.common_column = table2.common_column;注意:某些 DBMS 使用 LEFT OUTER JOIN、RIGHT OUTER JOIN。OUTER 通常是可选的。
LIKE 运算符
用于 WHERE 子句中,在列中搜索指定模式。
通配符:%(匹配任意字符序列),_(匹配任意单个字符)。
SELECT column_name(s)FROM table_nameWHERE column_name LIKE 'pattern%'; -- 例如:'a%', '%xyz', '_bc%'LIMIT / FETCH FIRST / TOP 子句
限制查询返回的行数。
-- MySQL, PostgreSQL, SQLiteSELECT column_name(s)FROM table_nameORDER BY column_name -- 可选,但建议使用以获得一致结果LIMIT number_of_rows;
-- SQL ServerSELECT TOP number_of_rows_or_percent column_name(s)FROM table_nameORDER BY column_name; -- 可选
-- Oracle, Standard SQL (2008+)SELECT column_name(s)FROM table_nameORDER BY column_name -- 可选FETCH FIRST number_of_rows ROWS ONLY;ORDER BY 子句
按升序(ASC - 默认)或降序(DESC)对结果集排序。
SELECT column_name(s)FROM table_nameORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;SELECT
从数据库中提取数据。
SELECT column1, column2, ...FROM table_name;SELECT *
选择表中所有列。
SELECT *FROM table_name;注意:出于性能和清晰度考虑,通常不建议在生产代码中使用;最好指定具体的列名。
SELECT DISTINCT
仅返回指定列的唯一(去重)值。
SELECT DISTINCT column_name(s)FROM table_name;SELECT INTO / CREATE TABLE AS SELECT
将数据复制到新表中。
-- SQL Server (创建 new_table)SELECT column1, column2INTO new_table_nameFROM old_table_nameWHERE condition;
-- 标准 SQL, PostgreSQL, MySQL, Oracle (创建 new_table)CREATE TABLE new_table_name ASSELECT column1, column2FROM old_table_nameWHERE condition;注意:PL/SQL (Oracle) 或 T-SQL (SQL Server) 中的 SELECT ... INTO variable_name 是不同的,它将值赋给变量。
TRUNCATE TABLE
快速移除表中的所有行。此操作通常比 DELETE FROM table_name 更快,并且通常不容易回滚,因为它通常是最小化记录的。在某些 DBMS 中,它还会重置自增计数器。
TRUNCATE TABLE table_name;警告:请谨慎使用,因为它在许多系统中不可逆地删除所有数据,并且不会触发行级触发器。
UNION / UNION ALL 运算符
组合两个或多个 SELECT 语句的结果集。
UNION 移除重复行。UNION ALL 包含所有行(速度更快)。
SELECT column_name(s) FROM table1UNION -- 或者 UNION ALLSELECT column_name(s) FROM table2;注意:SELECT 语句必须具有相同数量的列,并且对应列的数据类型必须兼容。
UPDATE
修改表中的现有记录。
UPDATE table_nameSET column1 = value1, column2 = value2, ...WHERE condition; -- 重要!如果没有 WHERE,所有行都将被更新。WHERE 子句
根据指定条件过滤记录。
SELECT column_name(s)FROM table_nameWHERE condition;本快速参考涵盖了许多基本的 SQL 命令。对于更高级的主题,如窗口函数(Window Functions)、通用表表达式(Common Table Expressions, CTEs)以及特定 DBMS 函数,请参阅更详细的文档。