SQLite 上手指南 -- 基础语法

在这里插入图片描述

目录

  • 一、数据库操作
    • 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新表的 表名你可以通过这个名字来引用该表
圆括号 ()括号中的内容定义了 表的结构即每一列(字段)的名称、数据类型及约束条件

表的列定义

在这段语法中,每一行定义了一列(字段),包括字段名、数据类型,以及一些可选的约束条件。

列(字段名)数据类型是否允许为空是否为主键说明
IDINT不允许员工的唯一标识(主键)
NAMETEXT不允许员工的姓名
AGEINT不允许员工的年龄
ADDRESSCHAR(50)允许员工的地址,最多 50 个字符
SALARYREAL允许员工的薪资(浮点数)

我们说过: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)」。

  1. 查看所有对象的创建语句:
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
);
  1. 查看指定表的创建语句:
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

  1. 让我们先确认 user 表已经存在,然后我们将其从数据库中删除。
sqlite> .tables
COMPANY  student  user
  1. 这意味着 user 表已存在数据库中,接下来让我们把它从数据库中删除,如下:
sqlite> drop table user;
sqlite>
  1. 现在,如果尝试 .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 + 515
-减法10 - 55
*乘法10 * 550
/除法10 / 52.0
%取模(求余数)10 % 31

例如:我们对前面的 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 比较运算符

用于比较两个值,返回 TRUEFALSE

比较运算符描述示例实例
=等于age = 25TRUE/FALSE
!=不等于(SQLite 也支持 <>)age != 30TRUE/FALSE
<小于age < 25TRUE/FALSE
>大于age > 20TRUE/FALSE
<=小于等于age <= 25TRUE/FALSE
>=大于等于age >= 20TRUE/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 < 50000TRUE/FALSE
OR逻辑或age < 25 OR salary > 60000TRUE/FALSE
NOT逻辑非NOT age = 25TRUE/FALSE
IS NULL判断是否为 NULLaddress IS NULLTRUE/FALSE
IS NOT NULL判断是否不为 NULLaddress IS NOT NULLTRUE/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 30TRUE/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 & 1312
|按位或
如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中
60 | 1361
~按位取反
二进制补码运算符是一元运算符,具有"翻转"位效应,即 0 变成 1,1 变成 0
~60-61
<<二进制左移运算符
左操作数的值向左移动右操作数指定的位数
60 << 2240
<<二进制右移运算符
左操作数的值向右移动右操作数指定的位数
60 >> 215

假设如果 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/451427.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【热门】用ChatGPT做智慧农业云平台——农业ERP管控系统

随着科技的进步,原有农业种植方式已经不能满足社会发展的需要,必须对传统的农业进行技术更新和改造。经过多年的实践,人们总结出一种新的种植方法——温室农业,即“用人工设施控制环境因素,使作物获得最适宜的生长条件,从而延长生产季节,获得最佳的产出”。这种农业生产方式…

Linux安装 php5.6

Linux安装 php5.6.30 下载-解压-配置-安装 下载到 /usr/local wget http://am1.php.net/distributions/php-5.6.30.tar.gztar -zxvf php-5.6.30.tar.gz cd php-5.6.30#编译配置 ./configure --prefix/usr/local/php --with-curl/usr/local/curl --with-freetype-dir --wit…

无mac电脑在苹果开发者上传构建版本

我们登录苹果开发者网站的后台&#xff0c;进入app store后&#xff0c;发现上架的页面需要上传一个构建版本。 这个构建版本的意思就是我们的应用二进制文件&#xff0c;是上架最重要的文件。但是在苹果开发者后台是无法直接上传这个文件的&#xff0c;它提示我们可以使用xco…

R语言机器学习教程大纲

文章目录 介绍机器学习算法监督学习Supervised Learning分类Classification回归Regression 无监督学习 Unsupervised Learning聚类 Clustering降纬 Dimensionality Reduction相关Association 强化学习Reinforcement Learning模型自由 Model-Free Methods模型驱动 Model-Based M…

服务器托管的优缺点有哪些?

由于数字化程度不断提高&#xff0c;服务器在日常业务中发挥着越来越重要的作用。在大多数情况下&#xff0c;服务器由公司自己维护和管理。但对于一些公司来说&#xff0c;托管服务器(将这些任务交给专业人员)是更好的选择。 关于服务器的优缺点&#xff0c;有一点是明确的&am…

【SpringBoot】16 文件上传(Thymeleaf + MySQL)

Gitee仓库 https://gitee.com/Lin_DH/system 介绍 文件上传是指将本地的图片、视频、音频等文件上传到服务器&#xff0c;供其他用户浏览下载的过程&#xff0c;文件上传在日常项目中用的非常广泛。 实现代码 第一步&#xff1a;在配置文件新增如下配置 application.yml s…

浏览器实时更新esp32-c3 Supermini http server 数据

一利用此程序的思路就可以用浏览器显示esp32 采集的各种传感器的数据&#xff0c;也可以去控制各种传感器。省去编写针对各系统的app. 图片 1.浏览器每隔1秒更新一次数据 2.现在更新的是开机数据&#xff0c;运用此程序&#xff0c;可以实时显示各种传感器的实时数据 3.es…

鸿蒙网络编程系列27-HTTPS服务端证书的四种校验方式示例

1. 服务端数字证书验证的问题 在鸿蒙客户端对服务端发起HTTPS请求时&#xff0c;如果使用HttpRequest的request发起请求&#xff0c;那么就存在服务端数字证书的验证问题&#xff0c;你只有两个选择&#xff0c;一个是使用系统的CA&#xff0c;一个是使用自己选定的CA&#xf…

C++初阶

目录 一.命名空间 1.命名空间定义 2.命名空间使用 二.C输入&输出 三.缺省参数 四. 函数重载 五.引用 1.常引用 2.传值、传引用效率比较 3.引用和指针的区别 4.引用和指针的不同点: 小知识点: 六.内联函数 七.auto关键字(C11) 1.auto的使用细则 八.基于范围…

【Spring声明式事务失效的12种场景测试】

文章目录 一.Spring声明式事务是什么&#xff1f;二.Spring事务失效的12种场景1.访问权限问题 小结 一.Spring声明式事务是什么&#xff1f; Spring声明式事务是一种通过配置的方式管理事务的方法&#xff0c;它通过注解或XML配置来声明哪些方法需要事务管理&#xff0c;从而将…

杨氏矩阵(有一个数字矩阵,矩阵的每行从左到右的递增的,矩阵从上到下是递增的请编写一个程序,在这样的矩阵中查找某个数字是否存在)

//杨氏矩阵 //有一个数字矩阵&#xff0c;矩阵的每行从左到右的递增的&#xff0c;矩阵从上到下是递增的 //请编写一个程序&#xff0c;在这样的矩阵中查找某个数字是否存在 // 1 2 3 // 4 5 6 // 7 8 9 #include<stdio.h> int main() {int a[3][3] { 0 };int i 0, j …

数据库管理-第252期 深入浅出多主多活数据库技术- Cantian存储引擎(二)(20241017)

数据库管理252期 2024-10-17 数据库管理-第252期 深入浅出多主多活数据库技术- Cantian存储引擎&#xff08;二&#xff09;&#xff08;20241017&#xff09;1 部署规划2 服务器基础配置2.1 配置HOSTS2.2 关闭防火墙2.3 关闭SELinux2.4 配置yum源 3 编译服务器配置3.1 安装git…

Vue Google 广告的配置

前置条件&#xff1a;已经在Google AdSense 中 添加网站 并通过审核 同时已创建广告单元。 因 VUE 的 Script 配置问题&#xff0c;所以不能直接拷贝内容。 index.html 配置 添加 Google 广告的脚本。 //index.template.html /* * 在head标签中添加 script 【 **** 】&#…

网络变压器在PCIe网口应用的案例

PCIe&#xff08;Peripheral Component Interconnect Express&#xff09;是一种高速串行计算机总线标准&#xff0c;用于连接计算机主板上的设备&#xff0c;如显卡、网络适配器、存储控制器等。H82422S 网络变压器&#xff08;Ethernet Transformer&#xff09;&#xff0c;在…

SSM框架学习(七、MyBatis-Plus高级用法:最优化持久层开发)

目录 一、MyBatis-Plus快速入门 1.简介 2.快速入门 二、MyBatis-Plus核心功能 1.基于Mapper接口CRUD &#xff08;1&#xff09;Insert 方法 &#xff08;2&#xff09;Delete方法 &#xff08;3&#xff09;Update 方法 &#xff08;4&#xff09;Select方法 2.基于Serv…

使用LangGraph构建多Agent系统架构!

0 前言 Agent是一个使用大语言模型决定应用程序控制流的系统。随着这些系统的开发&#xff0c;它们随时间推移变得复杂&#xff0c;使管理和扩展更困难。如你可能会遇到&#xff1a; Agent拥有太多的工具可供使用&#xff0c;对接下来应该调用哪个工具做出糟糕决策上下文过于…

重塑企业数字化未来:物联网与微服务架构的战略性深度融合

从物联网到微服务架构的战略价值解读 随着全球数字化转型的不断加速&#xff0c;企业需要重新审视其技术基础架构&#xff0c;以适应日益复杂的业务需求和市场变化。物联网&#xff08;IoT&#xff09;作为核心技术&#xff0c;已广泛应用于制造、农业、交通、医疗等各个行业&…

Qt 支持打包成安卓

1. 打开维护Qt&#xff0c;双击MaintenanceTool.exe 2.登陆进去,默认是添加或移除组件&#xff0c;点击下一步&#xff0c; 勾选Android, 点击下一步 3.更新安装中 4.进度100%&#xff0c;完成安装&#xff0c;重启。 5.打开 Qt Creator&#xff0c;编辑-》Preferences... 6.进…

比亚迪车机安装第三方应用教程

比亚迪车机安装第三方应用教程 比亚迪车机U盘安装APP&#xff0c; 无论是dlink3.0还是4.0都是安卓系统&#xff0c;因此理论上安卓应用是都可以安装的&#xff0c;主要就是横屏和竖屏的区别。在比亚迪上安装软件我主要推荐两种方法。 第一种&#xff0c;直接从电脑端下载安装布…

(01)fastapi的基础学习——开启学习之路

前言 性能极高&#xff0c;可与 NodeJS, Go 媲美。(得益于Starlette和Pydantic)。 Starlette 是一个轻量级 ASGI 框架/工具包。它非常适合用来构建高性能的 asyncio 服务&#xff0c;并支持 HTTP 和 WebSockets。 官方网址&#xff1a;Starlette Pydantic 是一个使用Python…