-- 查询 状态不是 active 的用户,比如“冻结”、“注销”。
SELECT id, name
FROM users
WHERE status <> 'active';
(2) 范围限制 (BETWEEN)
语法
含义
示例
BETWEEN A AND B
范围(含边界)
WHERE age BETWEEN 20 AND 30
SELECT 字段1, 字段2, ……
FROM 表名
WHERE 字段 BETWEEN 最小值 AND 最大值;
e.g.
-- 找出 年龄在 20 到 30 岁之间(含边界) 的用户。
SELECT id, name, age
FROM users
WHERE age BETWEEN 20 AND 30;
(3) 集合判断 (IN / NOT IN)
语法
含义
示例
IN (值1, 值2, ...)
属于集合
WHERE city IN ('北京','上海')
NOT IN (值1, 值2, ...)
不属于集合
WHERE role NOT IN ('游客','游客2')
SELECT 字段1, 字段2, ……
FROM 表名
WHERE 字段 IN (值1, 值2, 值3);
e.g.
-- 查询 城市在北京或上海的用户。
SELECT id, name, city
FROM users
WHERE city IN ('北京', '上海');
-- 排除游客和未认证用户,只保留正式用户。
SELECT id, name
FROM users
WHERE role NOT IN ('游客', '未认证');
(4) 空值判断 (IS NULL / IS NOT NULL)
语法
含义
示例
IS NULL
字段为空
WHERE phone IS NULL
IS NOT NULL
字段不为空
WHERE email IS NOT NULL
SELECT 字段1, 字段2, ……
FROM 表名
WHERE 字段 IS [NOT] NULL;
e.g.
-- 找出未填写手机号的用户。
SELECT id, name
FROM users
WHERE phone IS NULL;
-- 筛选出填写了邮箱的用户,用于发送通知或身份校验。
SELECT id, name, email
FROM users
WHERE email IS NOT NULL;
-- 查询所有 名字以“张”开头 的用户,比如“张三”、“张小龙”、“张飞”。
SELECT id, name
FROM users
WHERE name LIKE '张%';
-- 查询所有 名字只有两个字,第二个字是“强” 的用户,比如“李强”、“王强”。
SELECT id, name
FROM users
WHERE name LIKE '_强';
(6) 多条件组合 (AND / OR / XOR)
AND:
1.所有条件必须都为 TRUE,结果才会返回;
2.逻辑上相当于“交集”;
3.可连续多次使用:a AND b AND c;
4.可结合括号:(a AND b) AND (c OR d)
SELECT 字段列表
FROM 表名
WHERE 条件1 AND 条件2;
e.g.
-- 查询所有年龄 ≥18 且 城市是“北京”的用户。
SELECT id, name, age
FROM users
WHERE age >= 18 AND city = '北京';
OR:
1.只要任意一个条件为 TRUE,就会返回;
2.逻辑上相当于“并集”;
3.多个 OR 条件建议加括号,避免优先级误判
SELECT 字段列表
FROM 表名
WHERE 条件1 OR 条件2;
e.g.
-- 查询所有城市是“北京”或“上海” 的用户。
SELECT id, name, age
FROM users
WHERE city = '北京' OR city = '上海';
-- 找出在北京或上海,且年龄 ≥ 25 岁 的用户。
SELECT id, name, age
FROM users
WHERE (city = '北京' OR city = '上海')
AND age >= 25;
XOR:
1.XOR 是“互斥或”;
2.适用于互斥条件判断;
SELECT 字段
FROM 表
WHERE 条件1 XOR 条件2;
e.g.
-- 只返回那些:年龄小于 30 的男性 或 年龄大于等于 30 的女性,仅满足其中一个条件时才返回,两个都满足或都不满足都不行。
SELECT id, name
FROM users
WHERE (age < 30) XOR (gender = 'female');
SELECT 字段1, 字段2
FROM 表名
[WHERE 条件]
ORDER BY 字段 [ASC|DESC];
其中,ORDER BY有两个参数:
ASC:升序(默认)→ 小到大、A-Z、旧到新
DESC:降序 → 大到小、Z-A、新到旧
e.g.
-- 查询用户列表,并按年龄从小到大排序显示。
SELECT id, name, age
FROM users
ORDER BY age ASC;
-- 查询用户列表,最新注册的用户排在最前面。
SELECT id, name, created_at
FROM users
ORDER BY created_at DESC;
-- 先按年龄升序排,如果年龄相同,再按成绩降序排。
SELECT id, name, age, score
FROM students
ORDER BY age ASC, score DESC;