本章详细介绍了 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
该语句选择四行,跳过前两行。
LIMIT
之后的OFFSET
子句指定在结果集的开头要跳过多少行。 这是上一个解决方案的替代方案。
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 为 2040 订购了 440 或 Smith 的商品。
使用聚合函数时,不能使用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 个单位的客户。