SQLite 表达式
表达式是一个或多个值、运算符和计算值的 SQL函数的组合。
SQL表达式与公式类似,都写在查询语言中。您还可以使用特定的数据集来查询数据库。
SELECT语句的基本语法如下:
SELECT column1, column2, columnN FROM table_name WHERE [CONDITION | EXPRESSION];
假设现表中的数据如下:
sqlite> SELECT * FROM COM; ID NAME AGE ---------- ---------- ---------- 1 JXX 18 2 CLJ 19 3 WX 19 4 HY 21 5 CCC 19
SQLite-布尔表达式
SQLite 的布尔表达式在匹配单个值的基础上获取数据。语法如下:
sqlite> SELECT * FROM COM WHERE AGE = 19; ID NAME AGE ---------- ---------- ---------- 2 CLJ 19 3 WX 19 5 CCC 19
SQLite-数值表达式
这些表达式用来执行查询中的任何数学运算:
SELECT numerical_expression as OPERATION_NAME [FROM table_name WHERE CONDITION] ;
在这里,numerical_expression 用于数学表达式或任何公式。下面是实例:
sqlite> SELECT (15+6) AS ADDITION ...> ; 21
有几个内置的函数,比如 avg()、sum()、count(),等等,执行被称为对一个表或者一个特定的表列的汇总数据计算。
sqlite> SELECT COUNT(*) AS "RECORDS" FROM COM; 5
SQLite-日期表达式
日期表达式返回当前系统日期和时间值,这些表达式将被用于各种数据操作。
sqlite> select datetime('now','localtime'); 2018-09-26 12:33:09
SQLite Update 语句
UPDATE 查询用于修改表中已有的记录。可以使用带有WHERE 子句的 UPDATE 查询来更新选定行,否则所有的行都会被更新。
大有 WHERE 子句的UPDATE查询的基本语法如下:
UPDATE table_name SET column1 = value1, column2 = value2...., columnN = valueN WHERE [condition];
可以使用 AND 或 OR 运算符来结合 N 个数量的条件。
假设COM表中有如下数据:
ID NAME AGE ---------- ---------- ---------- 1 JXX 18 2 CLJ 19 3 WX 19 4 HY 21 5 CCC 19
下面是一个实例,她会更新ID为1的客户地址:
sqlite> update COM set AGE = 19 where ID=1; sqlite> select * from COM; ID NAME AGE ---------- ---------- ---------- 1 JXX 19 2 CLJ 19 3 WX 19 4 HY 21 5 CCC 19
如果想修改COM表中的 AGE 和 NAME 列的所有值,则不需要使用 WHERE子句:
sqlite> update COM set AGE = 19,NAME="jxx"; sqlite> select * from COM; ID NAME AGE ---------- ---------- ---------- 1 jxx 19 2 jxx 19 3 jxx 19 4 jxx 19 5 jxx 19
SQLite Delete 语句
SQLite 的DELETE 查询用于删除表中已有的记录。可以使用带有 WHERE 子句的 DELETE 查询来删除选定行,否则所有的记录都将被删除。
带有 WHERE 子句的 DELETE 查询的基本语法如下:
DELETE FROM table_name WHERE [condition];
可以使用 AND 或 OR 运算符来结合 N 个数量的条件
实例;
假设表中数据如下:
ID NAME AGE ---------- ---------- ---------- 1 jxx 19 2 clj 19 3 ccc 19 4 hy 21 5 wx 19 6 xy 19
删除 ID = 5 的数据:
sqlite> delete from COM where ID =5; sqlite> select * from COM; ID NAME AGE ---------- ---------- ---------- 1 jxx 19 2 clj 19 3 ccc 19 4 hy 21 6 xy 19
如果不使用 WHERE 子句,表中的数据将会全部删除;
sqlite> delete from COM;
SQLite Like 子句
LIKE 运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,LIKE 运算符将返回真 (True) ,也就是1。这里有两个通配符与 LIKE 运算符一起使用:
- 百分号:(%)
- 下划线:(_)
百分号(%)代表零个、一个或多个数字或字符。
下划线(_)代表一个单一的数字或字符。
这些符号可以被组合使用。
基本语法如下:
SELECT column_list FROM table_name WHERE column LIKE 'XXXX%' or SELECT column_list FROM table_name WHERE column LIKE '%XXXX%' or SELECT column_list FROM table_name WHERE column LIKE 'XXXX_' or SELECT column_list FROM table_name WHERE column LIKE '_XXXX' or SELECT column_list FROM table_name WHERE column LIKE '_XXXX_'
可以使用 AND 或 OR 运算符来结合 N 个数量的条件。(注:XXXX 可以是任何数字或字符串值)
下面一些实例演示了带有 '%' 和 '_' 运算符的 LIKE 子句不同的地方:
语句 | 描述 |
---|---|
WHERE SALARY LIKE '200%' | 查找以 200 开头的任意值 |
WHERE SALARY LIKE '%200%' | 查找任意位置包含 200 的任意值 |
WHERE SALARY LIKE '_00%' | 查找第二位和第三位为 00 的任意值 |
WHERE SALARY LIKE '2_%_%' | 查找以 2 开头,且长度至少为 3 个字符的任意值 |
WHERE SALARY LIKE '%2' | 查找以 2 结尾的任意值 |
WHERE SALARY LIKE '_2%3' | 查找第二位为 2,且以 3 结尾的任意值 |
WHERE SALARY LIKE '2___3' | 查找长度为 5 位数,且以 2 开头以 3 结尾的任意值 |
实例,表中的数据如下:
ID NAME AGE ---------- ---------- ---------- 1 jxx 19 2 clj 19 3 ccc 19 4 hy 21 6 xy 19 7 long 19 8 OuYang 18 9 Star-Man 19
开始查找:
sqlite> select * from COM where AGE like '2%'; ID NAME AGE ---------- ---------- ---------- 4 hy 21 sqlite> select * from COM where NAME like 'c%'; ID NAME AGE ---------- ---------- ---------- 2 clj 19 3 ccc 19 sqlite> select * from COM where AGE like '2_'; ID NAME AGE ---------- ---------- ---------- 4 hy 21 sqlite> select * from COM where NAME like '%-%'; ID NAME AGE ---------- ---------- ---------- 9 Star-Man 19
SQLite Glob 子句
GLOB 运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,GLOB 运算符将返回真(True),也就是1。与 LIKE 运算符不同的是,GLOB 是大小写敏感的,对于下面的通配符,它遵循 UNIX 的语法。
- 星号(*)
- 问号(?)
星号(*)代表零个、一个或多个数字或字符。
问号(?)代表一个单一的数字或字符。
这些符号可以组合使用。
* 和 ? 的基本语法如下:
SELECT FROM table_name WHERE column GLOB 'XXXX*' or SELECT FROM table_name WHERE column GLOB '*XXXX*' or SELECT FROM table_name WHERE column GLOB 'XXXX?' or SELECT FROM table_name WHERE column GLOB '?XXXX' or SELECT FROM table_name WHERE column GLOB '?XXXX?' or SELECT FROM table_name WHERE column GLOB '????'
可以使用 AND 或 OR 运算符来结合 N 个数量的条件。(注:XXXX 可以是任何数字或字符串值)
下面是 GLOB 运算符中 '*' 和 '?' 的不同:
WHERE SALARY GLOB '200*' | 查找以 200 开头的任意值 |
WHERE SALARY GLOB '*200*' | 查找任意位置包含 200 的任意值 |
WHERE SALARY GLOB '?00*' | 查找第二位和第三位为 00 的任意值 |
WHERE SALARY GLOB '2??' | 查找以 2 开头,且长度至少为 3 个字符的任意值 |
WHERE SALARY GLOB '*2' | 查找以 2 结尾的任意值 |
WHERE SALARY GLOB '?2*3' | 查找第二位为 2,且以 3 结尾的任意值 |
WHERE SALARY GLOB '2???3' | 查找长度为 5 位数,且以 2 开头以 3 结尾的任意值 |
SQLite Limit 语句
SQLite 的 Limit 子句用于限制SELECT 语句返回的数据数量。
带有 LIMIT 子句的 SELECT 语句的基本语法如下:
SELECT column1, column2, columnN FROM table_name LIMIT [no of rows]
下面是 LIMIT 子句与 OFFSET 子句一起使用时的语法:
SELECT column1, column2, columnN FROM table_name LIMIT [no of rows] OFFSET [row num]
SQLite 引擎将返回从下一行开始直到给定的 OFFSET 为止的所有行。
实例,假设 COM 表中有如下数据;
ID NAME AGE ---------- ---------- ---------- 1 jxx 19 2 clj 19 3 ccc 19 4 hy 21 6 xy 19 7 long 19 8 OuYang 18 9 Star-Man 19
LIMIT 限制输出:
sqlite> select * from COM limit 6; ID NAME AGE ---------- ---------- ---------- 1 jxx 19 2 clj 19 3 ccc 19 4 hy 21 6 xy 19 7 long 19
但是,在某些情况下,可能需要从一个特定的偏移开始提取记录,比如从第三位开始提取3个数据:
sqlite> select * from COM limit 3 offset 2; ID NAME AGE ---------- ---------- ---------- 3 ccc 19 4 hy 21 6 xy 19
SQLite Order By 子句
ORDER BY 子句是用来基于一个或多个列按升序或降序顺序排列数据。
ORDER BY 子句 的基本语法:
SELECT column-list FROM table_name [WHERE condition] [ORDER BY column1, column2, .. columnN] [ASC | DESC];
可以在 ORDER BY 子句中使用多个列。确保使用的排序列在列清单中。
下面的命令将按照ID 升序排序:
sqlite> SELECT * FROM COM ORDER BY ID ASC;
下面的命令将按照 NAME 降序排序:
sqlite> SELECT * FROM COM ORDER BY NAME DESC;
SQLite Group By 子句
GROUP BY 用于 SELECT 语句一起使用,来对相同的数据进行分组。
在 SELECT 语句中,GROUP BY 子句放在 WHERE 子句之后,放在 ORDER BY 子句之前。
GROUP BY 子句的基本语法。GROUP BY 子句 必须放在 WHERE 子句中的条件之后,必须放在 ORDER BY 子句之前:
SELECT column-list FROM table_name WHERE [ conditions ] GROUP BY column1, column2....columnN ORDER BY column1, column2....columnN
可以在 GROUP BY 子句中使用多列,确保使用的分组列在列清单中。
假设 COM 表的数据如下:
ID NAME AGE ---------- ---------- ---------- 1 jxx 19 2 clj 19 3 ccc 19 4 hy 21 6 xy 19 7 long 19 8 OuYang 18 9 Star-Man 19 5 wx 19
如果你想了解每个人的年龄:
sqlite> select NAME,AGE from COM group by NAME; NAME AGE ---------- ---------- OuYang 18 Star-Man 19 ccc 19 clj 19 hy 21 jxx 19 long 19 wx 19 xy 19
ORDER BY 子句和 GROUP BY 子句一起使用:
sqlite> select NAME,AGE from COM group by NAME order by NAME asc; NAME AGE ---------- ---------- OuYang 18 Star-Man 19 ccc 19 clj 19 hy 21 jxx 19 long 19 wx 19 xy 19
SQLite Having 子句
HAVING 子句允许指定条件来过滤将出现在最终结果中的分组结果。
WHERE 子句在所选定列上设置条件,而 HAVING 子句则在由 GROUP BY 子句创建的分组上设置条件。。
HAVING 子句在 SELECT 查询中的位置:
SELECT FROM WHERE GROUP BY HAVING ORDER BY
在一个查询中,HAVING 子句必须放在 GROUP BY 子句之后,必须放在 ORDER BY 子句之前。语法:
SELECT column1, column2 FROM table1, table2 WHERE [ conditions ] GROUP BY column1, column2 HAVING [ conditions ] ORDER BY column1, column2
假设表中数据如下:
ID NAME AGE ---------- ---------- ---------- 1 jxx 19 2 clj 19 3 ccc 19 4 hy 21 6 xy 19 7 long 19 8 OuYang 18 9 Star-Man 19 5 ccc 19
显示名称计数小于2的所有记录:
sqlite> select * from COM group by name having count(name) <2; ID NAME AGE ---------- ---------- ---------- 8 OuYang 18 9 Star-Man 19 2 clj 19 4 hy 21 1 jxx 19 7 long 19 6 xy 19
名称计数大于等于2的所有记录:
sqlite> select * from COM group by name having count(name) >= 2; ID NAME AGE ---------- ---------- ---------- 3 ccc 19
SQLite Distinct 关键字
SQLite 的 DISTINCT 关键字与 SELECT 语句一起使用,来消除所有的重复的记录。并获取唯一一次记录。
有可能出现一种情况,在一个表中有多个重复的记录。当提取这样的记录时,DISTINCT 关键字就显得特别有意义,它只获取唯一一次记录,而不是获取重复记录。
用于消除重复记录的 DISTINCT 关键字的基本语法如下:
SELECT DISTINCT column1, column2,.....columnN FROM table_name WHERE [condition]
假设COM 数据如下:
ID NAME AGE ---------- ---------- ---------- 1 jxx 19 2 clj 19 3 ccc 19 4 hy 21 6 xy 19 7 long 19 8 OuYang 18 9 Star-Man 19 5 ccc 19
SELECT查询将会返回重复NAME 的记录,可以在SELECT 查询中使用 DISTINCT 关键字:
sqlite> select distinct name from COM; NAME ---------- jxx clj ccc hy xy long OuYang Star-Man