SQL 语言日常使用 100 条经典命令(收藏级)

无论是开发、运维还是数据库工程师,SQL 语言都是最常用的技能之一。本文整理了 100 条经典 SQL 命令,覆盖 MySQL / PostgreSQL / SQL Server / Oracle 常见方言,几乎囊括了日常工作场景。提议收藏并在日常开发中查阅使用。

一、数据库与表管理(1-15)

  1. 创建数据库

CREATE DATABASE company_db;

  1. 删除数据库

DROP DATABASE company_db;

  1. 切换数据库(MySQL)

USE company_db;

  1. 查看所有数据库

SHOW DATABASES;

  1. 创建数据表

CREATE TABLE employees (

id INT PRIMARY KEY AUTO_INCREMENT,

name VARCHAR(100),

age INT,

hire_date DATE

);

  1. 删除表

DROP TABLE employees;

  1. 修改表名

ALTER TABLE employees RENAME TO staff;

  1. 增加字段

ALTER TABLE employees ADD COLUMN email VARCHAR(100);

  1. 修改字段类型

ALTER TABLE employees MODIFY age SMALLINT;

  1. 删除字段

ALTER TABLE employees DROP COLUMN email;

  1. 查看表结构

DESCRIBE employees;

  1. 查看建表语句(MySQL)

SHOW CREATE TABLE employees;

  1. 清空表数据(不删除表结构)

TRUNCATE TABLE employees;

  1. 复制表结构

CREATE TABLE employees_backup LIKE employees;

  1. 复制表结构+数据

CREATE TABLE employees_copy AS SELECT * FROM employees;

二、数据插入与更新(16-30)

  1. 插入一行

INSERT INTO employees (name, age, hire_date) VALUES (‘Tom’, 28, ‘2025-01-01’);

  1. 插入多行

INSERT INTO employees (name, age) VALUES (‘Alice’, 30), (‘Bob’, 35);

  1. 根据查询结果插入

INSERT INTO employees_backup SELECT * FROM employees WHERE age > 30;

  1. 更新单行

UPDATE employees SET age = 29 WHERE id = 1;

  1. 更新多行

UPDATE employees SET age = age + 1 WHERE age < 30;

  1. 删除数据

DELETE FROM employees WHERE age < 20;

  1. 防止误删:开启安全模式(MySQL)

SET SQL_SAFE_UPDATES = 1;

  1. UPSERT(MySQL ON DUPLICATE KEY)

INSERT INTO employees (id, name) VALUES (1, ‘Tom’)

ON DUPLICATE KEY UPDATE name=’Tom’;

  1. UPSERT(PostgreSQL ON CONFLICT)

INSERT INTO employees (id, name) VALUES (1, ‘Tom’)

ON CONFLICT (id) DO UPDATE SET name=’Tom’;

  1. 插入忽略冲突(MySQL)

INSERT IGNORE INTO employees (id, name) VALUES (1, ‘Tom’);

三、基本查询(31-50)

  1. 查询所有列

SELECT * FROM employees;

  1. 查询指定列

SELECT name, age FROM employees;

  1. 加别名

SELECT name AS employee_name FROM employees;

  1. 条件查询

SELECT * FROM employees WHERE age > 30;

  1. 多条件 AND/OR

SELECT * FROM employees WHERE age > 30 AND name LIKE ‘T%’;

  1. 排序

SELECT * FROM employees ORDER BY age DESC;

  1. 限制条数

SELECT * FROM employees LIMIT 10;

  1. 分页查询(MySQL)

SELECT * FROM employees LIMIT 10 OFFSET 20;

  1. 去重查询

SELECT DISTINCT age FROM employees;

  1. 模糊匹配

SELECT * FROM employees WHERE name LIKE ‘%Tom%’;

  1. 范围查询(BETWEEN)

SELECT * FROM employees WHERE age BETWEEN 25 AND 35;

  1. 集合查询(IN)

SELECT * FROM employees WHERE age IN (25, 30, 35);

  1. NULL 判断

SELECT * FROM employees WHERE email IS NULL;

  1. 聚合函数(COUNT, SUM, AVG, MIN, MAX)

SELECT COUNT(*), AVG(age) FROM employees;

  1. 分组查询(GROUP BY)

SELECT age, COUNT(*) FROM employees GROUP BY age;

  1. 分组过滤(HAVING)

SELECT age, COUNT(*) FROM employees GROUP BY age HAVING COUNT(*) > 1;

  1. 子查询(WHERE IN)

SELECT * FROM employees WHERE id IN (SELECT id FROM employees_backup);

  1. EXISTS 子查询

SELECT * FROM employees e WHERE EXISTS (SELECT 1 FROM employees_backup b WHERE b.id = e.id);

  1. CASE 表达式

SELECT name,

CASE WHEN age < 30 THEN ‘青年’

WHEN age BETWEEN 30 AND 50 THEN ‘中年’

ELSE ‘老年’ END AS age_group

FROM employees;

  1. JOIN 查询

SELECT e.name, d.dept_name

FROM employees e

JOIN departments d ON e.dept_id = d.id;

四、约束与索引(51-65)

  1. 设置主键

ALTER TABLE employees ADD PRIMARY KEY (id);

  1. 唯一约束

ALTER TABLE employees ADD CONSTRAINT unique_email UNIQUE (email);

  1. 外键约束

ALTER TABLE employees ADD CONSTRAINT fk_dept FOREIGN KEY (dept_id) REFERENCES departments(id);

  1. 检查约束(CHECK)

ALTER TABLE employees ADD CONSTRAINT chk_age CHECK (age >= 18);

  1. 创建索引

CREATE INDEX idx_age ON employees(age);

  1. 唯一索引

CREATE UNIQUE INDEX idx_email ON employees(email);

  1. 组合索引

CREATE INDEX idx_name_age ON employees(name, age);

  1. 删除索引(MySQL)

DROP INDEX idx_age ON employees;

  1. 查看索引

SHOW INDEX FROM employees;

  1. 聚簇索引(SQL Server)

CREATE CLUSTERED INDEX idx_id ON employees(id);

五、函数与表达式(66-80)

  1. 字符串拼接

SELECT CONCAT(name, ‘-‘, age) FROM employees;

  1. 字符串长度

SELECT LENGTH(name) FROM employees;

  1. 子字符串

SELECT SUBSTRING(name, 1, 3) FROM employees;

  1. 转大写/小写

SELECT UPPER(name), LOWER(name) FROM employees;

  1. 去空格

SELECT TRIM(name) FROM employees;

  1. 数学函数

SELECT ABS(-5), ROUND(3.14159, 2), CEIL(2.1), FLOOR(2.9);

  1. 日期函数(MySQL)

SELECT NOW(), CURDATE(), YEAR(NOW()), MONTH(NOW());

  1. 日期加减

SELECT DATE_ADD(NOW(), INTERVAL 7 DAY);

  1. DATEDIFF

SELECT DATEDIFF(NOW(), hire_date) FROM employees;

  1. 随机数

SELECT RAND();

  1. COALESCE(取第一个非空值)

SELECT COALESCE(email, ‘no-email’) FROM employees;

  1. IFNULL

SELECT IFNULL(email, ‘N/A’) FROM employees;

  1. CAST 类型转换

SELECT CAST(age AS CHAR) FROM employees;

  1. 分组拼接(MySQL)

SELECT dept_id, GROUP_CONCAT(name) FROM employees GROUP BY dept_id;

  1. 窗口函数 ROW_NUMBER()

SELECT name, ROW_NUMBER() OVER (PARTITION BY dept_id ORDER BY age DESC) AS rn FROM employees;

  1. RANK() 排名

SELECT name, RANK() OVER (ORDER BY age DESC) FROM employees;

  1. NTILE 分组

SELECT name, NTILE(4) OVER (ORDER BY age) AS quartile FROM employees;

  1. LAG/LEAD

SELECT name, LAG(age, 1) OVER (ORDER BY id) FROM employees;

  1. JSON 解析(MySQL 5.7+)

SELECT JSON_EXTRACT(‘{“a”:1,”b”:2}’, ‘$.a’);

  1. 正则匹配

SELECT * FROM employees WHERE name REGEXP ‘^T.*’;

六、事务与锁(81-90)

  1. 开启事务

START TRANSACTION;

  1. 提交事务

COMMIT;

  1. 回滚事务

ROLLBACK;

  1. 保存点

SAVEPOINT sp1;

  1. 回滚到保存点

ROLLBACK TO sp1;

  1. 设置事务隔离级别

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

  1. 查看事务隔离级别(MySQL)

SELECT @@transaction_isolation;

  1. 加排他锁

SELECT * FROM employees WHERE id=1 FOR UPDATE;

  1. 加共享锁

SELECT * FROM employees WHERE id=1 LOCK IN SHARE MODE;

  1. 死锁检测(MySQL InnoDB)

SHOW ENGINE INNODB STATUS;

七、权限与安全(91-100)

  1. 创建用户

CREATE USER ‘dev’@’localhost’ IDENTIFIED BY ‘123456’;

  1. 授予权限

GRANT SELECT, INSERT ON company_db.* TO ‘dev’@’localhost’;

  1. 回收权限

REVOKE INSERT ON company_db.* FROM ‘dev’@’localhost’;

  1. 查看权限

SHOW GRANTS FOR ‘dev’@’localhost’;

  1. 删除用户

DROP USER ‘dev’@’localhost’;

  1. 修改密码

ALTER USER ‘dev’@’localhost’ IDENTIFIED BY ‘newpwd’;

  1. 只读账户

GRANT SELECT ON company_db.* TO ‘readonly’@’%’;

  1. 锁表(MySQL)

LOCK TABLE employees READ;

  1. 解锁表

UNLOCK TABLES;

  1. 审计日志(MySQL 8.0+)

SELECT * FROM performance_schema.events_statements_history;

总结

本文整理了 SQL 日常工作最常用的 100 条命令,涵盖:

  • 数据库/表管理
  • 数据增删改查
  • 约束与索引
  • 常用函数
  • 窗口函数
  • 事务与锁
  • 权限管理与安全

学会并灵活使用这些命令,基本能覆盖 90% 以上的开发与运维场景。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
会飞的想的头像 - 鹿快
评论 共4条

请登录后发表评论