MySQL 基础篇 · SELECT 查询大

文章目录

概述

[1.1 最简单的查询](#1.1 最简单的查询)

[1.2 条件筛选 WHERE](#1.2 条件筛选 WHERE)

[1.3 去重 DISTINCT](#1.3 去重 DISTINCT)

[1.4 排序 ORDER BY](#1.4 排序 ORDER BY)

[1.5 限制行数 LIMIT](#1.5 限制行数 LIMIT)

[1.6 聚合函数](#1.6 聚合函数)

[1.7 分组 GROUP BY](#1.7 分组 GROUP BY)

[1.8 分组后筛选 HAVING](#1.8 分组后筛选 HAVING)

[🏁 收工](#🏁 收工)


概述

上回我们讲了外键和约束------数据能存得规矩了。但存进去不是目的,怎么查出来才是每天都要干的事。

SELECT 是 MySQL 里最常用的语句,没有之一。你可能一天写八遍 SELECT * FROM xxx,但它远不止"全查"这么简单。

今天把 SELECT 的所有常用方法捋一遍------条件筛选、排序、分组,全盘托出。搞懂这些,你基本上能应付 90% 的查询需求。

1.1 最简单的查询

sql

复制代码
-- 全查(小心用,数据量大时别这么干)
SELECT * FROM users;

-- 只查指定列
SELECT name, age FROM users;

-- 给列起别名(AS 可以省略)
SELECT name AS 姓名, age AS 年龄 FROM users;

1.2 条件筛选 WHERE

sql

复制代码
-- 等值条件
SELECT * FROM users WHERE age = 25;

-- 不等值
SELECT * FROM users WHERE age > 25;
SELECT * FROM users WHERE age BETWEEN 20 AND 30;

-- 模糊匹配(LIKE)
SELECT * FROM users WHERE name LIKE '张%';    -- 张开头
SELECT * FROM users WHERE name LIKE '%三%';   -- 包含三

-- 空值判断(NULL 不能用 =,得用 IS)
SELECT * FROM users WHERE email IS NULL;
SELECT * FROM users WHERE email IS NOT NULL;

-- 多条件组合(AND / OR)
SELECT * FROM users WHERE age > 20 AND city = '北京';
SELECT * FROM users WHERE city = '北京' OR city = '上海';

-- 集合匹配(IN)
SELECT * FROM users WHERE city IN ('北京', '上海', '深圳');

-- 排除(NOT IN)
SELECT * FROM users WHERE city NOT IN ('北京', '上海');

1.3 去重 DISTINCT

sql

复制代码
-- 查看所有不重复的城市
SELECT DISTINCT city FROM users;

-- 多列组合去重
SELECT DISTINCT city, age FROM users;

1.4 排序 ORDER BY

sql

复制代码
-- 升序(ASC 默认,可以省略)
SELECT * FROM users ORDER BY age ASC;

-- 降序
SELECT * FROM users ORDER BY age DESC;

-- 多列排序(先按 age 排,再按 name 排)
SELECT * FROM users ORDER BY age DESC, name ASC;

1.5 限制行数 LIMIT

sql

复制代码
-- 只取前 5 条
SELECT * FROM users LIMIT 5;

-- 分页:跳过 10 条,取 5 条(第 3 页,每页 5 条)
SELECT * FROM users LIMIT 10, 5;
-- 或者写成 OFFSET 形式
SELECT * FROM users LIMIT 5 OFFSET 10;

1.6 聚合函数

函数 作用
COUNT() 统计行数
SUM() 求和
AVG() 求平均
MAX() 求最大值
MIN() 求最小值

sql

复制代码
SELECT 
    COUNT(*) AS 总人数,
    AVG(age) AS 平均年龄,
    MAX(age) AS 最大年龄,
    MIN(age) AS 最小年龄
FROM users;

1.7 分组 GROUP BY

sql

复制代码
-- 按城市分组,统计每个城市的人数
SELECT city, COUNT(*) AS 人数
FROM users
GROUP BY city;

-- 按城市分组,计算每个城市的平均年龄
SELECT city, AVG(age) AS 平均年龄
FROM users
GROUP BY city;

1.8 分组后筛选 HAVING

WHERE 是分组前筛选,HAVING 是分组后筛选。顺序不能乱。

sql

复制代码
-- 找出平均年龄大于 25 的城市
SELECT city, AVG(age) AS 平均年龄
FROM users
GROUP BY city
HAVING AVG(age) > 25;

-- 找出人数大于 5 的城市
SELECT city, COUNT(*) AS 人数
FROM users
GROUP BY city
HAVING COUNT(*) > 5;

⚠️ WHERE 和 HAVING 的区别:WHERE 管"哪些行参与分组",HAVING 管"哪些组留下来"。顺序是 WHERE → GROUP BY → HAVING → ORDER BY → LIMIT,写错了会报错


🏁 收工

今天把 SELECT 的所有常用方法过了一遍:

基础查询 :WHERE、LIKE、IN、ORDER BY、LIMIT

分组聚合 :GROUP BY、HAVING、COUNT、SUM、AVG

相关推荐
Data-Miner1 小时前
离线AI制表:模型适配与脚本固化实操
大数据·数据库·人工智能·excel
xixiaoyunya1 小时前
数据库三种备份方式怎么组合?从原理到落地的完整方案
数据库
2501_933670791 小时前
2027届数学与应用数学转经营分析:SQL、财务指标与业务指标补齐路线
数据库·sql·数学建模
我科绝伦(Huanhuan Zhou)1 小时前
oracle坏块导致备份不了
数据库·oracle·ffmpeg
IT大白鼠1 小时前
图数据库系列 · 第 08 篇——面试收官:高频题与全景总结
数据库·面试·职场和发展·nosql·图数据库
xixiaoyunya2 小时前
定时备份数据库怎么规划周期?一套“少打扰业务、真能恢复“的策略
数据库
liangshanbo12152 小时前
主系统登录后,子系统怎么实现自动登录?
java·网络·数据库
许彰午2 小时前
05-静默安装常见报错与解决
数据库
害人终害己2 小时前
redis修改密码的地方在哪里
数据库·redis·缓存
rannn_1112 小时前
【Java面试题】高频面试题1|Java 后端、MySQL、Redis 与 RAG 面试整理
java·jvm·数据库·后端·面试