史上超强最常用SQL语句大全 :SQL语句必备基础语法

本文全面介绍了 SQL 语言的四大分类——DDL(数据定义语言)、DML(数据操作语言)、DQL(数据查询语言)和 DCL(数据控制语言),涵盖了从数据库和表的管理,到数据的增删改查、排序、聚合、分组、分页、连接查询与子查询,再到用户权限管理的全套常用语句。无论你是数据库新手还是资深 DBA,都能在此快速查找面试高频和日常开发必备的 SQL 语句。
在这里插入图片描述


一、DDL(Data Definition Language)数据定义语言

1. 操作库(Database)

-- 创建数据库
CREATE DATABASE db1;
-- 如果不存在则创建
CREATE DATABASE IF NOT EXISTS db1;
-- 查看所有数据库
SHOW DATABASES;
-- 查看数据库创建语句
SHOW CREATE DATABASE db1;
-- 修改字符集
ALTER DATABASE db1 CHARACTER SET utf8;
-- 删除数据库
DROP DATABASE db1;

2. 操作表(Table)

-- 创建表
CREATE TABLE student (
  id           INT,
  name         VARCHAR(32),
  age          INT,
  score        DOUBLE(4,1),
  birthday     DATE,
  insert_time  TIMESTAMP
);
-- 查看表结构
DESC student;
-- 查看创建表语句
SHOW CREATE TABLE student;
-- 重命名表
ALTER TABLE student RENAME TO student_old;
-- 添加新列
ALTER TABLE student ADD email VARCHAR(64);
-- 删除列
ALTER TABLE student DROP COLUMN email;
-- 删除表
DROP TABLE student;
-- 如果存在则删除
DROP TABLE IF EXISTS student;

二、DML(Data Manipulation Language)数据操作语言

1. 插入数据(INSERT)

-- 全列插入
INSERT INTO student (id, name, age, score) VALUES (1, '张三', 20, 88.5);
-- 不列出列名,必须提供所有列值
INSERT INTO student VALUES (2, '李四', 22, 91.0, '2003-01-15', NOW());
-- 部分列插入
INSERT INTO student (name, age) VALUES ('王五', 19);

2. 删除数据(DELETE / TRUNCATE)

-- 删除满足条件的行
DELETE FROM student WHERE age < 18;
-- 删除全部数据(保留表结构)
DELETE FROM student;
-- 高效清空表(无法回滚)
TRUNCATE TABLE student;

3. 更新数据(UPDATE)

-- 更新所有行
UPDATE student SET score = score + 5;
-- 带条件更新
UPDATE student SET score = 100 WHERE name = '张三';

三、DQL(Data Query Language)数据查询语言

1. 基础关键字

-- 范围查询
SELECT * FROM student WHERE age BETWEEN 20 AND 30;
-- 集合查询
SELECT * FROM student WHERE age IN (18, 20, 22);
-- 非空查询
SELECT * FROM student WHERE score IS NOT NULL;
-- 模糊查询
SELECT * FROM student WHERE name LIKE '张%';
-- 去重
SELECT DISTINCT age FROM student;

2. 排序查询(ORDER BY)

-- 单列升序
SELECT * FROM student ORDER BY score;
-- 多列排序:先按 score 降序,再按 age 升序
SELECT * FROM student ORDER BY score DESC, age ASC;

3. 聚合函数(Aggregate)

SELECT
  COUNT(*)   AS total_students,
  AVG(score) AS avg_score,
  MAX(score) AS max_score,
  MIN(score) AS min_score,
  SUM(score) AS sum_score
FROM student;

4. 分组查询(GROUP BY / HAVING)

-- 按年龄分组,统计平均分
SELECT age, AVG(score) AS avg_score
  FROM student
 GROUP BY age;
-- 带 HAVING 过滤分组
SELECT age, COUNT(*) AS cnt
  FROM student
 GROUP BY age
HAVING cnt > 2;

5. 分页查询(LIMIT)

-- MySQL 方言:从第 0 条开始,取 5 条
SELECT * FROM student LIMIT 0, 5;
-- 通常用于 Web 分页:(page-1)*size, size

6. 内连接查询(INNER JOIN)

-- 隐式写法
SELECT e.name, d.dept_name
  FROM emp e, dept d
 WHERE e.dept_id = d.id;

-- 显式写法
SELECT e.name, d.dept_name
  FROM emp AS e
  JOIN dept AS d
    ON e.dept_id = d.id;

7. 外连接查询(LEFT / RIGHT JOIN)

-- 左外连接:保留左表所有记录
SELECT e.name, d.dept_name
  FROM emp AS e
  LEFT JOIN dept AS d
    ON e.dept_id = d.id;

-- 右外连接:保留右表所有记录
SELECT e.name, d.dept_name
  FROM emp AS e
  RIGHT JOIN dept AS d
    ON e.dept_id = d.id;

8. 子查询(Subquery)

-- 单行单列:查工资低于平均值的员工
SELECT * FROM emp
 WHERE salary < (SELECT AVG(salary) FROM emp);

-- 多行单列:查财务部和市场部员工
SELECT * FROM emp
 WHERE dept_id IN (
   SELECT id FROM dept WHERE name IN ('财务部','市场部')
 );

-- 多行多列:先过滤后连接
SELECT d.*, e.*
  FROM dept AS d
  JOIN (
    SELECT * FROM emp WHERE join_date > '2020-01-01'
  ) AS e
    ON d.id = e.dept_id;

四、DCL(Data Control Language)数据控制语言

1. 用户管理

-- 添加用户
CREATE USER 'alice'@'%' IDENTIFIED BY 'pwd123';
-- 删除用户
DROP USER 'alice'@'%';

2. 权限管理

-- 查询某用户权限
SHOW GRANTS FOR 'bob'@'%';

-- 授予权限(所有库所有表)
GRANT ALL PRIVILEGES ON *.* TO 'bob'@'%';

-- 指定库表权限
GRANT SELECT, INSERT ON mydb.student TO 'charlie'@'localhost';

-- 撤销权限
REVOKE INSERT ON mydb.student FROM 'charlie'@'localhost';

结语

通过本文对 DDL、DML、DQL 和 DCL 四大类 100+ 条常用 SQL 语句的系统梳理,希望能帮助你在日常开发、数据分析和面试准备中事半功倍。无论是表结构设计、数据增删改查,还是复杂的连接查询、子查询、权限管理,都能快速找到对应的“万能模板”,助你提升效率、规避低级错误。

⚡ 建议你在实际项目中反复练习,将这些语句融会贯通,并根据业务需求灵活组合、优化索引和执行计划。
🔗 更多实战案例与深度解析,请移步 ==> 全栈Bug解决方案专栏,持续关注,不断进阶!

祝你 SQL 路上越走越稳,早日拿到理想的 offer!

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐