mysql如何写select语句_mysql基本查询操作讲解

来源:这里教程网 时间:2026-02-28 20:46:07 作者:

SELECT 语句最简写法是什么?

能跑起来的最小

SELECT
语句就是:
SELECT * FROM table_name;
。它不加条件、不排序、不去重,只做最基础的数据拉取。但实际中几乎没人这么用——
*
带来性能隐患,字段不可控,还容易因表结构变更导致应用报错。

推荐起步写法:

SELECT id, name, created_at FROM users;
。明确列出需要的字段,既提升查询效率,也增强可维护性。

WHERE 条件里 NULL 怎么判断?

直接写

WHERE status = NULL
是无效的,MySQL 中
NULL
不参与任何等值比较,结果恒为
UNKNOWN
,被当作假值过滤掉。

必须用专门的空值判断语法:

WHERE status IS NULL
(判断为空)
WHERE status IS NOT NULL
(判断非空)
别用
=
!=
NULL
比较

常见翻车点:前端传参时把空字符串

''
NULL
混为一谈,后端没做区分,查不到数据还找不到原因。

ORDER BY 和 LIMIT 的顺序不能错

ORDER BY
必须在
LIMIT
之前,否则会报语法错误。MySQL 不支持
LIMIT 10 ORDER BY created_at DESC
这种倒置写法。

正确顺序是:

SELECT * FROM logs ORDER BY created_at DESC LIMIT 10;

注意两点:

LIMIT
在分页场景下要配合
OFFSET
,但大偏移量(如
LIMIT 100000, 20
)性能极差,应改用游标分页或延迟关联
ORDER BY
字段如果没有索引,会导致 filesort,查得越慢

GROUP BY 后 SELECT 的字段有限制

开启 SQL 标准模式(

sql_mode=STRICT_TRANS_TABLES,ONLY_FULL_GROUP_BY
)后,
SELECT
列表里所有非聚合字段都必须出现在
GROUP BY
子句中。

比如这个会报错:

SELECT user_id, name, COUNT(*) FROM orders GROUP BY user_id;
—— 因为
name
没参与分组,也没套聚合函数。

解决办法只有三个:

name
加进
GROUP BY
(适合真正按多字段分组)
用聚合函数包裹,如
MAX(name)
ANY_VALUE(name)
(MySQL 5.7+ 支持)
关掉
ONLY_FULL_GROUP_BY
(不推荐,掩盖逻辑问题)

最容易被忽略的是:开发本地关了严格模式,上线后突然报错,连带整个接口崩掉。

相关推荐