Skip to content

SQLite - SELECT 查询

SELECT 语句是用于从 SQLite 数据库中检索数据的基石。它以表格形式(称为“结果集” result set)返回数据。

SELECT 语句最基本的形式是从单个表中检索特定列。

SELECT column1, column2, ... FROM table_name;

要检索所有列,您可以使用通配符 *。虽然这对于探索很方便,但在应用程序中,最佳实践是只指定您需要的列。

SELECT * FROM table_name;

您可以使用各种子句来细化结果:

  • WHERE:根据特定条件过滤记录。
  • ORDER BY:以升序(ASC)或降序(DESC)对结果集进行排序。
  • LIMIT:限制返回的行数。对于分页(pagination)很有用。
  • OFFSET:在开始返回行之前跳过指定数量的行。

假设我们的 EMPLOYEES 表有以下数据:

id | first_name | last_name | age | address | salary
---|------------|-----------|-----|------------|---------
1 | Paul | Smith | 32 | California | 95000.0
2 | Allen | Jones | 25 | Texas | 75000.0
3 | Teddy | Williams | 23 | Norway | 50000.0
4 | Mark | Brown | 25 | Richmond | 85000.0
5 | David | Miller | 27 | Texas | 120000.0

要获取所有员工的名字、姓氏和薪水,并按薪水降序排序:

sqlite> SELECT first_name, last_name, salary
...> FROM EMPLOYEES
...> ORDER BY salary DESC;

这将产生以下结果:

first_name | last_name | salary
-----------|-----------|---------
David | Miller | 120000.0
Paul | Smith | 95000.0
Mark | Brown | 85000.0
Allen | Jones | 75000.0
Teddy | Williams | 50000.0

现在,让我们选择年龄为 25 岁且居住在德克萨斯州(Texas)的员工,并将结果限制为一条记录:

sqlite> SELECT * FROM EMPLOYEES
...> WHERE age = 25 AND address = 'Texas'
...> LIMIT 1;

此查询将只返回 Allen Jones 的记录。

SQLite 命令行界面提供了一些有用的“点命令”(dot-commands)来格式化输出。这些命令本身不是 SQL 语言的一部分。

sqlite> .headers on -- 显示列标题
sqlite> .mode column -- 以列模式显示结果
sqlite> .width 10 10 8 -- 设置列宽以更好地对齐

使用这些设置再次运行第一个查询,将生成一个整齐格式化的表格。

要查看数据库的结构,您可以查询 sqlite_schema 表。这是检查模式对象(schema objects)的现代标准方法。

-- 列出数据库中的所有表
sqlite> SELECT name FROM sqlite_schema WHERE type = 'table';
name
----------
DEPARTMENTS
EMPLOYEES

您可以检索任何对象的原始 CREATE 语句。

sqlite> SELECT sql FROM sqlite_schema WHERE type = 'table' AND name = 'EMPLOYEES';