MySQL常用查询语句

一、基础查询(核心必用)

1. 查询指定列

sql 复制代码
-- 查询姓名、年龄
SELECT name, age FROM user;

2. 查询所有列

sql 复制代码
SELECT * FROM user;

3. 去重查询(DISTINCT)

sql 复制代码
-- 查询所有不重复的年龄
SELECT DISTINCT age FROM user;

4. 列 / 表别名(AS,可省略)

sql 复制代码
-- 列别名:简化结果展示
SELECT name AS 姓名, salary 工资 FROM user;
-- 表别名:联表时必备
SELECT u.name FROM user u;

二、条件查询(WHERE 筛选数据)

WHERE 用于过滤行,在分组前执行

1. 基础比较运算符

sql 复制代码
-- 等于=、大于>、小于<、不等于!=/<>
SELECT * FROM user WHERE age > 18;
SELECT * FROM user WHERE gender != '男';

2. 范围查询

sql 复制代码
-- BETWEEN 起始值 AND 结束值(包含边界)
SELECT * FROM user WHERE salary BETWEEN 5000 AND 10000;

3. 枚举匹配

sql 复制代码
-- IN(值1,值2):匹配多个固定值
SELECT * FROM user WHERE dept_id IN (1,2,3);

4. 空值判断

sql 复制代码
-- 空值:IS NULL;非空:IS NOT NULL
SELECT * FROM user WHERE dept_id IS NULL;

5. 逻辑运算符

sql 复制代码
-- AND(且)、OR(或)、NOT(非)
SELECT * FROM user WHERE age > 18 AND gender = '男';

三、模糊查询(LIKE,字符串匹配)

通配符:

  • %:匹配任意长度字符(包含 0 个)
  • _:匹配1 个任意字符
sql 复制代码
-- 1. 查询姓"张"的用户
SELECT * FROM user WHERE name LIKE '张%';
-- 2. 查询名字包含"明"的用户
SELECT * FROM user WHERE name LIKE '%明%';
-- 3. 查询名字为2个字的用户
SELECT * FROM user WHERE name LIKE '__';

四、排序查询(ORDER BY)

  • ASC:升序(默认,可省略)
  • DESC:降序
sql 复制代码
-- 按工资降序,年龄升序
SELECT * FROM user ORDER BY salary DESC, age ASC;

五、分页查询(LIMIT,分页必备)

语法LIMIT 起始索引, 每页条数👉 MySQL 起始索引从 0 开始

sql 复制代码
-- 查询第1页,每页10条数据
SELECT * FROM user LIMIT 0,10;
-- 查询第2页
SELECT * FROM user LIMIT 10,10;

六、聚合函数(统计数据)

常用:COUNT/SUM/AVG/MAX/MIN

sql 复制代码
-- 统计总人数
SELECT COUNT(*) FROM user;
-- 统计平均工资
SELECT AVG(salary) FROM user;
-- 统计最高工资
SELECT MAX(salary) FROM user;
-- 统计工资总和
SELECT SUM(salary) FROM user;

七、分组查询(GROUP BY + HAVING)

  • GROUP BY:按指定列分组
  • HAVING过滤分组后的数据(必须配合 GROUP BY 使用)
sql 复制代码
-- 按部门分组,统计每个部门的人数
SELECT dept_id, COUNT(*) AS 人数 
FROM user 
GROUP BY dept_id;

-- 统计人数>5的部门(HAVING过滤分组)
SELECT dept_id, COUNT(*) AS 人数 
FROM user 
GROUP BY dept_id 
HAVING COUNT(*) > 5;

八、多表联查(高频核心)

1. 内连接(INNER JOIN)

查询两张表的交集数据(匹配不上的数据不显示)

sql 复制代码
-- 查询用户+所属部门名称
SELECT u.name, d.dept_name 
FROM user u
INNER JOIN dept d ON u.dept_id = d.id;

2. 左连接(LEFT JOIN)

左表数据全部显示,右表匹配不到则为 NULL(最常用)

sql 复制代码
-- 所有用户都显示,无部门的用户部门名为NULL
SELECT u.name, d.dept_name 
FROM user u
LEFT JOIN dept d ON u.dept_id = d.id;

3. 右连接(RIGHT JOIN)

右表数据全部显示,左表匹配不到则为 NULL

sql 复制代码
SELECT u.name, d.dept_name 
FROM user u
RIGHT JOIN dept d ON u.dept_id = d.id;

九、子查询(嵌套查询)

将一个查询结果作为另一个查询的条件 / 数据源

sql 复制代码
-- 1. 标量子查询(返回单个值):查询"技术部"的所有员工
SELECT * FROM user 
WHERE dept_id = (SELECT id FROM dept WHERE dept_name = '技术部');

-- 2. 列子查询(返回一列):查询在1、2部门的员工
SELECT * FROM user 
WHERE dept_id IN (SELECT id FROM dept WHERE id IN (1,2));

十、配套常用:增 / 删 / 改语句

1. 插入数据(INSERT)

sql 复制代码
-- 插入单条
INSERT INTO user(name, age) VALUES ('张三', 20);
-- 插入多条
INSERT INTO user(name, age) VALUES ('李四',21),('王五',22);

2. 更新数据(UPDATE)

⚠️ 必须加 WHERE 条件,否则会更新全表!

sql 复制代码
UPDATE user SET salary = 8000 WHERE id = 1;

3. 删除数据(DELETE)

⚠️ 必须加 WHERE 条件,否则会删除全表数据!

sql 复制代码
DELETE FROM user WHERE id = 1;

十一、高频实用函数

1. 空值处理(IFNULL)

sql 复制代码
-- 工资为NULL时,显示0
SELECT name, IFNULL(salary, 0) FROM user;

2. 字符串拼接(CONCAT)

sql 复制代码
SELECT CONCAT(name, '-', age) AS 信息 FROM user;

3. 日期格式化(DATE_FORMAT)

sql 复制代码
-- 格式化创建时间:2025-01-01
SELECT DATE_FORMAT(create_time, '%Y-%m-%d') FROM user;

4. 获取当前时间

sql 复制代码
SELECT NOW(); -- 年月日时分秒
SELECT CURDATE(); -- 年月日

总结

  1. 基础流程SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY → LIMIT
  2. 高频优先级:条件查询 > 排序分页 > 分组统计 > 左连接联查
  3. 安全提醒UPDATE/DELETE 必须加 WHERE 条件,避免误操作全表
相关推荐
范什么特西8 分钟前
redis题目面渣重点
数据库·redis·缓存
TDengine (老段)1 小时前
TDengine taosAdapter — 多协议网关详解
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
Nturmoils1 小时前
SQL Server 迁移到 KingbaseES:一次复杂 BI 查询的性能实测
数据库
蒲公英eric1 小时前
从布尔盲注到参数化查询:DVWA SQL 盲注模块完整漏洞分析教程
sql·web安全·ai·dvwa·ai安全·sql 盲注
今天AI了吗2 小时前
MCP 协议打通 AI 与国产数据库,SQL 调优全流程一站式闭环
数据库·人工智能·sql
灯澜忆梦2 小时前
【MySQL11】进阶篇 | 索引_#3使用规则
数据库·sql·mysql·性能优化
名字还没想好☜2 小时前
Go 的 sync.Cond 实战:用条件变量做等待/通知,比忙轮询省 CPU
开发语言·数据库·后端·golang·go
wWYy.3 小时前
Mysql:有哪些锁?
数据库·mysql
李可以量化3 小时前
Tornado 从了解到精通(一)下:异步与非阻塞 IO 核心原理
java·数据库·tornado
云技纵横3 小时前
线上接口突然超时,怎么判断卡在 Nginx、线程池、连接池还是 SQL?
后端·sql·mysql