sqlite数据库

SQLite 创建数据库

SQLite 的 sqlite3 命令被用来创建新的 SQLite 数据库。您不需要任何特殊的权限即可创建一个数据。数据库名称在 RDBMS 内应该是唯一的。
语法:sqlite3 DatabaseName.db;

C:\Users\Administrator>cd /sqlite
C:\sqlite>sqlite3 testDB.db
SQLite version 3.25.2 2018-09-25 19:08:10
Enter ".help" for usage hints.
sqlite> create table tb1(name text);
sqlite> insert into tb1 values('John');
sqlite> select * from tb1;
John

上面的命令将在当前目录 C:\sqlite 下创建一个文件 testDB.db。该文件将被 SQLite 引擎用作数据库。sqlite3 命令在成功创建数据库文件之后,将提供一个 sqlite> 提示符。

一旦数据库被创建,就可以使用 SQLite 的 .databases 命令来检查它是否在数据库列表中,如下所示:

sqlite> .databases
main: C:\sqlite\testDB.db

可以使用 SQLite .quit 命令退出 sqlite 提示符,如下所示:

sqlite> .databases
main: C:\sqlite\testDB.db
sqlite> .quit
C:\sqlite>

当在 cmd 中使用 sqlite3 命令打开 sqlite 数据库时,默认是在内存中创建一个临时的数据库。当在这个临时的数据库中操作数据时,sqlite 不会保存你的数据。关闭控制台后再打开,原先的数据将消失不存在:

C:\Users\Administrator>sqlite3
SQLite version 3.25.2 2018-09-25 19:08:10
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.

sqlite> create table user(name text, age smallint);
sqlite> insert into user values('Tom', 24);
sqlite> select * from user;
Tom|24
sqlite> .quit

C:\Users\Administrator>sqlite3
SQLite version 3.25.2 2018-09-25 19:08:10
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.

sqlite> select * from user;
Error: no such table: user
sqlite>`在这里插入代码片`

sqlite3 命令后面可以跟一个数据库文件名称,打开一个指定的数据库,如果该数据库不存在,将创建该数据库:

C:\sqlite>sqlite3 testDB
SQLite version 3.25.2 2018-09-25 19:08:10
Enter ".help" for usage hints.

sqlite> create table tbl1(one varchar(10), two smallint);
sqlite> insert into tbl1 values('hello!',10);
sqlite> insert into tbl1 values('goodbye', 20);
sqlite> select * from tbl1;
hello!|10
goodbye|20
sqlite>

sqlite 语句以 ‘;’ 作为结束标志,如果省略,sqlite 将弹出连续的提示符直到你输入 ‘;’ :

sqlite> CREATE TABLE tbl2 (
   ...>   f1 varchar(30) primary key,
   ...>   f2 text,
   ...>   f3 real
   ...> );
sqlite>

在 Windows 中可以通过双击 sqlite3.exe 打开 sqlite 命令窗口,此时, sqlite 会在内存中创建一个临时的数据库。如果要打开指定的数据库,可以使用 ‘.open’ 命令:
语法:.open databaseName/databaseName.db;

SQLite version 3.25.2 2018-09-25 19:08:10
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.

sqlite> .open testDB
sqlite> .tables
tb1   user
sqlite> .open ex1.db
sqlite> .tables
class  user
sqlite> 

.dump 命令

可以使用 .dump 点命令来导出完整的数据库在一个文本文件中,如下所示:

C:\sqlite>sqlite3 testDB .dump > testDB.sql

上面的命令将转换整个 testDB.db 数据库的内容到 SQLite 的语句中,并将其转储到 ASCII 文本文件 testDB.sql 中。您可以通过简单的方式从生成的 testDB.sql 恢复,如下所示:

C:\sqlite>sqlite3 testDB < testDB.sql

创建和删除表

CREATE TABLE 语句用于在任何给定的数据库创建一个新表。创建基本表,涉及到命名表、定义列及每一列的数据类型。
CREATE TABLE 语句的基本语法如下:

CREATE TABLE database_name.table_name(
   column1 datatype  PRIMARY KEY(one or more columns),
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype,
);

CREATE TABLE 是告诉数据库系统创建一个新表的关键字。CREATE TABLE 语句后跟着表的唯一的名称或标识。您也可以选择指定带有 table_name 的 database_name。
例:

sqlite> create table company(
   ...>         ID int primary key not null,
   ...>         name text not null,
   ...>         age int not null,
   ...>         address char(50),
   ...>         salary real
   ...> );
sqlite> create table department(
   ...> 		ID int primary key not null,
   ...> 		dept char(50) not null,
   ...> 		emp_ID int not null
   ...> );

可以使用 SQLIte 命令中的 .tables 命令来验证表是否已成功创建,该命令用于列出附加数据库中的所有表。

sqlite> .tables
company     department  tb1         tb2         user

可以使用 SQLite .schema 命令得到表的完整信息,如下所示:

sqlite> .schema company
CREATE TABLE company(
        ID int primary key not null,
        name text not null,
        age int not null,
        address char(50),
        salary real
);

DROP TABLE 语句用来删除表定义及其所有相关数据、索引、触发器、约束和该表的权限规范。
使用此命令时要特别注意,因为一旦一个表被删除,表中所有信息也将永远丢失。
DROP TABLE 语句的基本语法如下。您可以选择指定带有表名的数据库名称,如下所示:

DROP TABLE database_name.table_name;

例:

sqlite> drop table tb2;
sqlite> .tables
company     department  tb1         user

Insert 语句

INSERT INTO 语句用于向数据库的某个表中添加新的数据行。
INSERT INTO 语句有两种基本语法,如下所示:

INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]  
VALUES (value1, value2, value3,...valueN);

在这里,column1, column2,…columnN 是要插入数据的表中的列的名称。

如果要为表中的所有列添加值,您也可以不需要在 SQLite 查询中指定列名称。但要确保值的顺序与列在表中的顺序一致。SQLite 的 INSERT INTO 语法如下:

INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
使用一个表来填充另一个表

可以通过在一个有一组字段的表上使用 select 语句,填充数据到另一个表中。下面是语法:

INSERT INTO first_table_name [(column1, column2, ... columnN)] 
   SELECT column1, column2, ...columnN 
   FROM second_table_name
   [WHERE condition];

例:

sqlite> create table company_2(
   ...>         ID int primary key not null,
   ...>         name text not null,
   ...>         age int not null,
   ...>         address char(50),
   ...>         salary real
   ...> );
   
sqlite> select * from company_2;

sqlite> insert into company_2
   ...>         select * from company;
sqlite> select * from company_2;
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

Select 语句

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

SELECT column1, column2, columnN FROM table_name;

在这里,column1, column2…是表的字段,他们的值即是您要获取的。如果您想获取所有可用的字段,那么可以使用下面的语法:

SELECT * FROM table_name;

例:获取指定字段

sqlite> select ID, name from company_2;
1|Paul
2|Allen
3|Teddy
4|Mark
5|David
6|Kim

例:前三个命令被用来设置正确格式化的输出

sqlite> .header on
sqlite> .mode column
sqlite> select * from 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

注: .mode 设置输出模式; .header 开启或关闭头部显示。

Schema 信息

因为所有的点命令只在 SQLite 提示符中可用,所以当您进行带有 SQLite 的编程时,您要使用下面的带有 sqlite_master 表的 SELECT 语句来列出所有在数据库中创建的表:

sqlite> SELECT tbl_name FROM sqlite_master WHERE type = 'table';

例:

C:\sqlite>sqlite3 testDB
SQLite version 3.25.2 2018-09-25 19:08:10
Enter ".help" for usage hints.

sqlite> select tbl_name from sqlite_master where type = 'table';
user
tb1
company
department
company_2

可以列出关于 company 表的完整信息,如下所示:

sqlite> SELECT sql FROM sqlite_master WHERE type = 'table' AND tbl_name = 'company';

例:

sqlite> select sql from sqlite_master where type = 'table' and tbl_name = 'comp
ny';
sql
CREATE TABLE company(
        ID int primary key not null,
        name text not null,
        age int not null,
        address char(50),
        salary real
)

SQLite 运算符

运算符是一个保留字或字符,主要用于 SQLite 语句的 WHERE 子句中执行操作,如比较和算术运算。
运算符用于指定 SQLite 语句中的条件,并在语句中连接多个条件。

  • 算术运算符
  • 比较运算符
  • 逻辑运算符
  • 位运算符

算术运算符:

运算符描述
+加法 - 把运算符两边的值相加
-减法 - 左操作数减去右操作数
*乘法 - 把运算符两边的值相乘
/除法 - 左操作数除以右操作数
%取模 - 左操作数除以右操作数后得到的余数

比较运算符:

运算符描述
==或=检查两个操作数的值是否相等,如果相等则条件为真。
!=或<>检查两个操作数的值是否相等,如果不相等则条件为真。
>检查左操作数的值是否大于右操作数的值,如果是则条件为真。
<检查左操作数的值是否小于右操作数的值,如果是则条件为真。
>=检查左操作数的值是否大于等于右操作数的值,如果是则条件为真。
<=检查左操作数的值是否小于等于右操作数的值,如果是则条件为真。
!<检查左操作数的值是否不小于右操作数的值,如果是则条件为真。
!>检查左操作数的值是否不大于右操作数的值,如果是则条件为真。

例:salary 等于 20,000.00 的所有记录

sqlite> select * from company where salary > 50000;
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0

例:

sqlite> select * from company where salary != 20000;
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
2           Allen       25          Texas       15000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0

例:

sqlite> select * from company where salary+40000.0 == 60000;
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
3           Teddy       23          Norway      20000.0

逻辑运算符:

AND | AND 运算符允许在一个 SQL 语句的 WHERE 子句中的多个条件的存在。
BETWEEN | BETWEEN 运算符用于在给定最小值和最大值范围内的一系列值中搜索值。
EXISTS | EXISTS 运算符用于在满足一定条件的指定表中搜索行的存在。
IN | IN 运算符用于把某个值与一系列指定列表的值进行比较。
NOT IN | IN 运算符的对立面,用于把某个值与不在一系列指定列表的值进行比较。
LIKE | LIKE 运算符用于把某个值与使用通配符运算符的相似值进行比较。
GLOB | GLOB 运算符用于把某个值与使用通配符运算符的相似值进行比较。GLOB 与 LIKE 不同之处在于,它是大小写敏感的。
NOT | NOT 运算符是所用的逻辑运算符的对立面。比如 NOT EXISTS、NOT BETWEEN、NOT IN,等等。它是否定运算符。
OR | OR 运算符用于结合一个 SQL 语句的 WHERE 子句中的多个条件。
NULL | NULL 运算符用于把某个值与 NULL 值进行比较。
IS | IS 运算符与 = 相似。
IS NOT | IS NOT 运算符与 != 相似。
|| | 连接两个不同的字符串,得到一个新的字符串。
UNIQUE | UNIQUE 运算符搜索指定表中的每一行,确保唯一性(无重复)。
例:

sqlite> SELECT * FROM company WHERE age >= 25 AND salary > 60000;
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0

例:

sqlite> SELECT * FROM company WHERE salary BETWEEN 30000 AND 60000;
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
6           Kim         22          South-Hall  45000.0

例:

sqlite> SELECT * FROM company WHERE salary IN (20000,60000);
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
3           Teddy       23          Norway      20000.0

例:

sqlite>  SELECT * FROM company WHERE salary IS 20000.0;
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
3           Teddy       23          Norway      20000.0

例:NAME 以 ‘Ki’ 开始的所有记录,‘Ki’ 之后的字符不做限制

sqlite>  SELECT * FROM company WHERE name LIKE 'Ki%';
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
6           Kim         22          South-Hall  45000.0

位运算符:
位运算符作用于位,并逐位执行操作。真值表 & 和 | 如下:

pqp & qp | q
0000
0101
1111
1001

SQLite 表达式

表达式是一个或多个值、运算符和计算值的SQL函数的组合。
SQL 表达式与公式类似,都写在查询语言中。您还可以使用特定的数据集来查询数据库。

(1)SQLite - 布尔表达式

SQLite 的布尔表达式在匹配单个值的基础上获取数据。语法如下:

SELECT column1, column2, columnN 
FROM table_name 
WHERE SINGLE VALUE MATCHING EXPRESSION;

例:

sqlite> select * from company where salary = 20000;
ID   name    age  add  salary
---  ------  ---  ---  ------
1    Paul    32   Cal  20000.
3    Teddy   23   Nor  20000.
(2)SQLite - 数值表达式

这些表达式用来执行查询中的任何数学运算。语法如下:

SELECT numerical_expression as  OPERATION_NAME
[FROM table_name WHERE CONDITION] ;

在这里,numerical_expression 用于数学表达式或任何公式。
有几个内置的函数,比如 avg()、sum()、count(),等等,执行被称为对一个表或一个特定的表列的汇总数据计算。
例:

sqlite> select COUNT(*) AS 'records' from company;
records
----------
6
sqlite> select sum(salary) from company;
sum(salary)
-----------
250000.0
sqlite> select sum() from company;
Error: wrong number of arguments to function sum()
sqlite> select sum(age) from company;
sum(age)
----------
154
sqlite> select avg(age) from company;
avg(age)
----------------
25.6666666666667
sqlite> select avg(salary) from company;
avg(salary)
----------------
41666.6666666667
(3)SQLite - 日期表达式

日期表达式返回当前系统日期和时间值,这些表达式将被用于各种数据操作。

sqlite> select current_timestamp;
current_timestamp
-------------------
2018-10-25 05:24:42

SQLite Where 子句

SQLite的 WHERE 子句用于指定从一个表或多个表中获取数据的条件。
如果满足给定的条件,即为真(true)时,则从表中返回特定的值。您可以使用 WHERE 子句来过滤记录,只获取需要的记录。
WHERE 子句不仅可用在 SELECT 语句中,它也可用在 UPDATE、DELETE 语句中,等等。
语法:

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition]

还可以使用比较或逻辑运算符指定条件,比如 >、<、=、LIKE、NOT,等等。
例:

sqlite> select * from company where name LIKE 'Ki%';
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
6           Kim         22          South-Hall  45000.0
sqlite> select * from company where age in (25, 27);
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
2           Allen       25          Texas       15000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
sqlite> select * from company where age between 25 and 27;
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
2           Allen       25          Texas       15000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0

SQLite AND/OR 运算符

SQLite 的 AND 和 OR 运算符用于编译多个条件来缩小在 SQLite 语句中所选的数据。这两个运算符被称为连接运算符。
这些运算符为同一个 SQLite 语句中不同的运算符之间的多个比较提供了可能。

(1)AND 运算符

AND 运算符允许在一个 SQL 语句的 WHERE 子句中的多个条件的存在。使用 AND 运算符时,只有当所有条件都为真(true)时,整个条件为真(true)。
语法:

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition1] AND [condition2]...AND [conditionN];

您可以使用 AND 运算符来结合 N 个数量的条件。SQLite 语句需要执行的动作是,无论是事务或查询,所有由 AND 分隔的条件都必须为真(TRUE)。

sqlite> select * from company where age >= 25 and salary >= 65000;
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
(2)OR 运算符

OR 运算符也用于结合一个 SQL 语句的 WHERE 子句中的多个条件。使用 OR 运算符时,只要当条件中任何一个为真(true)时,整个条件为真(true)。
语法:

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition1] OR [condition2]...OR [conditionN];

您可以使用 OR 运算符来结合 N 个数量的条件。SQLite 语句需要执行的动作是,无论是事务或查询,只要任何一个由 OR 分隔的条件为真(TRUE)即可。

sqlite> select * from company where age >= 25 or salary >= 65000;
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0

SQLite Update 语句

SQLite 的 UPDATE 查询用于修改表中已有的记录。可以使用带有 WHERE 子句的 UPDATE 查询来更新选定行,否则所有的行都会被更新。
语法:

UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];

可以使用 AND 或 OR 运算符来结合 N 个数量的条件。
例:

sqlite> select * from company where ID = 6;
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
6           Kim         22          Texas       45000.0
sqlite> UPDATE company SET address = 'New York' WHERE ID = 6;
sqlite> select * from company where ID = 6;
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
6           Kim         22          New York    45000.0

SQLite Delete 语句

SQLite 的 DELETE 查询用于删除表中已有的记录。可以使用带有 WHERE 子句的 DELETE 查询来删除选定行,否则所有的记录都会被删除。
语法:

DELETE FROM table_name
WHERE [condition];

可以使用 AND 或 OR 运算符来结合 N 个数量的条件。

sqlite> select * from 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          New York    45000.0
sqlite> DELETE from company where ID = 6;
sqlite> select * from 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

如果您想要从 COMPANY 表中删除所有记录,则不需要使用 WHERE 子句,DELETE 查询如下:

sqlite> DELETE FROM COMPANY;

SQLite Like 子句

SQLite 的 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 可以是任何数字或字符串值。
例:

#查找以 200 开头的任意值
sqlite> select * from company where salary LIKE '200%';
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
3           Teddy       23          Norway      20000.0
#AGE 以 2 开头的所有记录
sqlite> select * from company where age LIKE '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

SQLite Glob 子句

SQLite 的 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 可以是任何数字或字符串值。

sqlite> select * from company where name LIKE 'a%';
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
2           Allen       25          Texas       15000.0
sqlite> select * from company where name GLOB 'a*';
sqlite> select * from company where name GLOB 'A*';
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
2           Allen       25          Texas       15000.0

SQLite Limit 子句

SQLite 的 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 为止的所有行。

#从第三位开始提取 2 个记录
sqlite> select * from company LIMIT 2 OFFSET 3;
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
#从第一位开始提取 2 个记录
sqlite> select * from company LIMIT 2 OFFSET 1;
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
#从第二位开始提取 3 个记录
sqlite> select * from company LIMIT 3 OFFSET 2;
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0

SQLite Order By

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

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

可以在 ORDER BY 子句中使用多个列。确保您使用的排序列在列清单中。ASC:升序,DESC:降序。

sqlite> select * from company ORDER BY salary ASC;
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
2           Allen       25          Texas       15000.0
1           Paul        32          California  20000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
sqlite> select * from company ORDER BY salary DESC;
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
5           David       27          Texas       85000.0
4           Mark        25          Rich-Mond   65000.0
1           Paul        32          California  20000.0
3           Teddy       23          Norway      20000.0
2           Allen       25          Texas       15000.0

SQLite Group By

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

SELECT column-list
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2....columnN
ORDER BY column1, column2....columnN;
sqlite> select name, sum(salary) from company GROUP BY name;
name        sum(salary)
----------  -----------
Alice       85000.0
Allen       15000.0
Mark        65000.0
Paul        20000.0
Teddy       20000.0
sqlite> select name, sum(salary) from company;
name        sum(salary)
----------  -----------
Paul        205000.0
sqlite> select name, sum(salary) from company GROUP BY name ORDER BY salary DESC;
name        sum(salary)
----------  -----------
Alice       85000.0
Mark        65000.0
Paul        20000.0
Teddy       20000.0
Allen       15000.0

SQLite Having 子句

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

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

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

SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2

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

sqlite> select * from 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           Alice       27          Texas       85000.0
6           Alice       34          California  45000.0
7           Mark        45          Washionhto  50000.0
sqlite> select * from company GROUP BY name HAVING count(name) < 2;
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
2           Allen       25          Texas       15000.0
1           Paul        32          California  20000.0
3           Teddy       23          Norway      20000.0
sqlite> select * from company GROUP BY name HAVING count(name) = 2;
ID          name        age         address     salary
----------  ----------  ----------  ----------  ----------
5           Alice       27          Texas       85000.0
4           Mark        25          Rich-Mond   65000.0

SQLite Distinct 关键字

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

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

例:

sqlite> select name from company;
name
----------
Paul
Allen
Teddy
Mark
Alice
Alice
Mark
sqlite> select DISTINCT name from company;
name
----------
Paul
Allen
Teddy
Mark
Alice
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值