SQLite SELECT 语句
最后修改于 2020 年 7 月 6 日
SQLite 教程的这一部分详细介绍了 SQLite 对 SELECT 语句的实现。
SQLite 检索所有数据
以下 SQL 语句是最常见的语句之一。它也是最昂贵的语句之一。
sqlite> SELECT * FROM Cars; Id Name Price ---------- ---------- ---------- 1 Audi 52642 2 Mercedes 57127 3 Skoda 9000 4 Volvo 29000 5 Bentley 350000 6 Citroen 21000 7 Hummer 41400 8 Volkswagen 21600
在这里,我们从 Cars 表中检索所有数据。
SQLite 选择特定列
我们可以使用 SELECT 语句来检索特定的列。列名紧跟在 SELECT 之后。
sqlite> SELECT Name, Price FROM Cars; Name Price ---------- ---------- Audi 52642 Mercedes 57127 Skoda 9000 Volvo 29000 Bentley 350000 Citroen 21000 Hummer 41400 Volkswagen 21600
我们检索 Name 和 Price 列。列名之间用逗号分隔。
SQLite 重命名列名
我们可以重命名返回结果集的列名。为此,我们使用 AS 子句。
sqlite> SELECT Name, Price AS 'Price of car' FROM Cars; Name Price of car ---------- ------------ Audi 52642 Mercedes 57127 Skoda 9000 Volvo 29000 Bentley 350000 Citroen 21000 Hummer 41400 Volkswagen 21600
使用上面的 SQL 语句,我们将 Price 列重命名为 Price of car。
SQLite 限制数据输出
如上所述,处理大量数据时,检索所有数据是昂贵的。我们可以使用 LIMIT 子句来限制语句返回的数据量。
sqlite> SELECT * FROM Cars LIMIT 4; Id Name Price ---------- ---------- ---------- 1 Audi 52642 2 Mercedes 57127 3 Skoda 9000 4 Volvo 29000
LIMIT 子句将返回的行数限制为 4。
sqlite> SELECT * FROM Cars LIMIT 2, 4; Id Name Price ---------- ---------- ---------- 3 Skoda 9000 4 Volvo 29000 5 Bentley 350000 6 Citroen 21000
此语句选择四行,跳过前两行。
OFFSET 子句跟随 LIMIT,指定在结果集开头跳过多少行。这是前一个的替代解决方案。
sqlite> SELECT * FROM Cars LIMIT 4 OFFSET 2; Id Name Price ---------- ---------- ---------- 3 Skoda 9000 4 Volvo 29000 5 Bentley 350000 6 Citroen 21000
在这里,我们选择最多四行的数据,并从第三行开始。OFFSET 子句跳过前两行。
SQLite 排序数据
我们使用 ORDER BY 子句对返回的数据集进行排序。ORDER BY 子句后面是我们要排序的列。ASC 关键字按升序对数据进行排序,DESC 关键字按降序排序。
sqlite> SELECT * FROM Cars ORDER BY Price; Id Name Price ---------- ---------- ---------- 3 Skoda 9000 6 Citroen 21000 8 Volkswagen 21600 4 Volvo 29000 7 Hummer 41400 1 Audi 52642 2 Mercedes 57127 5 Bentley 350000
默认排序为升序。ASC 子句可以省略。
sqlite> SELECT Name, Price FROM Cars ORDER BY Price DESC; Name Price ---------- ---------- Bentley 350000 Mercedes 57127 Audi 52642 Hummer 41400 Volvo 29000 Volkswagen 21600 Citroen 21000 Skoda 9000
在上面的 SQL 语句中,我们从 Cars 表中选择 Name 和 Price 列,并按汽车的 Price 降序排序。因此,最贵的汽车排在前面。
SQLite 按更多列排序数据
可以按多个列对数据进行排序。
sqlite> INSERT INTO Cars(Name, Price) VALUES('Fiat', 9000);
sqlite> INSERT INTO Cars(Name, Price) VALUES('Tatra', 9000);
对于此示例,我们添加了两辆价格为 9000 的额外汽车。
sqlite> SELECT * FROM Cars ORDER BY Price, Name DESC; Id Name Price ---------- ---------- ---------- 10 Tatra 9000 3 Skoda 9000 9 Fiat 9000 6 Citroen 21000 8 Volkswagen 21600 4 Volvo 29000 7 Hummer 41400 1 Audi 52642 2 Mercedes 57127 5 Bentley 350000
在该语句中,我们按两列排序数据:价格和名称。名称按降序排序。
SQLite 使用 WHERE 选择特定行
下一组示例使用 Orders 表。
sqlite> SELECT * FROM Orders; Id OrderPrice Customer ---------- ---------- ---------- 1 1200 Williamson 2 200 Robertson 3 40 Robertson 4 1640 Smith 5 100 Robertson 6 50 Williamson 7 150 Smith 8 250 Smith 9 840 Brown 10 440 Black 11 20 Brown
在这里,我们看到来自 Orders 表的所有数据。
接下来,我们要选择一个特定的行。
sqlite> SELECT * FROM Orders WHERE Id=6; Id OrderPrice Customer ---------- ---------- ---------- 6 50 Williamson
上面的 SQL 语句选择 ID 为 6 的行。
sqlite> SELECT * FROM Orders WHERE Customer="Smith"; Id OrderPrice Customer ---------- ---------- ---------- 4 1640 Smith 7 150 Smith 8 250 Smith
上面的 SQL 语句选择来自 Smith 客户的所有订单。
我们可以使用 LIKE 子句在数据中查找特定的模式。
sqlite> SELECT * FROM Orders WHERE Customer LIKE 'B%'; Id OrderPrice Customer ---------- ---------- ---------- 9 840 Brown 10 440 Black 11 20 Brown
此 SQL 语句选择所有名称以字母 B 开头的客户的订单。
SQLite 删除重复项
DISTINCT 子句用于仅从结果集中选择唯一的项目。
sqlite> SELECT Customer FROM Orders WHERE Customer LIKE 'B%'; Customer ---------- Brown Black Brown
这次我们选择了名称以 B 开头的客户。我们可以看到 Brown 出现了两次。要删除重复项,我们使用 DISTINCT 关键字。
sqlite> SELECT DISTINCT Customer FROM Orders WHERE Customer LIKE 'B%'; Customer ---------- Black Brown
这是正确的解决方案。
SQLite 分组数据
GROUP BY 子句用于将具有相同值的数据库记录合并为单个记录。它通常与聚合函数一起使用。
假设我们想找出每个客户的订单总额。
sqlite> SELECT sum(OrderPrice) AS Total, Customer FROM Orders GROUP BY Customer; Total Customer ---------- ---------- 440 Black 860 Brown 340 Robertson 2040 Smith 1250 Williamson
sum 函数返回数值列的总和。GROUP BY 子句将总和分配给客户。因此,我们可以看到 Black 订购了价值 440 的商品,或者 Smith 订购了价值 2040 的商品。
使用聚合函数时,我们不能使用 WHERE 子句。我们使用 HAVING 子句代替。
sqlite> SELECT sum(OrderPrice) AS Total, Customer FROM Orders
GROUP BY Customer HAVING sum(OrderPrice)>1000;
Total Customer
---------- ----------
2040 Smith
1250 Williamson
上面的 SQL 语句选择总订单超过 1000 单位的客户。
在本部分 SQLite 教程中,我们更详细地描述了 SQL SELECT 语句。