SQLite Select 语句

本文介绍了 SQLite 中 SELECT 语句的基本用法,包括如何从数据库表中选择特定字段的数据,如何设置输出列的宽度以改善展示效果,以及如何通过查询 sqlite_master 表来获取数据库的 Schema 信息。

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

语法

SQLite 的 SELECT 语句的基本语法如下:

SELECT column1, column2, columnN FROM table_name;, column2, columnN FROM table_name;

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

SELECT * FROM table_name;* FROM table_name;

实例

假设 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
7           James       24          Houston     10000.0----------  ----------  ----------  ----------  ----------
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
7           James       24          Houston     10000.0

下面是一个实例,使用 SELECT 语句获取并显示所有这些记录。在这里,前三个命令被用来设置正确格式化的输出。

sqlite>.header on
sqlite>.mode column
sqlite> SELECT * FROM COMPANY;>.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
7           James       24          Houston     10000.0----------  ----------  ----------  ----------  ----------
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
7           James       24          Houston     10000.0

如果只想获取 COMPANY 表中指定的字段,则使用下面的查询:

sqlite> SELECT ID, NAME, SALARY FROM COMPANY;> 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
7           James       10000.0----------  ----------  ----------
1           Paul        20000.0
2           Allen       15000.0
3           Teddy       20000.0
4           Mark        65000.0
5           David       85000.0
6           Kim         45000.0
7           James       10000.0

设置输出列的宽度

有时,由于要显示的列的默认宽度导致 .mode column,这种情况下,输出被截断。此时,您可以使用 .width num, num.... 命令设置显示列的宽度,如下所示:

sqlite>.width 10, 20, 10
sqlite>SELECT * FROM COMPANY;>.width 10, 20, 10
sqlite>SELECT * FROM COMPANY;

上面的 .width 命令设置第一列的宽度为 10,第二列的宽度为 20,第三列的宽度为 10。因此上述 SELECT 语句将得到以下结果:

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
7           James                 24          Houston     10000.0----------  --------------------  ----------  ----------  ----------
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
7           James                 24          Houston     10000.0

Schema 信息

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

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

假设在 testDB.db 中已经存在唯一的 COMPANY 表,则将产生以下结果:

tbl_name
----------
COMPANY----------
COMPANY

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

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

假设在 testDB.db 中已经存在唯一的 COMPANY 表,则将产生以下结果:

CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
)(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
)
### 3.1 SQLite UPDATE 语句的基本语法 SQLite 中的 `UPDATE` 语句用于修改表中已存在的记录。其基本语法如下: ```sql UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition; ``` 该语句通过 `SET` 子句指定需要更新的列及其新值,并通过 `WHERE` 子句限定需要更新的行记录。如果省略 `WHERE` 条件,表中所有记录的指定列都会被更新,这可能导致意外的数据更改,因此在使用时应特别注意[^3]。 例如,以下语句将更新 `Person` 表中姓氏为 `'Wilson'` 的记录,修改其地址和城市信息: ```sql UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'; ``` 此操作仅影响满足 `WHERE` 条件的行,确保数据更新的精确性[^3]。 --- ### 3.2 SQLite 中执行 UPDATE 语句的注意事项 在使用 SQLite 的 `UPDATE` 语句时,应遵循以下关键点: - **确保 WHERE 条件的准确性**:更新操作应基于唯一或明确的条件进行,例如使用主键或唯一标识符。这可以避免误更新其他行数据。 - **避免误更新所有行**:如果省略 `WHERE` 子句,所有行的指定列都会被更新,这可能导致大规模的数据错误。因此,除非确实需要更新整个表的数据,否则必须使用 `WHERE` 条件限制更新范围。 - **在执行前进行 SELECT 验证**:在实际执行 `UPDATE` 前,建议先使用 `SELECT` 语句验证 `WHERE` 条件是否正确,以确认目标行是否符合预期。例如: ```sql SELECT * FROM Person WHERE LastName = 'Wilson'; ``` 这有助于减少因条件错误导致的数据更新问题。 - **使用事务控制**:对于重要数据的更新操作,建议在事务中执行,以便在发生错误时回滚操作,防止数据不一致。例如: ```sql BEGIN TRANSACTION; UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'; COMMIT; ``` 这种方式可以确保更新操作的原子性和一致性。 - **并发访问控制**:在多用户环境中,多个用户同时更新同一行可能导致数据不一致。可通过乐观锁或悲观锁机制控制并发访问,确保更新操作的正确性。 --- ### 3.3 SQLite 中的 UPDATE 示例 以下是一些常见的 SQLite `UPDATE` 语句示例: #### 示例 1:更新单个字段 ```sql UPDATE user1 SET p = '456' WHERE u = 'sss'; ``` 该语句将更新 `user1` 表中 `u` 为 `'sss'` 的记录的 `p` 字段为 `'456'` [^2]。 #### 示例 2:更新多个字段 ```sql UPDATE COMPANY SET ADDRESS = 'Texas', SALARY = 20000.00 WHERE ID = 1; ``` 该语句将更新 `COMPANY` 表中 `ID` 为 `1` 的记录的 `ADDRESS` 和 `SALARY` 字段[^4]。 #### 示例 3:不使用 WHERE 子句更新所有行 ```sql UPDATE COMPANY SET ADDRESS = 'Texas', SALARY = 20000.00; ``` 该语句将更新 `COMPANY` 表中所有记录的 `ADDRESS` 和 `SALARY` 字段[^4]。 --- ### 3.4 SQLite UPDATE 语句的性能优化 为了提高 `UPDATE` 操作的性能,可以采取以下措施: - **索引优化**:对 `WHERE` 子句中使用的列建立索引,可以显著加快查询速度,从而提升更新效率。但需注意,频繁更新的列建立索引可能会影响写入性能。 - **批量更新**:若需更新大量数据,建议使用批量更新语句,减少数据库的 I/O 操作。例如: ```sql UPDATE Person SET Status = 'Inactive' WHERE RegistrationDate < '2020-01-01'; ``` 这种方式适用于定期清理或归档数据的场景。 - **避免不必要的列更新**:仅更新确实需要更改的列,避免无谓的列值更新,以减少日志记录和锁的持有时间。 - **合理使用触发器**:若更新操作涉及复杂的业务逻辑,可使用触发器自动执行相关操作。但需谨慎使用,避免触发器嵌套导致性能下降。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值