SELECT语句

语句定义

SQLite 的 SELECT 语句用于从 SQLite 数据库表中获取数据,以结果表的形式返回数据。这些结果表也被称为结果集。

代码示例

语法如下:

1
SELECT column1, column2, columnN FROM table_name;

1)查询某些列的内容

1
sqlite> SELECT ID, NAME, SALARY FROM COMPANY;

2)查询全部列的内容

1
SELECT * FROM COMPANY;

LIKE语句

语句定义

SQLite 的 LIKE 运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,LIKE 运算符将返回真(true),也就是 1。这里有两个通配符与 LIKE 运算符一起使用:
百分号 (%)
下划线 (_)
百分号(%)代表零个、一个或多个数字或字符。下划线(_)代表一个单一的数字或字符。这些符号可以被组合使用。

代码示例

AGE以2开头:

1
sqlite> SELECT * FROM COMPANY WHERE AGE  LIKE '2%';

COMPANY 表中 ADDRESS 文本里包含一个连字符(-)的所有记录:

1
sqlite> SELECT * FROM COMPANY WHERE ADDRESS  LIKE '%-%';

GLOB语句

语句定义

SQLite 的 GLOB 运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,GLOB 运算符将返回真(true),也就是 1。与 LIKE 运算符不同的是,GLOB 是大小写敏感的,对于下面的通配符,它遵循 UNIX 的语法。
*:匹配零个、一个或多个数字或字符。
?:代表一个单一的数字或字符。
[…]:匹配方括号内指定的字符之一。例如,[abc] 匹配 “a”、”b” 或 “c” 中的任何一个字符。
[^…]:匹配不在方括号内指定的字符之一。例如,[^abc] 匹配不是 “a”、”b” 或 “c” 中的任何一个字符的字符。
以上这些符号可以被组合使用。

代码示例

显示 COMPANY 表中 AGE 以 2 开头的所有记录:

1
sqlite> SELECT * FROM COMPANY WHERE AGE  GLOB '2*';

显示 COMPANY 表中 ADDRESS 文本里包含一个连字符(-)的所有记录:

1
sqlite> SELECT * FROM COMPANY WHERE ADDRESS  GLOB '*-*';

[…] 表达式用于匹配方括号内指定的字符集中的任何一个字符。
实例 1:匹配以 “A” 或 “B” 开头的产品名称。

1
SELECT * FROM products WHERE product_name LIKE '[AB]%';

[^…] 表达式用于匹配不在方括号内指定的字符集中的任何字符。
实例 1:匹配不以 “X” 或 “Y” 开头的产品代码。

1
SELECT * FROM products WHERE product_code LIKE '[^XY]%';

LIMIT语句

语句定义

SQLite 的 LIMIT 子句用于限制由 SELECT 语句返回的数据数量。

语法结构

LIMIT语句的语法如下:

1
2
3
SELECT column1, column2, columnN 
FROM table_name
LIMIT [no of rows]

下面是 LIMIT 子句与 OFFSET 子句一起使用时的语法:

1
2
3
SELECT column1, column2, columnN 
FROM table_name
LIMIT [no of rows] OFFSET [row num]

代码示例

只返回6行数据:

1
sqlite> SELECT * FROM COMPANY LIMIT 6;

从一个特定的偏移开始提取记录。如从第三位开始提取 3 个记录:

1
sqlite> SELECT * FROM COMPANY LIMIT 3 OFFSET 2;

ORDER BY语句

语句定义

SQLite 的 ORDER BY 子句是用来基于一个或多个列按升序或降序顺序排列数据。

语法结构

ASC 默认值,从小到大,升序排列
DESC 从大到小,降序排列

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

代码示例

将工资升序排列:

1
sqlite> SELECT * FROM COMPANY ORDER BY SALARY ASC;

GROUP BY语句

语句定义

SQLite 的 GROUP BY 子句用于与 SELECT 语句一起使用,来对相同的数据进行分组。
在 SELECT 语句中,GROUP BY 子句放在 WHERE 子句之后,放在 ORDER BY 子句之前。

语法结构

GROUP BY 子句必须放在 WHERE 子句中的条件之后,必须放在 ORDER BY 子句之前。

1
2
3
4
5
SELECT column-list
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2....columnN
ORDER BY column1, column2....columnN

代码示例

将求出年龄相同的人的工资总总和:

1
sqlite> SELECT AGE, SUM(SALARY) FROM COMPANY GROUP BY AGE;

HAVING语句

语句定义

HAVING 子句允许指定条件来过滤将出现在最终结果中的分组结果。
WHERE 子句在所选列上设置条件,而 HAVING 子句则在由 GROUP BY 子句创建的分组上设置条件。

语法结构

HAVING 子句在 SELECT 查询中的位置:

1
2
3
4
5
6
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

在一个查询中,HAVING 子句必须放在 GROUP BY 子句之后,必须放在 ORDER BY 子句之前。下面是包含 HAVING 子句的 SELECT 语句的语法:

1
2
3
4
5
6
SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2

代码示例

显示名称计数小于 2 的所有记录:

1
sqlite > SELECT * FROM COMPANY GROUP BY name HAVING count(name) < 2;

DISTINCT关键字

关键字定义

SQLite 的 DISTINCT 关键字与 SELECT 语句一起使用,来消除所有重复的记录,并只获取唯一一次记录。
有可能出现一种情况,在一个表中有多个重复的记录。当提取这样的记录时,DISTINCT 关键字就显得特别有意义,它只获取唯一一次记录,而不是获取重复记录。

语法结构

1
2
3
SELECT DISTINCT column1, column2,.....columnN 
FROM table_name
WHERE [condition]

代码示例

1
SELECT DISTINCT * FROM COMPANY;

如果COMPANY表有重复数据,则重复数据只出现一次。