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
语句。