易君召
易君召
发布于 2026-07-31 / 1 阅读
0
0

常用 SQL 命令完整讲解

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:左连接,左表全部保留,右表匹配不到为 NULL

  • RIGHT JOIN:右连接

sql

SELECT u.name,o.order_name
FROM user u
LEFT JOIN orders o ON u.id = o.user_id;

二、DML 数据操作语言【增删改表内数据】

操作行数据,会触发事务日志

  1. INSERT 新增

sql

INSERT INTO user(name,age) VALUES ('李四',25);
  1. UPDATE 修改

    ⚠️ 千万不要忘记 WHERE!否则全表更新!

sql

UPDATE user SET age=26 WHERE id=1;
  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;

高频易混淆命令对比总结

命令

类别

作用范围

关键点

SELECT

DQL

查询数据

使用频率最高

INSERT/UPDATE/DELETE

DML

表中行数据

记得 WHERE,支持事务

CREATE/ALTER/DROP

DDL

库、表、字段结构

执行立刻生效,大多不能事务回滚

TRUNCATE

DDL

清空表所有数据

快,不可回滚

GRANT/REVOKE

DCL

用户权限

DBA 操作

COMMIT/ROLLBACK

TCL

事务

InnoDB 支持

基础书写规范(建议遵守)

  1. SQL 关键字大写(可读性)

  2. 查询优先指定列名,不要永远 SELECT *

  3. UPDATE、DELETE 先 SELECT 验证条件再执行

  4. JOIN 必须写关联条件,避免笛卡尔积(大量无效数据)


评论