目录
- 一、数据库操作
- 1.1 新建数据库
- 1.2 查看数据库
- 1.3 查看帮助指令
- 二、表操作
- 2.1 创建表
- 2.2 表信息
- 2.3 表索引信息
- 2.4 表结构信息
- 2.5 删除表
- 三、数据记录操作
- 3.1 新增记录
- 3.2 查看记录
- 3.3 不同格式输出
- 四、运算符
- 4.1 算术运算符
- 4.2 比较运算符
- 4.3 逻辑运算符
- 4.4 位运算符
SQLite 是遵循一套独特的称为语法的规则和准则。有个重要的点值得注意,SQLite 是不区分大小写的,但也有一些命令是大小写敏感的,比如 GLOB 和 glob 在 SQLite 的语句中有不同的含义。
一、数据库操作
1.1 新建数据库
可以直接执行 sqlite3 filename 打开或创建一个 SQLite 数据库。如果文件不存在,SQLite 会自动创建它。
maxin@maxindeMacBook-Pro db % sqlite3 test.db
SQLite version 3.46.1 2024-08-13 09:16:08
Enter ".help" for usage hints.
sqlite>
1.2 查看数据库
sqlite> .databases
main: /Users/maxin/Desktop/db/test.db r/w
使用 .quit 或者 .exit 退出 sqlite3 工具。 再查看当前目录,会发现新增了一个 test.db 文件。
1.3 查看帮助指令
使用 .help 查看 帮助信息。
sqlite> .help
.archive ... Manage SQL archives
.auth ON|OFF Show authorizer callbacks
.backup ?DB? FILE Backup DB (default "main") to FILE
.bail on|off Stop after hitting an error. Default OFF
.cd DIRECTORY Change the working directory to DIRECTORY
.changes on|off Show number of rows changed by SQL
.check GLOB Fail if output since .testcase does not match
.clone NEWDB Clone data into NEWDB from the existing database
.connection [close] [#] Open or close an auxiliary database connection
.databases List names and files of attached databases
.dbconfig ?op? ?val? List or change sqlite3_db_config() options
.dbinfo ?DB? Show status information about the database
.dump ?OBJECTS? Render database content as SQL
.echo on|off Turn command echo on or off
.eqp on|off|full|... Enable or disable automatic EXPLAIN QUERY PLAN
.excel Display the output of next command in spreadsheet
.exit ?CODE? Exit this program with return-code CODE
.expert EXPERIMENTAL. Suggest indexes for queries
.explain ?on|off|auto? Change the EXPLAIN formatting mode. Default: auto
.filectrl CMD ... Run various sqlite3_file_control() operations
.fullschema ?--indent? Show schema and the content of sqlite_stat tables
.headers on|off Turn display of headers on or off
.help ?-all? ?PATTERN? Show help text for PATTERN
.import FILE TABLE Import data from FILE into TABLE
.indexes ?TABLE? Show names of indexes
.intck ?STEPS_PER_UNLOCK? Run an incremental integrity check on the db
.limit ?LIMIT? ?VAL? Display or change the value of an SQLITE_LIMIT
.lint OPTIONS Report potential schema issues.
.load FILE ?ENTRY? Load an extension library
.log FILE|on|off Turn logging on or off. FILE can be stderr/stdout
.mode MODE ?OPTIONS? Set output mode
.nonce STRING Suspend safe mode for one command if nonce matches
.nullvalue STRING Use STRING in place of NULL values
.once ?OPTIONS? ?FILE? Output for the next SQL command only to FILE
.open ?OPTIONS? ?FILE? Close existing database and reopen FILE
.output ?FILE? Send output to FILE or stdout if FILE is omitted
.parameter CMD ... Manage SQL parameter bindings
.print STRING... Print literal STRING
.progress N Invoke progress handler after every N opcodes
.prompt MAIN CONTINUE Replace the standard prompts
.quit Stop interpreting input stream, exit if primary.
.read FILE Read input from FILE or command output
.recover Recover as much data as possible from corrupt db.
.restore ?DB? FILE Restore content of DB (default "main") from FILE
.save ?OPTIONS? FILE Write database to FILE (an alias for .backup ...)
.scanstats on|off|est Turn sqlite3_stmt_scanstatus() metrics on or off
.schema ?PATTERN? Show the CREATE statements matching PATTERN
.separator COL ?ROW? Change the column and row separators
.session ?NAME? CMD ... Create or control sessions
.sha3sum ... Compute a SHA3 hash of database content
.shell CMD ARGS... Run CMD ARGS... in a system shell
.show Show the current values for various settings
.stats ?ARG? Show stats or turn stats on or off
.system CMD ARGS... Run CMD ARGS... in a system shell
.tables ?TABLE? List names of tables matching LIKE pattern TABLE
.timeout MS Try opening locked tables for MS milliseconds
.timer on|off Turn SQL timer on or off
.trace ?OPTIONS? Output each SQL statement as it is run
.version Show source, library and compiler versions
.vfsinfo ?AUX? Information about the top-level VFS
.vfslist List all available VFSes
.vfsname ?AUX? Print the name of the VFS stack
.width NUM1 NUM2 ... Set minimum column widths for columnar output
二、表操作
2.1 创建表
SQLite 的 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。
例如:创建一个 COMPANY 表,ID 作为主键,NOT NULL 的约束表示在表中创建纪录时这些字段不能为 NULL:
sqlite> CREATE TABLE COMPANY(ID INT PRIMARY KEY NOT NULL,NAME TEXT NOT NULL,AGE INT NOT NULL,ADDRESS CHAR(50),SALARY REAL
);
我们来解读一下这种语法结构:
CREATE TABLE 语句
CREATE TABLE 是用来 创建数据库表 的 SQL 语句。
拆解 | 含义 | 说明 |
---|---|---|
COMPANY | 新表的 表名 | 你可以通过这个名字来引用该表 |
圆括号 () | 括号中的内容定义了 表的结构 | 即每一列(字段)的名称、数据类型及约束条件 |
表的列定义
在这段语法中,每一行定义了一列(字段),包括字段名、数据类型,以及一些可选的约束条件。
列(字段名) | 数据类型 | 是否允许为空 | 是否为主键 | 说明 |
---|---|---|---|---|
ID | INT | 不允许 | 是 | 员工的唯一标识(主键) |
NAME | TEXT | 不允许 | 否 | 员工的姓名 |
AGE | INT | 不允许 | 否 | 员工的年龄 |
ADDRESS | CHAR(50) | 允许 | 否 | 员工的地址,最多 50 个字符 |
SALARY | REAL | 允许 | 否 | 员工的薪资(浮点数) |
我们说过:SQLite 是不区分大小写的,所以如果你像下面这样定义也是可以的:
create table company (id int primary key not null,name text not null,age int not null,address char(50),salary real
);
常见的编码习惯
- 大写关键字风格(例如:CREATE TABLE、SELECT、INSERT 等关键字大写)
这种风格比较常见于官方文档和企业级开发,目的是让 SQL 关键字在代码中更醒目,易于识别。
例如:CREATE TABLE COMPANY (ID INT PRIMARY KEY)。 - 小写关键字风格(例如:create table、select)
有些开发者或社区更倾向于全小写,认为这样风格一致,看起来更加简洁。
在某些语言中,如 Python 等,惯用全小写风格,开发者会把这个习惯带到 SQL 中。
这种差异主要是个人偏好或团队风格的选择,功能上没有任何影响。
编写风格建议
无论你使用大写还是小写,保持一致性 都是良好的编码习惯,尤其是在多人协作开发中。通常,团队会统一编码规范,比如:
- 所有 「SQL 关键字」 用大写,例如:SELECT、FROM。
- 「表名」 和 「列名」 用小写(或蛇形命名),例如:user_name、order_date。
比如像下面这样:
CREATE TABLE company (id INT PRIMARY KEY,name TEXT NOT NULL,age INT NOT NULL
);
再比如,我们创建名为 user、student 的表:
maxin@maxindeMacBook-Pro db % sqlite3 test.db
SQLite version 3.46.1 2024-08-13 09:16:08
Enter ".help" for usage hints.
sqlite> CREATE TABLE user(name text, age int);
sqlite> CREATE TABLE student(id int, name text, age int, primary key(id));
2.2 表信息
表创建完成后,你可以使用 .tables 或者 .table tableName 命令查看所有现有表格或者单个表格的信息:
sqlite> .tables
COMPANY student user
sqlite> .table COMPANY
COMPANY
sqlite> .table student
student
sqlite> .table user
user
2.3 表索引信息
在 SQLite 中,.indices 是 SQLite 命令行工具中用于 列出一个表所有索引 的命令。这个命令的作用是「展示某个表已经定义的所有索引」。
基本语法:
.indices 表名
例如:
sqlite> .indices COMPANY
sqlite_autoindex_COMPANY_1
------------------------------------------
sqlite> .indices student
sqlite_autoindex_student_1
------------------------------------------
sqlite> .indices user # user 表没有建索引
sqlite_autoindex_company_1 / sqlite_autoindex_student_1
这是 SQLite 自动创建的索引,因为 COMPANY / student 表中的 ID 列定义为 主键(PRIMARY KEY)。SQLite 会自动为主键列创建索引,帮助快速查询。
2.4 表结构信息
在 SQLite 中,.schema 是 SQLite 命令行工具中的一个常用命令,用来「查看数据库中表、视图、索引等对象的 创建语句(DDL)」。
- 查看所有对象的创建语句:
sqlite> .schema
CREATE TABLE user(name text,age int);
CREATE TABLE student(id int,name text,age int,primary key(id));
CREATE TABLE COMPANY(ID INT PRIMARY KEY NOT NULL,NAME TEXT NOT NULL,AGE INT NOT NULL,ADDRESS CHAR(50),SALARY REAL
);
- 查看指定表的创建语句:
sqlite> .schema user
CREATE TABLE user(name text,age int);
------------------------------------------
sqlite> .schema student
CREATE TABLE student(id int,name text,age int,primary key(id));
------------------------------------------
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
);
2.5 删除表
SQLite 的 DROP TABLE 语句用来删除表定义及其所有相关数据、索引、触发器、约束和该表的权限规范。
使用此命令时要特别注意,因为一旦一个表被删除,表中所有信息也将永远丢失!!!
基本语法:
DROP TABLE database_name.table_name;
例如:我们删除 user 表
- 让我们先确认 user 表已经存在,然后我们将其从数据库中删除。
sqlite> .tables
COMPANY student user
- 这意味着 user 表已存在数据库中,接下来让我们把它从数据库中删除,如下:
sqlite> drop table user;
sqlite>
- 现在,如果尝试 .tables 命令,那么将无法找到 user 表了:
sqlite> .tables
COMPANY student
sqlite>
三、数据记录操作
3.1 新增记录
SQLite 的 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);
例如,我们往 COMPANY 里面添加数据:
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 );INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Allen', 25, 'Texas', 15000.00 );INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'David', 27, 'Texas', 85000.00 );INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Kim', 22, 'South-Hall', 45000.00 );
你也可以使用第二种语法在 COMPANY 表中创建一个记录,如下所示:
INSERT INTO COMPANY VALUES (1, 'Paul', 32, 'California', 20000.00 );
INSERT INTO COMPANY VALUES (2, 'Allen', 25, 'Texas', 15000.00 );
INSERT INTO COMPANY VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );
INSERT INTO COMPANY VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );
INSERT INTO COMPANY VALUES (5, 'David', 27, 'Texas', 85000.00 );
INSERT INTO COMPANY VALUES (6, 'Kim', 22, 'South-Hall', 45000.00 );
3.2 查看记录
SQLite 的 SELECT 语句用于从 SQLite 数据库表中获取数据,以结果表的形式返回数据。这些结果表也被称为结果集。
基本语法:
SELECT column1, column2, columnN FROM table_name;
在这里,column1, column2… 是表的字段,它们的值即是你要获取的。如果你想获取所有可用的字段,那么可以使用下面的语法:
SELECT * FROM table_name;
例如,我们刚刚给 COMPANY 表添加了数据,现在查看下:
sqlite> select * from company;
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
如果只想获取 COMPANY 表中指定的字段,则使用下面的查询:
sqlite> .mode column
sqlite> SELECT ID, NAME, SALARY FROM COMPANY;
ID NAME SALARY
-- ----- -------
1 Paul 20000.0
2 Allen 15000.0
3 Teddy 20000.0
4 Mark 65000.0
5 David 85000.0
6 Kim 45000.0
3.3 不同格式输出
在 SQLite 命令行工具中,.mode 用于控制「查询结果的输出格式」。根据需求,你可以选择不同的模式,比如将数据格式化为表格、CSV、HTML 或其他样式。这可以帮助你更方便地查看、调试和导出数据。
常见的 .mode 选项及其作用:
1. column(列模式)
- 数据以 表格形式 显示,列名和数据对齐,适合人类阅读。
- 命令:
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
2. list(列表模式)
- 数据以 竖线(|)分隔,适合快速查看或复制。
- 命令:
sqlite> .mode list
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
3. csv(CSV 模式)
- 数据以 逗号分隔值 格式输出,适合导出到文件或电子表格。
- 命令:
sqlite> .mode csv
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
4. html(HTML 模式)
- 数据以 HTML 表格 格式输出,适合导出到网页或报告中。
- 命令:
sqlite> .mode html
sqlite> select * from company;
- 输出示例:
<TR><TH>ID</TH>
<TH>NAME</TH>
<TH>AGE</TH>
<TH>ADDRESS</TH>
<TH>SALARY</TH>
</TR>
<TR><TD>1</TD>
<TD>Paul</TD>
<TD>32</TD>
<TD>California</TD>
<TD>20000.0</TD>
</TR>
<TR><TD>2</TD>
<TD>Allen</TD>
<TD>25</TD>
<TD>Texas</TD>
<TD>15000.0</TD>
</TR>
<TR><TD>3</TD>
<TD>Teddy</TD>
<TD>23</TD>
<TD>Norway</TD>
<TD>20000.0</TD>
</TR>
<TR><TD>4</TD>
<TD>Mark</TD>
<TD>25</TD>
<TD>Rich-Mond </TD>
<TD>65000.0</TD>
</TR>
<TR><TD>5</TD>
<TD>David</TD>
<TD>27</TD>
<TD>Texas</TD>
<TD>85000.0</TD>
</TR>
<TR><TD>6</TD>
<TD>Kim</TD>
<TD>22</TD>
<TD>South-Hall</TD>
<TD>45000.0</TD>
</TR>
5. tabs(制表符分隔模式)
- 数据以 制表符 分隔,适合导出到文件并在代码或编辑器中处理。
- 命令:
sqlite> .mode tabs
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
6. insert(INSERT 模式)
- 数据以 INSERT INTO 语句 的形式输出,方便将数据重新导入数据库。
- 命令:
sqlite> .mode insert
sqlite> select * from company;
- 输出示例:
INSERT INTO "table"(ID,NAME,AGE,ADDRESS,SALARY) VALUES(1,'Paul',32,'California',20000.0);
INSERT INTO "table"(ID,NAME,AGE,ADDRESS,SALARY) VALUES(2,'Allen',25,'Texas',15000.0);
INSERT INTO "table"(ID,NAME,AGE,ADDRESS,SALARY) VALUES(3,'Teddy',23,'Norway',20000.0);
INSERT INTO "table"(ID,NAME,AGE,ADDRESS,SALARY) VALUES(4,'Mark',25,'Rich-Mond ',65000.0);
INSERT INTO "table"(ID,NAME,AGE,ADDRESS,SALARY) VALUES(5,'David',27,'Texas',85000.0);
INSERT INTO "table"(ID,NAME,AGE,ADDRESS,SALARY) VALUES(6,'Kim',22,'South-Hall',45000.0);
7. json(JSON 模式)
- 数据以 JSON 格式 输出,适合在开发过程中使用,也非常适合与前端、API 交互,或者导出 JSON 数据。
- 命令:
sqlite> .mode json
sqlite> select * from company;
- 输出示例:
[{"ID":1,"NAME":"Paul","AGE":32,"ADDRESS":"California","SALARY":20000.0},
{"ID":2,"NAME":"Allen","AGE":25,"ADDRESS":"Texas","SALARY":15000.0},
{"ID":3,"NAME":"Teddy","AGE":23,"ADDRESS":"Norway","SALARY":20000.0},
{"ID":4,"NAME":"Mark","AGE":25,"ADDRESS":"Rich-Mond ","SALARY":65000.0},
{"ID":5,"NAME":"David","AGE":27,"ADDRESS":"Texas","SALARY":85000.0},
{"ID":6,"NAME":"Kim","AGE":22,"ADDRESS":"South-Hall","SALARY":45000.0}]
四、运算符
SQLite 提供了多种运算符,用于数据操作、筛选和计算。主要运算符分为以下几类:
- 算术运算符
- 比较运算符
- 逻辑运算符
- 位运算符
4.1 算术运算符
SQLite 支持常见的「算术运算符」,用于在查询语句中进行数学运算。这些运算符可以在 SELECT 语句中计算列值,也可以用于更新操作。常见的算术运算符包括 加、减、乘、除 和 取模。
算数运算符 | 描述 | 示例 | 实例 |
---|---|---|---|
+ | 加法 | 10 + 5 | 15 |
- | 减法 | 10 - 5 | 5 |
* | 乘法 | 10 * 5 | 50 |
/ | 除法 | 10 / 5 | 2.0 |
% | 取模(求余数) | 10 % 3 | 1 |
例如:我们对前面的 COMPANY 表进行「算数运算符」的操作:
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
加法(+)
# 给每个员工的薪资增加 5000
sqlite> SELECT name, salary, salary + 5000 AS new_salary FROM company;
NAME SALARY new_salary
----- ------- ----------
Paul 20000.0 25000.0
Allen 15000.0 20000.0
Teddy 20000.0 25000.0
Mark 65000.0 70000.0
David 85000.0 90000.0
Kim 45000.0 50000.0
减法(-)
# 给每个员工的薪资减少 2000
sqlite> SELECT name, salary, salary - 2000 AS reduced_salary FROM company;
NAME SALARY reduced_salary
----- ------- --------------
Paul 20000.0 18000.0
Allen 15000.0 13000.0
Teddy 20000.0 18000.0
Mark 65000.0 63000.0
David 85000.0 83000.0
Kim 45000.0 43000.0
乘法(*)
# 给每个员工的薪资翻倍
sqlite> SELECT name, salary, salary * 2 AS doubled_salary FROM company;
NAME SALARY doubled_salary
----- ------- --------------
Paul 20000.0 40000.0
Allen 15000.0 30000.0
Teddy 20000.0 40000.0
Mark 65000.0 130000.0
David 85000.0 170000.0
Kim 45000.0 90000.0
除法(/)
# 将员工的年薪除以 12,计算月薪
sqlite> SELECT name, salary / 12 AS monthly_salary FROM company;
NAME monthly_salary
----- ----------------
Paul 1666.66666666667
Allen 1250.0
Teddy 1666.66666666667
Mark 5416.66666666667
David 7083.33333333333
Kim 3750.0
取模(%)
# 计算每个员工年龄除以 2 的余数,判断是否为偶数年龄(余数为 0)
sqlite> SELECT id, name, age % 2 AS age_mod FROM company;
ID NAME age_mod
-- ----- -------
1 Paul 0
2 Allen 1
3 Teddy 1
4 Mark 1
5 David 1
6 Kim 0
结合 WHERE 条件使用
# 查询月薪大于 5000 的员工
sqlite> SELECT * FROM company WHERE salary / 12 > 5000;
ID NAME AGE ADDRESS SALARY
-- ----- --- ---------- -------
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
4.2 比较运算符
用于比较两个值,返回 TRUE 或 FALSE。
比较运算符 | 描述 | 示例 | 实例 |
---|---|---|---|
= | 等于 | age = 25 | TRUE/FALSE |
!= | 不等于(SQLite 也支持 <>) | age != 30 | TRUE/FALSE |
< | 小于 | age < 25 | TRUE/FALSE |
> | 大于 | age > 20 | TRUE/FALSE |
<= | 小于等于 | age <= 25 | TRUE/FALSE |
>= | 大于等于 | age >= 20 | TRUE/FALSE |
例如:我们对前面的 COMPANY 表进行「比较运算符」的操作:
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
列出 SALARY 大于 50,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
列出 SALARY 等于 20,000.00 的所有记录
sqlite> SELECT * FROM COMPANY WHERE SALARY = 20000;
ID NAME AGE ADDRESS SALARY
-- ----- --- ---------- -------
1 Paul 32 California 20000.0
3 Teddy 23 Norway 20000.0
列出 SALARY 不等于 20,000.00 的所有记录
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.0sqlite> 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
列出 SALARY 大于等于 65,000.00 的所有记录
sqlite> SELECT * FROM COMPANY WHERE SALARY >= 65000;
ID NAME AGE ADDRESS SALARY
-- ----- --- ---------- -------
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
4.3 逻辑运算符
用于连接多个条件表达式,返回布尔值。
逻辑运算符 | 描述 | 示例 | 实例 |
---|---|---|---|
AND | 逻辑与 | age > 20 AND salary < 50000 | TRUE/FALSE |
OR | 逻辑或 | age < 25 OR salary > 60000 | TRUE/FALSE |
NOT | 逻辑非 | NOT age = 25 | TRUE/FALSE |
IS NULL | 判断是否为 NULL | address IS NULL | TRUE/FALSE |
IS NOT NULL | 判断是否不为 NULL | address IS NOT NULL | TRUE/FALSE |
LIKE | 模糊匹配 | name LIKE ‘J%’ | TRUE/FALSE |
GLOB | 全局匹配(区分大小写) | name GLOB ‘J*’ | TRUE/FALSE |
IN | 判断是否在列表内 | age IN (22, 30) | TRUE/FALSE |
BETWEEN | 判断是否在范围内 | age BETWEEN 20 AND 30 | TRUE/FALSE |
例如:我们对前面的 COMPANY 表进行「逻辑运算符」的操作:
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
列出 AGE 大于等于 25 且工资大于等于 65000.00 的所有记录
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
列出 AGE 大于等于 25 或工资大于等于 65000.00 的所有记录
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
列出 AGE 不为 NULL 的所有记录,结果显示所有的记录,意味着没有一个记录的 AGE 等于 NULL
sqlite> SELECT * FROM COMPANY WHERE AGE IS NOT NULL;
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
列出 NAME 以 ‘Ki’ 开始的所有记录,‘Ki’ 之后的字符不做限制
sqlite> SELECT * FROM COMPANY WHERE NAME LIKE 'Ki%';
ID NAME AGE ADDRESS SALARY
-- ---- --- ---------- -------
6 Kim 22 South-Hall 45000.0sqlite> SELECT * FROM COMPANY WHERE NAME GLOB 'Ki*';
ID NAME AGE ADDRESS SALARY
-- ---- --- ---------- -------
6 Kim 22 South-Hall 45000.0
列出 AGE 的值为 23 或 27 的所有记录
sqlite> SELECT * FROM COMPANY WHERE AGE IN ( 23, 27 );
ID NAME AGE ADDRESS SALARY
-- ----- --- ------- -------
3 Teddy 23 Norway 20000.0
5 David 27 Texas 85000.0
列出 AGE 的值在 23 与 27 之间的所有记录
sqlite> SELECT * FROM COMPANY WHERE AGE BETWEEN 23 AND 27;
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
4.4 位运算符
用于对整数执行位操作。
位运算符 | 描述 | 示例 | 实例 |
---|---|---|---|
& | 按位与 如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中 | 60 & 13 | 12 |
| | 按位或 如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中 | 60 | 13 | 61 |
~ | 按位取反 二进制补码运算符是一元运算符,具有"翻转"位效应,即 0 变成 1,1 变成 0 | ~60 | -61 |
<< | 二进制左移运算符 左操作数的值向左移动右操作数指定的位数 | 60 << 2 | 240 |
<< | 二进制右移运算符 左操作数的值向右移动右操作数指定的位数 | 60 >> 2 | 15 |
假设如果 A = 60,且 B = 13,现在以二进制格式,它们如下所示:
A = 0011 1100
B = 0000 1101
-----------------
A & B = 0000 1100
A | B = 0011 1101
~ A = 1100 0011
-----------------
A << 2
0011 1100 --> 左移两位 --> 1111 0000 -> 240
-----------------
A >> 2
0011 1100 --> 右移两位 --> 0000 1111 -> 15