SELECT是SQL语言中使用频率最高的语句,几乎所有数据操作都从它开始。在SQLite中,虽然它是一款轻量级的嵌入式数据库,但SELECT的功能并不打折,字段筛选、条件过滤、排序分页等常用能力一应俱全。掌握好SELECT的写法,是使用SQLite进行数据管理的第一步。这篇文章将从基础语法入手,逐步展开字段筛选的各种技巧,并配合可以实际运行的SQL示例,帮助你真正理解每一条语句背后的含义。

一、SELECT查询的基本语法结构
SELECT语句的核心作用是从表中提取数据,最基础的形态由两部分组成:要查哪些列,以及从哪张表查。最简单的写法是查询所有列,使用星号通配符即可。假设我们有一张存储用户信息的表,执行下面的语句会把每一行的所有字段都返回:
-- 查询 users 表的所有列和所有行 SELECT * FROM users;
这里的星号代表所有列。在日常调试时用它很方便,但在正式业务代码中并不推荐,原因有两个:第一,表结构变化时查询结果会跟着变,容易引发隐性错误;第二,如果表中包含大字段,全列查询会带来不必要的IO开销。明确写出需要的列名才是更稳妥的做法:
-- 只查询用户名和邮箱两列 SELECT username, email FROM users;
另外需要理解一条SELECT语句的逻辑执行顺序。虽然书写顺序是SELECT、FROM、WHERE、ORDER BY、LIMIT,但数据库实际处理时先定位表,再过滤行,然后才是筛选列、排序和截取。理解这个顺序对排查问题很有帮助,比如在WHERE中引用SELECT里定义的列别名,在某些数据库中会报错,正是因为过滤发生在列筛选之前。
二、字段筛选与列别名的实用技巧
字段筛选的核心在于按需取列。除了直接写列名,SQLite还支持用AS关键字为结果列指定别名,让输出更易读,也方便应用程序按别名读取字段。写法如下:
-- 给列起别名,输出结果的表头会显示别名
SELECT username AS 用户名,
email AS 邮箱,
created_at AS 注册时间
FROM users;如果查询的是表达式或函数计算结果,别名几乎是必需的。比如根据出生年份字段计算年龄,不加别名的话结果列名会显示整段表达式,可读性很差:
SELECT username,
(2024 - birth_year) AS age
FROM users;还有一种常见需求是去重。某个字段可能存在大量重复值,比如订单表中的客户ID,如果只想知道有哪些客户下过单,可以使用DISTINCT关键字。它作用于其后的所有列组合,也就是说写多个列时,只有这些列的值完全相同才会被判定为重复:
-- 只返回不重复的客户ID SELECT DISTINCT customer_id FROM orders; -- 组合去重:客户ID和商品ID都相同才算重复 SELECT DISTINCT customer_id, product_id FROM orders;
需要注意DISTINCT会带来额外的排序或哈希计算,数据量大时对性能有影响,如果业务上能保证数据本身不重复,就没必要加这个关键字。
三、条件过滤与结果控制
字段筛选解决的是取哪些列,WHERE子句解决的则是取哪些行。WHERE后面跟一个逻辑表达式,只有表达式为真的行才会进入结果集。常见用法包括比较运算、范围判断、集合匹配和模糊查询:
-- 查询年龄大于18且状态为活跃的用户
SELECT username, email
FROM users
WHERE age > 18 AND status = 'active';
-- 查询价格在100到500之间的商品,并限制返回10条
SELECT name, price
FROM products
WHERE price BETWEEN 100 AND 500
LIMIT 10;
-- 使用IN匹配一组值,用LIKE做模糊搜索
SELECT * FROM users
WHERE city IN ('北京', '上海', '广州')
AND username LIKE '张%';LIKE中的百分号匹配任意长度字符串,下划线匹配单个字符。如果希望大小写不敏感地匹配英文内容,需要配合SQLite的PRAGMA case_sensitive_like设置或使用lower函数处理。这一点和MySQL等数据库的默认行为不同,是初学者经常踩的坑。
排序和分页同样重要。ORDER BY指定排序依据的列,可以升序也可以降序;LIMIT限制返回行数,配合OFFSET可以实现分页查询。虽然OFFSET在超大表上性能一般,但小型应用中完全够用:
-- 按价格降序排列,跳过前20条,取10条,实现第三页数据 SELECT name, price FROM products ORDER BY price DESC LIMIT 10 OFFSET 20;
最后提醒两点:一是SQL中的字符串必须用单引号包裹,双引号在SQLite中默认表示标识符,混用可能出现奇怪的报错;二是空值的判断只能用IS NULL和IS NOT NULL,写成等号是查不出结果的。把这些细节掌握好,日常的字段筛选和数据查询基本就不会有问题了。
SQLite SELECT字段筛选SQL查询修改时间:2026-09-04 12:40:30