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

SQLite Insert 语句

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

语法

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

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

实例

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

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

向表中插入数据:

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

通过如下查询查看数据:

sql 复制代码
-- 查询 BOOKS 表中的所有数据
SELECT * FROM BOOKS;

使用一个表填充另一个表

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

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

SQLite Select 语句

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

语法

基本的 SELECT 语法:

sql 复制代码
-- 查询指定列的数据
SELECT column1, column2, ... FROM table_name;

若要查询所有列:

sql 复制代码
-- 查询所有列的数据
SELECT * FROM table_name;

实例

假设 MOVIES 表包含如下数据:

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

查询所有数据:

sql 复制代码
-- 查询 MOVIES 表中的所有数据
SELECT * FROM MOVIES;

查询特定列:

sql 复制代码
-- 查询 MOVIES 表中的特定列
SELECT TITLE, YEAR, GENRE FROM MOVIES;

设置输出格式

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

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

SQLite Update 语句

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

语法

更新指定列的值:

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

实例

假设 STUDENTS 表有如下数据:

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

更新 ID = 2 的记录:

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

SQLite Delete 语句

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

语法

删除指定条件的记录:

sql 复制代码
-- 删除符合条件的记录
DELETE FROM table_name
WHERE condition;

实例

删除 ID = 3 的记录:

sql 复制代码
-- 删除 ID 为 3 的记录
DELETE FROM STUDENTS WHERE ID = 3;

SQLite Where 子句

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

语法

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

实例

选择 AGE > 20 的学生记录:

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

SQLite Limit 子句

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

语法

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

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

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

实例

查询前 2 条记录:

sql 复制代码
-- 查询 MOVIES 表中的前 2 条记录
SELECT * FROM MOVIES LIMIT 2;

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

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

SQLite Order By 子句

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

语法

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

实例

GENRE 升序排序:

sql 复制代码
-- 查询 MOVIES 表并按 GENRE 升序排列
SELECT * FROM MOVIES ORDER BY GENRE ASC;

SQLite Group By 子句

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

语法

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

实例

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

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

SQLite Having 子句

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

语法

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

实例

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

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

SQLite Distinct 关键字

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

语法

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

实例

查询不同的 GENRE

sql 复制代码
-- 查询 MOVIES 表中不同的 GENRE
SELECT DISTINCT GENRE FROM MOVIES;

综合使用案例

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

sql 复制代码
-- 创建 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;
相关推荐
怀君1 小时前
Flutter——数据库Drift开发详细教程(四)
数据库·flutter
pqq的迷弟2 小时前
Redis的过期设置和策略
数据库·redis
JhonKI2 小时前
【MySQL】存储引擎 - CSV详解
android·数据库·mysql
闪电麦坤952 小时前
SQL:MySQL函数:字符串函数
数据库·mysql
不剪发的Tony老师2 小时前
Redis 8.0正式发布,再次开源为哪般?
数据库·redis
极小狐3 小时前
如何使用极狐GitLab 软件包仓库功能托管 ruby?
开发语言·数据库·人工智能·git·机器学习·gitlab·ruby
鱼儿也有烦恼4 小时前
Redis最新入门教程
数据库·redis·缓存
牛马程序小猿猴4 小时前
17.thinkphp的分页功能
前端·数据库
我科绝伦(Huanhuan Zhou)4 小时前
Oracle免费认证来袭
数据库·oracle
@CLoudbays_Martin115 小时前
CF后台如何设置TCP 和 UDP 端口?
大数据·运维·服务器·网络·数据库