原文: http://zetcode.com/db/sqlite/select/

SQLite 教程的这一部分详细介绍了 SQLite SELECT语句的实现。

SQLite 检索所有数据

以下 SQL 语句是最常见的语句之一。 它也是最昂贵的之一。

  1. sqlite> SELECT * FROM Cars;
  2. Id Name Price
  3. ---------- ---------- ----------
  4. 1 Audi 52642
  5. 2 Mercedes 57127
  6. 3 Skoda 9000
  7. 4 Volvo 29000
  8. 5 Bentley 350000
  9. 6 Citroen 21000
  10. 7 Hummer 41400
  11. 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

我们检索NamePrice列。 列名用逗号分隔。

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表中选择NamePrice列,并按汽车的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语句。