mysql中SELECT语句的基本语法与查询操作

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

SELECT 最简形式怎么写

不加任何修饰的

SELECT
语句只能用于常量或表达式,不能直接查表。比如
SELECT 1 + 1;
SELECT NOW();
是合法的;但
SELECT *;
单独执行会报错
ERROR 1096 (HY000): No tables used

真正查数据必须带

FROM
子句,哪怕只查一个表:

SELECT * FROM users;

常见错误是漏掉

FROM
,尤其在快速测试时容易手误。

WHERE 条件里字符串和数字怎么写才安全

MySQL 会隐式转换,但依赖它容易出问题。比如

WHERE id = '123'
看似没问题,但如果
id
BIGINT
类型,而传入超长字符串(如
'123abc'
),MySQL 可能截断后匹配,也可能报错,行为不稳定。

正确做法是类型严格对应:

数字字段用纯数字字面量:
WHERE age = 25
字符串字段用单引号包裹:
WHERE name = '张三'
避免用双引号,除非已设置
SQL_MODE
包含
ANSI_QUOTES
日期建议用标准格式字符串:
WHERE created_at >= '2024-01-01'
,不要用函数包裹条件(如
DATE(created_at) = '2024-01-01'
)以免索引失效

ORDER BY 和 LIMIT 的位置与性能影响

ORDER BY
必须在
WHERE
之后、
LIMIT
之前;
LIMIT
必须在最后。顺序写错会直接报语法错误。

性能上要注意:

ORDER BY
字段如果没有索引,大表排序会非常慢,可能触发
Using filesort
LIMIT 10
不代表只扫描 10 行——MySQL 仍需先找到所有满足
WHERE
的行,再排序取前 10
分页深翻(如
LIMIT 10000, 20
)效率低,应改用游标方式(基于上一页最大
id
查询)

SELECT 中的 NULL 和空字符串容易混淆的点

NULL
不等于空字符串
''
,也不等于数字
0
。用
=
判断
NULL
永远返回
NULL
(即 false),必须用
IS NULL
IS NOT NULL

实际查询中常见陷阱:

WHERE email = ''
查不到
NULL
邮箱,要分开写:
WHERE email = '' OR email IS NULL
COALESCE(email, '未知')
可以把
NULL
转成默认值,但对
''
无效
聚合函数如
COUNT(email)
会忽略
NULL
,但不会忽略
''

建表时就该明确字段是否允许

NULL
,避免业务逻辑里反复处理两种“空”状态。

相关推荐