当前位置: 首页 > news >正文

第五章 SQLite数据库:3、SQLite 常用语法及使用案例

SQLite Insert 语句

SQLite 的 INSERT INTO 语句用于向表中添加新数据行

语法

INSERT INTO 有两种常见语法形式:

  1. 使用列名指定要插入的列:
-- 插入数据并指定列名
INSERT INTO TABLE_NAME (column1, column2, ..., columnN)  
VALUES (value1, value2, ..., valueN);
  1. 不指定列名,按顺序插入数据(确保值与表列的顺序一致):
-- 不指定列名,直接插入数据
INSERT INTO TABLE_NAME 
VALUES (value1, value2, ..., valueN);

实例

假设我们在数据库 Library.db 中有一个 BOOKS 表:

-- 创建 BOOKS 表
CREATE TABLE BOOKS(ID INTEGER PRIMARY KEY NOT NULL,  -- 主键列,不能为空TITLE TEXT NOT NULL,  -- 书名列,不能为空AUTHOR TEXT NOT NULL,  -- 作者列,不能为空PUBLISH_YEAR INTEGER,  -- 出版年份列PRICE REAL  -- 价格列
);

向表中插入数据:

-- 向 BOOKS 表插入数据
INSERT INTO BOOKS (ID, TITLE, AUTHOR, PUBLISH_YEAR, PRICE)
VALUES (1, 'The Great Gatsby', 'F. Scott Fitzgerald', 1925, 10.99);

通过如下查询查看数据:

-- 查询 BOOKS 表中的所有数据
SELECT * FROM BOOKS;

使用一个表填充另一个表

使用 SELECT 语句从一个表填充数据到另一个表:

-- 从第二个表中选择数据并插入到第一个表
INSERT INTO first_table [(column1, column2, ...)]
SELECT column1, column2, ...
FROM second_table
WHERE condition;

SQLite Select 语句

SQLite 的 SELECT 语句用于从数据库表中获取数据

语法

基本的 SELECT 语法:

-- 查询指定列的数据
SELECT column1, column2, ... FROM table_name;

若要查询所有列:

-- 查询所有列的数据
SELECT * FROM table_name;

实例

假设 MOVIES 表包含如下数据:

-- 创建 MOVIES 表
CREATE TABLE MOVIES(ID INTEGER PRIMARY KEY,  -- 主键TITLE TEXT NOT NULL,  -- 电影名称,不能为空DIRECTOR TEXT NOT NULL,  -- 导演,不能为空YEAR INTEGER,  -- 发布年份GENRE TEXT  -- 电影类型
);

查询所有数据:

-- 查询 MOVIES 表中的所有数据
SELECT * FROM MOVIES;

查询特定列:

-- 查询 MOVIES 表中的特定列
SELECT TITLE, YEAR, GENRE FROM MOVIES;

设置输出格式

调整输出格式,以便更清晰查看结果:

-- 打开表头显示,查询结果第一行会显示字段名(列名)
.headers on
-- 设置输出模式为“列”模式,这样结果会按列整齐对齐显示
.mode column
-- 查询 MOVIES 表中的所有数据
SELECT * FROM MOVIES;

SQLite Update 语句

SQLite 的 UPDATE 语句用于修改表中已存在的记录

语法

更新指定列的值:

-- 更新表中记录的某些列值
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

实例

假设 STUDENTS 表有如下数据:

-- 创建 STUDENTS 表
CREATE TABLE STUDENTS(ID INTEGER PRIMARY KEY,  -- 学生 ID,主键NAME TEXT NOT NULL,  -- 学生姓名,不能为空AGE INTEGER,  -- 学生年龄MAJOR TEXT  -- 学生专业
);

更新 ID = 2 的记录:

-- 更新 ID 为 2 的学生记录
UPDATE STUDENTS SET AGE = 23, MAJOR = 'Data Science' WHERE ID = 2;

SQLite Delete 语句

SQLite 的 DELETE 语句用于删除表中的记录

语法

删除指定条件的记录:

-- 删除符合条件的记录
DELETE FROM table_name
WHERE condition;

实例

删除 ID = 3 的记录:

-- 删除 ID 为 3 的记录
DELETE FROM STUDENTS WHERE ID = 3;

SQLite Where 子句

WHERE 子句用于指定查询数据的条件

语法

-- 查询符合条件的数据
SELECT column1, column2, ... FROM table_name WHERE condition;

实例

选择 AGE > 20 的学生记录:

-- 查询年龄大于 20 的学生记录
SELECT * FROM STUDENTS WHERE AGE > 20;

SQLite Limit 子句

LIMIT 子句用于限制查询结果的行数

语法

-- 限制查询结果的返回行数
SELECT column1, column2, ... FROM table_name LIMIT number_of_rows;

下面是 LIMIT 子句与 OFFSET 子句一起使用时的语法

-- 限制查询返回的行数,并指定起始位置
SELECT column1, column2, ... FROM table_name LIMIT number_of_rows OFFSET row_num;

实例

查询前 2 条记录:

-- 查询 MOVIES 表中的前 2 条记录
SELECT * FROM MOVIES LIMIT 2;

查询从第 2 条开始的 3 条记录:

-- 查询 MOVIES 表中从第 2 条开始的 3 条记录
SELECT * FROM MOVIES LIMIT 3 OFFSET 2;

SQLite Order By 子句

ORDER BY 子句用于按指定列的升序(ASC)或降序(DESC)对结果进行排序

语法

-- 按指定列的顺序排序查询结果
SELECT column-list 
FROM table_name 
[WHERE condition] 
[ORDER BY column1, column2, .. columnN] [ASC | DESC];
  • ASC 默认值,从小到大,升序排列
  • DESC 从大到小,降序排列

实例

GENRE 升序排序:

-- 查询 MOVIES 表并按 GENRE 升序排列
SELECT * FROM MOVIES ORDER BY GENRE ASC;

SQLite Group By 子句

GROUP BY 子句用于将数据分组,并按组进行聚合操作

语法

-- 根据指定列分组数据,并可结合聚合函数
SELECT column-list
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2....columnN
ORDER BY column1, column2....columnN

实例

GENRE 分组并计算每个类别的电影数量:

-- 查询 MOVIES 表,按 GENRE 分组并计算每个 GENRE 的电影数量
SELECT GENRE, COUNT(*) FROM MOVIES GROUP BY GENRE;

SQLite Having 子句

HAVING 子句用于过滤由 GROUP BY 子句返回的分组结果

语法

-- 过滤由 GROUP BY 子句分组后的结果
SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2

实例

选择每个 GENRE 中电影数量大于 1 的记录:

-- 查询 MOVIES 表中,GENRE 下的电影数量大于 1 的记录
SELECT GENRE, COUNT(*) FROM MOVIES GROUP BY GENRE HAVING COUNT(*) > 1;

SQLite Distinct 关键字

DISTINCT 关键字用于去除查询结果中的重复记录

语法

-- 查询唯一的记录
SELECT DISTINCT column1, column2, ..... FROM table_name WHERE [condition]

实例

查询不同的 GENRE

-- 查询 MOVIES 表中不同的 GENRE
SELECT DISTINCT GENRE FROM MOVIES;

综合使用案例

以下是一个综合的使用案例,展示了如何使用 SQLite 执行常见操作:

-- 创建 MOVIES 表
CREATE TABLE MOVIES(ID INTEGER PRIMARY KEY,  -- 主键TITLE TEXT NOT NULL,  -- 电影名称,不能为空DIRECTOR TEXT NOT NULL,  -- 导演,不能为空YEAR INTEGER,  -- 发布年份GENRE TEXT  -- 电影类型
);-- 插入数据
INSERT INTO MOVIES (ID, TITLE, DIRECTOR, YEAR, GENRE)
VALUES
(1, 'Inception', 'Christopher Nolan', 2010, 'Sci-Fi'),
(2, 'The Dark Knight', 'Christopher Nolan', 2008, 'Action'),
(3, 'Parasite', 'Bong Joon-ho', 2019, 'Drama');-- 查询所有记录
SELECT * FROM MOVIES;-- 更新数据
UPDATE MOVIES SET GENRE = 'Action' WHERE ID = 1;-- 删除记录
DELETE FROM MOVIES WHERE ID = 3;-- 使用 GROUP BY 和 HAVING 过滤数据
SELECT GENRE, COUNT(*) FROM MOVIES GROUP BY GENRE HAVING COUNT(*) > 1;-- 使用 LIMIT 和 OFFSET 分页查询
SELECT * FROM MOVIES LIMIT 2 OFFSET 1;-- 排序数据
SELECT * FROM MOVIES ORDER BY YEAR DESC;

相关文章:

  • Lesson 12 Goodbye and good luck
  • 《TCP/IP网络编程》学习笔记 | Chapter 24:制作 HTTP 服务器端
  • C#winform主线程刷新UI时竟抛异常“从不是创建控件的线程访问它“
  • c++STL——vector的使用和模拟实现
  • 【Android 】ContentProvider深度解析
  • ssh用户秘钥登录设置
  • 接口测试:实用指南4.0
  • 医疗设备预测性维护合规架构:从法规遵循到技术实现的深度解析
  • Electricity Market Optimization(VI) - 机组组合模型以及 Gurobi 求解
  • 20250417-vue-条件插槽
  • uview1.0 tabs组件放到u-popup中在微信小程序中滑块样式错乱
  • Java深入
  • Qt常见按钮类控件属性及其使用
  • 微前端架构
  • 盘古-ultra:不用英伟达GPU,华为发布全新大模型
  • SpringBoot高校学生评教系统设计实现
  • MCP 与 A2A 协议:构建复杂 AI 系统的协同基石
  • 【时时三省】(C语言基础)用while语句实现循环
  • 消息队列通信原理与实现
  • 什么是人工智能芯片?
  • 建行一季度净利833.51亿同比下降3.99%,营收降5.4%
  • 上海开花区域结果,这项田径大赛为文旅商体展联动提供新样本
  • 石家庄:城市更新,生活向美
  • 纪念|海上金石学的兴盛与王昶《金石萃编》
  • AI观察|算力饥渴与泡沫
  • 瞄准“美丽健康”赛道,上海奉贤如何打造宜居宜业之城?