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
位运算符:
位运算符作用于位,并逐位执行操作。真值表 & 和 | 如下:
p | q | p & q | p | q |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 |
1 | 1 | 1 | 1 |
1 | 0 | 0 | 1 |
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