SQLite3学习笔记(3)

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

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/jxxclj/p/9696872.html