SQL 分为五大分类,方便记忆:
DDL(数据定义)、DML(数据操作)、DQL(数据查询,最常用)、DCL(权限控制)、TCL(事务控制)
标准 SQL,兼容 MySQL、PostgreSQL、SQL Server 大部分语法,我会标注差异点。
一、DQL 数据查询语言【日常开发最高频】
核心:查询数据,SELECT
1. SELECT 查询
sql
-- 查询表全部列
SELECT * FROM user;
-- 指定列查询
SELECT id,name,age FROM user;
-- 别名
SELECT name AS 姓名, age 年龄 FROM user;
-- 去重 DISTINCT
SELECT DISTINCT age FROM user;
2. WHERE 条件过滤
运算符:= > < >= <= != <> AND OR NOT
sql
SELECT * FROM user WHERE age >= 18 AND name='张三';
SELECT * FROM user WHERE age NOT IN (10,20,30);
SELECT * FROM user WHERE name LIKE '张%'; -- %任意字符,_单个字符
3. 排序 ORDER BY
sql
-- asc升序(默认),desc降序
SELECT * FROM user ORDER BY age DESC, id ASC;
4. 分页 LIMIT(MySQL) / TOP (SQLServer) / ROWNUM (Oracle)
sql
-- MySQL:跳过20条,取10条(第3页,每页10条)
SELECT * FROM user LIMIT 20,10;
5. 聚合函数(统计)
COUNT SUM AVG MAX MIN
sql
-- 总人数、最大年龄、平均年龄
SELECT COUNT(*),MAX(age),AVG(age) FROM user;
6. GROUP BY 分组 + HAVING 分组后过滤
✅ WHERE:分组前过滤;HAVING:分组后过滤(可以用聚合函数)
sql
-- 按性别分组,只展示人数大于2的分组
SELECT gender,COUNT(*) cnt
FROM user
WHERE age>16
GROUP BY gender
HAVING cnt > 2;
7. 多表连接 JOIN
INNER JOIN:内连接,只返回两边匹配的数据LEFT JOIN:左连接,左表全部保留,右表匹配不到为 NULLRIGHT JOIN:右连接
sql
SELECT u.name,o.order_name
FROM user u
LEFT JOIN orders o ON u.id = o.user_id;
二、DML 数据操作语言【增删改表内数据】
操作行数据,会触发事务日志
INSERT 新增
sql
INSERT INTO user(name,age) VALUES ('李四',25);
UPDATE 修改
⚠️ 千万不要忘记 WHERE!否则全表更新!
sql
UPDATE user SET age=26 WHERE id=1;
DELETE 删除行数据
⚠️ 不要漏 WHERE,会清空整张表!
sql
DELETE FROM user WHERE id=1;
💡 DELETE vs TRUNCATE
DELETE:逐行删除,支持事务回滚,不重置自增主键
TRUNCATE(DDL):清空全表,速度极快,无法回滚,重置自增
三、DDL 数据定义语言【库、表结构操作】
操作数据库、表、字段结构
1. 数据库操作
sql
CREATE DATABASE testdb; -- 创建库
DROP DATABASE testdb; -- 删除库
USE testdb; -- 切换数据库(MySQL)
2. 表操作
sql
-- 创建表
CREATE TABLE user(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT
);
-- 删除表
DROP TABLE user;
-- 修改表结构 ALTER
ALTER TABLE user ADD COLUMN email VARCHAR(100); --新增字段
ALTER TABLE user DROP COLUMN email; --删除字段
ALTER TABLE user MODIFY COLUMN age TINYINT; --修改字段类型
ALTER TABLE user CHANGE age user_age INT; --修改字段名
3. 索引
sql
CREATE INDEX idx_user_name ON user(name); --创建普通索引
DROP INDEX idx_user_name ON user;
四、TCL 事务控制语言(保证数据一致性)
只针对 InnoDB 引擎(MySQL)
sql
START TRANSACTION; --开启事务
UPDATE account SET money=money-100 WHERE id=1;
UPDATE account SET money=money+100 WHERE id=2;
COMMIT; --提交,永久生效
ROLLBACK;--回滚,撤销所有操作
五、DCL 权限管理(运维 / 管理员使用)
sql
-- 创建用户
CREATE USER 'test'@'%' IDENTIFIED '123456';
-- 授权
GRANT SELECT,INSERT ON testdb.* TO 'test'@'%';
-- 回收权限
REVOKE INSERT ON testdb.* FROM 'test'@'%';
-- 删除用户
DROP USER 'test'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
高频易混淆命令对比总结
基础书写规范(建议遵守)
SQL 关键字大写(可读性)
查询优先指定列名,不要永远
SELECT *UPDATE、DELETE 先 SELECT 验证条件再执行
JOIN 必须写关联条件,避免笛卡尔积(大量无效数据)