优秀的编程知识分享平台

网站首页 > 技术文章 正文

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

nanyue 2025-10-02 04:44:59 技术文章 1 ℃


无论是开发、运维还是数据库工程师,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% 以上的开发与运维场景。

最近发表
标签列表