SQLite GLOB、LIMIT 和 ORDER BY 子句详解(五)

在处理数据库查询时,SQLite 提供了许多强大的工具来帮助我们精确地筛选和排序数据。本文将详细介绍 SQLite 中的 GLOBLIMITORDER BY 子句,通过具体的示例和实际应用场景,帮助你更好地理解和使用这些功能。

什么是 GLOB 子句?

GLOB 子句是 SQLite 中用于模式匹配的一种运算符。与 LIKE 运算符不同,GLOB 是大小写敏感的,并且使用 UNIX 风格的通配符。如果你需要进行精确的文本匹配,GLOB 是一个非常有用的工具。

通配符介绍

  • *:匹配零个、一个或多个字符。
  • ?:匹配单个字符。
  • [...]:匹配方括号内的任意一个字符。
  • [^...]:匹配不在方括号内的任意一个字符。

这些通配符可以组合使用,以实现复杂的模式匹配。

基本语法

以下是使用 * 和 ? 通配符的基本语法示例:

SELECT * FROM table_name WHERE column GLOB 'XXXX*';
SELECT * FROM table_name WHERE column GLOB '*XXXX*';
SELECT * FROM table_name WHERE column GLOB 'XXXX?';
SELECT * FROM table_name WHERE column GLOB '?XXXX';
SELECT * FROM table_name WHERE column GLOB '?XXXX?';
SELECT * FROM table_name WHERE column GLOB '????';

实际应用示例

假设我们有一个名为 COMPANY 的表,包含以下记录:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

示例 1:查找以 2 开头的年龄

SELECT * FROM COMPANY WHERE AGE GLOB '2*';

这将返回所有年龄以 2 开头的记录:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

示例 2:查找地址中包含连字符的记录

SELECT * FROM COMPANY WHERE ADDRESS GLOB '*-*';

这将返回所有地址中包含连字符的记录:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
4           Mark        25          Rich-Mond   65000.0
6           Kim         22          South-Hall  45000.0

更多通配符示例

[...] 通配符

SELECT * FROM products WHERE product_name GLOB '[AB]*';

这将匹配以 "A" 或 "B" 开头的产品名称。

SELECT * FROM customers WHERE phone_number GLOB '[123]*';

这将匹配以 "1"、"2" 或 "3" 开头的电话号码。

[^...] 通配符

SELECT * FROM products WHERE product_code GLOB '[^XY]*';

这将匹配不以 "X" 或 "Y" 开头的产品代码。

SELECT * FROM users WHERE username GLOB '[^0-9]*';

这将匹配不以数字字符开头的用户名。

LIMIT 子句

LIMIT 子句用于限制由 SELECT 语句返回的数据数量。这对于分页显示数据或减少查询结果的行数非常有用。

基本语法

SELECT column1, column2, columnN 
FROM table_name
LIMIT [number_of_rows];

带 OFFSET 的语法

SELECT column1, column2, columnN 
FROM table_name
LIMIT [number_of_rows] OFFSET [row_num];
  • LIMIT [number_of_rows]:限制返回的行数。

  • OFFSET [row_num]:指定从哪一行开始返回数据。

实际应用示例

假设我们有一个名为 COMPANY 的表,包含以下记录:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

示例 1:限制返回的行数

SELECT * FROM COMPANY LIMIT 6;

这将返回前 6 行记录:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0

示例 2:带 OFFSET 的限制

SELECT * FROM COMPANY LIMIT 3 OFFSET 2;

这将从第 3 行开始返回 3 行记录:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0

ORDER BY 子句

ORDER BY 子句用于按一个或多个列对查询结果进行排序。默认情况下,排序是升序的(ASC),但也可以指定降序(DESC)。

基本语法

SELECT column-list 
FROM table_name 
[WHERE condition] 
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

多列排序

你可以在 ORDER BY 子句中使用多个列,以实现更复杂的排序需求。

SELECT
   select_list
FROM
   table
ORDER BY
    column_1 ASC,
    column_2 DESC;

实际应用示例

假设我们有一个名为 COMPANY 的表,包含以下记录:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

示例 1:按薪水升序排序

SELECT * FROM COMPANY ORDER BY SALARY ASC;

这将返回按薪水升序排序的结果:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
7           James       24          Houston     10000.0
2           Allen       25          Texas       15000.0
1           Paul        32          California  20000.0
3           Teddy       23          Norway      20000.0
6           Kim         22          South-Hall  45000.0

4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0

示例 2:按姓名和薪水升序排序

SELECT * FROM COMPANY ORDER BY NAME, SALARY ASC;

这将返回按姓名和薪水升序排序的结果:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
2           Allen       25          Texas       15000.0
5           David       27          Texas       85000.0
7           James       24          Houston     10000.0
6           Kim         22          South-Hall  45000.0
4           Mark        25          Rich-Mond   65000.0
1           Paul        32          California  20000.0
3           Teddy       23          Norway      20000.0

示例 3:按姓名降序排序

SELECT * FROM COMPANY ORDER BY NAME DESC;

这将返回按姓名降序排序的结果:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
3           Teddy       23          Norway      20000.0
1           Paul        32          California  20000.0
4           Mark        25          Rich-Mond   65000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0
5           David       27          Texas       85000.0
2           Allen       25          Texas       15000.0

总结

通过本文,我们详细介绍了 SQLite 中的 GLOBLIMITORDER BY 子句。这些子句在处理复杂查询和优化数据展示方面非常有用。希望本文能帮助你更好地理解和应用这些功能,提升你的数据库查询效率。如果你有任何疑问或建议,欢迎在评论区留言交流。