MySQL-单表查询
一、简单查询
目标:使用 SELECT
进行基础数据查询。
语法:
-- 查询所有列
SELECT * FROM 表名;-- 查询指定列
SELECT 字段1, 字段2 FROM 表名;-- 起别名(避免使用关键字)
SELECT 字段 AS 别名 FROM 表名;
SELECT 字段 AS `别名` FROM 表名; -- 别名与关键字冲突时用反引号-- 去重查询
SELECT DISTINCT 字段 FROM 表名;
示例(基于 products
表):
-- 1. 获取所有商品的全部信息
SELECT * FROM products;-- 2. 获取商品名称和价格
SELECT name, price FROM products;
二、条件查询
目标:通过 WHERE
筛选满足条件的数据。
运算符:
类型 | 运算符 | 说明 |
---|---|---|
比较运算符 |
| 值比较( |
逻辑运算符 |
| 多条件组合 |
范围查询 |
| 连续范围(含边界) |
| 离散值匹配 | |
模糊查询 |
|
|
空值判断 |
| 不可用 |
示例:
-- 1. 查询自营商品(is_self=1)且价格>2000
SELECT * FROM products WHERE is_self = 1 AND price > 2000;-- 2. 价格在999-4199之间(含边界)
SELECT * FROM products WHERE price BETWEEN 999 AND 4199;-- 3. 商品名以"华为"开头
SELECT * FROM products WHERE name LIKE '华为%';-- 4. 查询未评分的商品(rating为空)
SELECT * FROM products WHERE rating IS NULL;
三、排序查询
目标:使用 ORDER BY
对结果排序。
语法:
SELECT ... ORDER BY 字段1 [ASC|DESC], 字段2 [ASC|DESC];
-- 默认升序(ASC可省略),多列排序时前列值相同按后列排序
示例:
-- 1. 价格从高到低排序
SELECT * FROM products ORDER BY price DESC;-- 2. 先按是否自营排序,再按价格升序
SELECT * FROM products ORDER BY is_self, price ASC;-- 3. 价格>2000的商品按价格降序
SELECT * FROM products WHERE price > 2000 ORDER BY price DESC;
四、聚合函数
目标:对列数据进行统计计算(忽略 NULL
值)。
常用函数:
函数 | 作用 | 示例 |
---|---|---|
| 统计行数 |
|
| 最大值 |
|
| 最小值 |
|
| 求和 |
|
| 平均值 |
|
示例:
-- 1. 统计商品均价
SELECT AVG(price) FROM products;-- 2. 统计自营商品数量
SELECT COUNT(*) FROM products WHERE is_self = 1;
五、分组查询
目标:通过 GROUP BY
分组后聚合统计。
语法:
SELECT 分组字段, 聚合函数(字段)
FROM 表名
GROUP BY 分组字段;
SELECT 分组字段, 聚合函数(字段) FROM 表名 GROUP BY 分组字段;
注意:
SELECT
后只能出现 分组字段 或 聚合函数统计的字段。支持多列分组:
GROUP BY 字段1, 字段2
。
HAVING过滤:
对分组后的结果筛选(WHERE
在分组前过滤,HAVING
在分组后过滤)。
SELECT category_id, AVG(price)
FROM products
GROUP BY category_id
HAVING AVG(price) < 1000; -- 筛选平均价<1000的分类
示例:
-- 统计每个分类的自营/非自营商品平均价格
SELECT category_id, is_self, AVG(price)
FROM products
GROUP BY category_id, is_self;
六、LIMIT查询
目标:限制查询结果的行数(常用于分页)。
语法:
SELECT ... LIMIT M, N; -- 从第M+1行开始,取N条数据(M从0开始)
SELECT ... LIMIT N; -- 等效于 LIMIT 0, N
分页公式:
第 K
页,每页 N
条:LIMIT (K-1)*N, N
示例:
-- 1. 获取价格第二高的商品
SELECT * FROM products ORDER BY price DESC LIMIT 1, 1;-- 2. 自营商品评分最高的商品
SELECT * FROM products WHERE is_self = 1 ORDER BY rating DESC LIMIT 1;-- 3. 按价格升序分页(第2页,每页3条)
SELECT * FROM products ORDER BY price ASC LIMIT 3, 3;
七、SQL语句执行顺序
核心顺序:
1. FROM -- 确定数据来源
2. WHERE -- 行级过滤
3. GROUP BY -- 分组
4. 聚合函数 -- 对每组计算
5. HAVING -- 组级过滤
6. SELECT -- 选择输出列
7. DISTINCT -- 去重
8. ORDER BY -- 排序
9. LIMIT -- 限制行数
易错点:
分组后
SELECT
非分组字段会报错(如SELECT is_self
未在GROUP BY
或聚合函数中)。WHERE
不可用聚合函数(如WHERE AVG(price) > 1000
错误)。