SQLite 的 INSERT INTO 语句用于向表中添加新数据行。
INSERT INTO 有两种常见语法形式:
-- 插入数据并指定列名
INSERT INTO TABLE_NAME (column1, column2, ..., columnN)
VALUES (value1, value2, ..., valueN);
-- 不指定列名,直接插入数据
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 语句用于从数据库表中获取数据。
基本的 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 语句用于修改表中已存在的记录。
更新指定列的值:
-- 更新表中记录的某些列值
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 语句用于删除表中的记录。
删除指定条件的记录:
-- 删除符合条件的记录
DELETE FROM table_name
WHERE condition;
删除 ID = 3
的记录:
-- 删除 ID 为 3 的记录
DELETE FROM STUDENTS WHERE ID = 3;
WHERE 子句用于指定查询数据的条件。
-- 查询符合条件的数据
SELECT column1, column2, ... FROM table_name WHERE condition;
选择 AGE > 20
的学生记录:
-- 查询年龄大于 20 的学生记录
SELECT * FROM STUDENTS WHERE AGE > 20;
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;
ORDER BY 子句用于按指定列的升序(ASC)或降序(DESC)对结果进行排序。
-- 按指定列的顺序排序查询结果
SELECT column-list
FROM table_name
[WHERE condition]
[ORDER BY column1, column2, .. columnN] [ASC | DESC];
按 GENRE
升序排序:
-- 查询 MOVIES 表并按 GENRE 升序排列
SELECT * FROM MOVIES ORDER BY GENRE ASC;
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;
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;
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;