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 条件,避免误操作全表
相关推荐
tjc199010052 小时前
bootstrap怎么实现响应式的文章瀑布流布局
jvm·数据库·python
qq_189807032 小时前
SQL嵌套查询与物化视图_提升读性能的组合策略
jvm·数据库·python
2401_832365522 小时前
如何用消息广播机制让 Shared Worker 通知所有连接的页面
jvm·数据库·python
u0109147602 小时前
如何用 bubbles 参数让自定义事件支持在 DOM 树中冒泡
jvm·数据库·python
克里斯蒂亚诺更新2 小时前
mysql添加一个用户
数据库·mysql
Greyson12 小时前
如何解决变异表报错_ORA-04091复合触发器COMPOUND应用
jvm·数据库·python
Absurd5872 小时前
PHP怎么实现SAML单点登录_PHP企业级SSO解决方案【指南】
jvm·数据库·python
JZC_xiaozhong2 小时前
连锁餐饮企业如何统一ERP、WMS、BOH多系统权限?一套可落地的IAM架构方案
大数据·数据库·架构·iam·企业数据安全·数据集成与应用集成·多系统权限管理
2301_796588502 小时前
PHP源码能否在无盘工作站运行_网络启动硬件要求【说明】
jvm·数据库·python