Linux个人心得25 (mysql⑤)

从这里开始,我们逐步讲解一些常用的语句,虽然前面可能已经偷偷使用了一些,也不妨碍我们这里系统讲解一遍。

一、WHERE 子句(条件过滤)

WHERE 用于限定查询、更新、删除操作的作用范围,是 SQL 最基础的筛选工具。

1. 基础等值匹配

sql

复制代码
-- 查询等级等于1的所有玩家
SELECT * FROM player WHERE level = 1;

2. 逻辑关键字(AND / OR / NOT)

优先级:NOT > AND > OR ,可使用括号 () 改变优先级。

sql

复制代码
-- 查询等级大于1且小于5,或者等级等于7的玩家
SELECT * FROM player WHERE level > 1 AND level < 5 OR level = 7;

-- 使用括号明确优先级
SELECT * FROM player WHERE (level > 1 AND level < 5) OR level = 7;

二、范围与集合查询

1. IN 关键字(匹配指定集合)

查询字段值属于某个列表内的数据。

sql

复制代码
-- 查询等级为 1、3、5 的玩家
SELECT * FROM player WHERE level IN (1, 3, 5);

2. BETWEEN AND(范围查询,闭区间)

查询字段值在指定范围内的数据,包含起始值和结束值

sql

复制代码
-- 查询等级在 1~10 之间的玩家
SELECT * FROM player WHERE level BETWEEN 1 AND 10;

三、模糊查询(LIKE / REGEXP)

1. LIKE 模糊匹配

  • %:匹配任意长度字符串(包含空字符串)
  • _:匹配单个任意字符(不能为空)

sql

复制代码
-- 查询以"王"开头的玩家(王大力、王五均可匹配)
SELECT * FROM player WHERE name LIKE '王%';

-- 查询以"王"开头且名字只有两个字的玩家(仅王五可匹配)
SELECT * FROM player WHERE name LIKE '王_';

2. REGEXP 正则表达式

支持更灵活的模糊匹配规则:

sql

复制代码
-- 查询名字中包含"王"的所有玩家
SELECT * FROM player WHERE name REGEXP '王';

常用正则通配符

  • .:任意单个字符
  • ^:以指定字符开头
  • $:以指定字符结尾
  • [abc]:匹配 a/b/c 中任意一个字符
  • [a-z]:匹配 a-z 任意一个小写字母
  • A|B:匹配 A 或者 B

四、NULL 值查询(重点易错点)

NULL 不等于任何值(包括自身),不能使用 = 判断

sql

复制代码
-- ✅ 正确:查询等级为空的玩家
SELECT * FROM player WHERE level IS NULL;

-- ✅ 正确:查询等级不为空的玩家
SELECT * FROM player WHERE level IS NOT NULL;

-- ✅ 特殊写法:安全等于 <=> 可判断 NULL
SELECT * FROM player WHERE level <=> NULL;

⚠ 注意:空字符串 '' 不等于 NULL


五、ORDER BY 排序

对查询结果进行升序(ASC)/ 降序(DESC) 排列,不写默认为升序。

sql

复制代码
-- 按等级升序排列
SELECT * FROM player ORDER BY level;

-- 按等级降序排列
SELECT * FROM player ORDER BY level DESC;

-- 多字段排序:等级降序 → 经验升序 → 名字降序
SELECT * FROM player ORDER BY level DESC, exp ASC, name DESC;

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

常用聚合函数:COUNTAVGMAXMINSUM

sql

复制代码
-- 统计玩家总数量
SELECT COUNT(*) FROM player;

-- 统计平均等级
SELECT AVG(level) FROM player;

-- 统计最高等级
SELECT MAX(level) FROM player;

-- 统计总经验
SELECT SUM(exp) FROM player;

七、GROUP BY 分组查询

对数据按指定字段分组,通常与聚合函数一起使用。

sql

复制代码
-- 按等级分组,统计每个等级的玩家人数
SELECT level, COUNT(level) FROM player GROUP BY level;

八、HAVING 分组后过滤

HAVING 用于分组后过滤结果 ,必须搭配 GROUP BY 使用。

sql

复制代码
-- 按等级分组,只显示人数大于4的等级
SELECT level, COUNT(level) 
FROM player 
GROUP BY level 
HAVING COUNT(level) > 4 
ORDER BY COUNT(level);

九、LIMIT 分页查询

限制查询结果返回的条数,常用于分页。

sql

复制代码
-- 只显示前3条数据
SELECT * FROM player LIMIT 3;

-- 分页:从第4条开始,取3条(LIMIT 偏移量, 条数)
SELECT * FROM player LIMIT 3, 3;

十、DISTINCT 去重查询

去除查询结果中的重复数据

sql

复制代码
-- 查询不重复的玩家名字
SELECT DISTINCT name FROM player;

十一、集合运算(多结果集合并 / 交集 / 差集)

1. UNION / UNION ALL(并集)

  • UNION:自动去重
  • UNION ALL:保留全部数据(效率更高)

sql

复制代码
-- 合并两个查询结果(自动去重)
SELECT * FROM player WHERE level BETWEEN 1 AND 3
UNION
SELECT * FROM player WHERE exp BETWEEN 1 AND 3;

-- 合并结果(不去重)
SELECT * FROM player WHERE level BETWEEN 1 AND 3
UNION ALL
SELECT * FROM player WHERE exp BETWEEN 1 AND 3;

2. INTERSECT(交集)

查询同时满足两个条件的数据。

sql

复制代码
SELECT * FROM player WHERE level BETWEEN 1 AND 3
INTERSECT
SELECT * FROM player WHERE exp BETWEEN 1 AND 3;

3. EXCEPT(差集)

查询只满足第一个条件、不满足第二个条件的数据。

sql

复制代码
SELECT * FROM player WHERE level BETWEEN 1 AND 3
EXCEPT
SELECT * FROM player WHERE exp BETWEEN 1 AND 3;

十二、综合练习(实战常用)

练习 1:姓名模糊查询

sql

复制代码
-- 查询名字以"宫本"开头的玩家
SELECT * FROM player WHERE name LIKE '宫本%';

-- 查询名字以"山"结尾的玩家
SELECT * FROM player WHERE name LIKE '%山';

练习 2:按姓氏统计人数

sql

复制代码
-- 按姓氏分组 → 统计人数 → 只显示人数>5 → 按人数降序 → 取前3名
SELECT 
  SUBSTR(name, 1, 1) AS surname, 
  COUNT(*) AS count 
FROM player 
GROUP BY surname 
HAVING COUNT(*) > 5 
ORDER BY count DESC 
LIMIT 3;

十三、SQL 语法执行顺序

编写复杂查询时,必须遵循执行顺序:

  1. FROM
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. SELECT
  6. DISTINCT
  7. ORDER BY
  8. LIMIT
相关推荐
菜_小_白2 小时前
RTP协议收发组件开发
linux·网络·c++
航Hang*2 小时前
Windows Server 配置与管理——第11章:配置虚拟专用网络服务器
运维·服务器·windows
Deitymoon2 小时前
linux——UDP编程
linux·网络·udp
Amelio_Ming2 小时前
linux内存管理-页面回收之内核线程 kswapd (二)
linux·服务器
琪伦的工具库2 小时前
批量PDF文件加密工具使用说明:固定密码或随机密码批量加密PDF,权限控制+导出密码记录
运维·服务器·pdf
Dream of maid2 小时前
Mysql(2)DML
android·数据库·mysql
菜程序2 小时前
2026年MySQL安装教程(超详细)
数据库·mysql
忙什么果2 小时前
海洋遥感论文中常说的:in-situ数据和proxy
linux·运维·服务器
fly spider2 小时前
MySQL执行流程详解
数据库·mysql