第五章 SQLite数据库:1、SQLite 基础语法及使用案例

SQLite 基础语法

SQLite 是轻量级的嵌入式数据库,支持大多数标准 SQL 语法,以下是其常用语法的整理与示例。

📚 参考资料:SQLite 语法 | 菜鸟教程


一、基础语法规则

1. 大小写敏感性

SQLite 的 SQL 关键字默认不区分大小写,但字符串匹配操作符(如 GLOB)是大小写敏感的。

sql 复制代码
SELECT 'apple' GLOB 'A*';  -- 返回 0,因为 GLOB 区分大小写
SELECT 'apple' LIKE 'a%';  -- 返回 1,LIKE 不区分大小写(默认)

2. 注释语法

  • 单行注释 :以 -- 开始
  • 多行注释 :使用 /* ... */
sql 复制代码
-- 单行注释
/* 
多行注释 
可用于文档注释
*/

3. SQL 语句结构

每条 SQL 语句以关键字开头,以分号 ; 结尾:

sql 复制代码
SELECT * FROM users;

二、数据定义语句(DDL)

1. 创建表

sql 复制代码
CREATE TABLE products (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    price REAL DEFAULT 0.0,
    category TEXT
);

2. 修改表结构

sql 复制代码
ALTER TABLE products ADD COLUMN stock INTEGER DEFAULT 0;

三、数据操作语句(DML)

1. 插入数据

sql 复制代码
INSERT INTO products (name, price, category) 
VALUES ('Laptop', 4999.99, 'Electronics');

2. 查询数据

sql 复制代码
SELECT name, price 
FROM products 
WHERE price > 1000;

3. 更新数据

sql 复制代码
UPDATE products 
SET price = 4599.99 
WHERE name = 'Laptop';

4. 删除数据

sql 复制代码
DELETE FROM products 
WHERE price < 100;

四、查询条件与逻辑运算

1. WHERE 子句

用于设置查询条件:

sql 复制代码
SELECT * FROM products 
WHERE price BETWEEN 1000 AND 5000;

2. AND / OR 运算符

sql 复制代码
SELECT * FROM products 
WHERE price > 1000 AND stock > 0;

3. LIKE / GLOB 模糊匹配

sql 复制代码
SELECT name FROM products 
WHERE name LIKE 'L%';   -- 匹配以 L 开头
SELECT name FROM products 
WHERE name GLOB 'L*';   -- 同上但区分大小写

4. IN / EXISTS 子句

sql 复制代码
SELECT * FROM products 
WHERE name IN ('Laptop', 'Tablet');
sql 复制代码
SELECT * FROM products 
WHERE EXISTS (
    SELECT 1 FROM orders 
    WHERE orders.product_id = products.id
);

五、分组与聚合函数

1. GROUP BY

sql 复制代码
SELECT category, COUNT(*) AS count 
FROM products 
GROUP BY category;

2. HAVING 子句

sql 复制代码
SELECT category, COUNT(*) 
FROM products 
GROUP BY category 
HAVING COUNT(*) > 1;

六、排序与限制

1. ORDER BY 排序

sql 复制代码
SELECT * FROM products 
ORDER BY price DESC;

2. LIMIT 限制行数

sql 复制代码
SELECT * FROM products 
ORDER BY price DESC 
LIMIT 5;

七、视图与虚拟表

1. 创建视图

sql 复制代码
CREATE VIEW expensive_products AS 
SELECT * FROM products 
WHERE price > 3000;

2. 创建全文搜索虚拟表(FTS)

sql 复制代码
CREATE VIRTUAL TABLE articles 
USING fts5(title, content);

八、事务控制(ACID)

1. 开启事务

sql 复制代码
BEGIN;  -- 或 BEGIN TRANSACTION;
-- BEGIN EXCLUSIVE; 阻止其他连接访问数据库

2. 提交事务

sql 复制代码
COMMIT;

3. 回滚事务

sql 复制代码
ROLLBACK;

九、数据库管理

1. 附加数据库

sql 复制代码
ATTACH DATABASE 'sales.db' AS sales;
SELECT * FROM sales.orders;

十、索引与优化

1. 创建索引

sql 复制代码
CREATE INDEX idx_name ON products(name COLLATE NOCASE);

2. 删除索引

sql 复制代码
DROP INDEX idx_name;

3. ANALYZE 统计分析

sql 复制代码
ANALYZE;                       -- 分析所有表
ANALYZE main.products;         -- 分析特定表

十一、子查询用法

1. 子查询用于 WHERE 子句

sql 复制代码
SELECT * FROM products 
WHERE price > (
    SELECT AVG(price) FROM products
);

2. 子查询用于 FROM 子句(派生表)

sql 复制代码
SELECT category, avg_price
FROM (
    SELECT category, AVG(price) AS avg_price
    FROM products
    GROUP BY category
)
WHERE avg_price > 1000;

十二、运算符示例

1. 算术运算符

sql 复制代码
SELECT 10 + 5, 10 % 3, 20 * 2, 10 / 2;

2. 比较运算符

sql 复制代码
SELECT * FROM products WHERE price >= 2000;

3. 逻辑运算符

sql 复制代码
SELECT * FROM products 
WHERE stock > 10 AND price < 1000;


🔍 SQLite 综合应用案例(含详细注释)

本案例涵盖 SQLite 多种语法的协同应用,模拟一个简易的产品销售系统,包括表结构定义、数据插入、查询、视图创建、索引优化、事务控制和高级子查询等。


🎯 场景目标:

构建一个包含产品与订单的数据库,实现如下功能:

  • 插入产品和订单数据
  • 查询销量与销售额
  • 使用视图简化查询
  • 使用子查询筛选销售额高于平均值的产品
  • 使用事务保障订单插入的原子性
  • 添加索引提升查询效率

1. 创建数据表

sql 复制代码
-- 创建产品表,包含主键、自增字段和价格非负约束
CREATE TABLE products (
    id INTEGER PRIMARY KEY AUTOINCREMENT,       -- 主键,自增产品ID
    name TEXT NOT NULL,                         -- 产品名称,不能为空
    category TEXT,                              -- 产品类别
    price REAL NOT NULL CHECK(price > 0)        -- 产品价格,必须为正数
);

-- 创建订单表,包含外键关联产品ID、默认订单数量为1、默认当前日期
CREATE TABLE orders (
    id INTEGER PRIMARY KEY AUTOINCREMENT,       -- 主键,自增订单ID
    product_id INTEGER NOT NULL,                -- 外键,关联产品表
    quantity INTEGER DEFAULT 1,                 -- 订单数量,默认值为1
    order_date TEXT DEFAULT CURRENT_DATE,       -- 订单日期,默认是当前日期
    FOREIGN KEY (product_id) REFERENCES products(id)  -- 外键约束
);

2. 插入示例数据

sql 复制代码
-- 向 products 表插入 4 条产品记录
INSERT INTO products (name, category, price) VALUES 
('Laptop', 'Electronics', 5000),   -- 笔记本电脑
('Phone', 'Electronics', 3000),    -- 手机
('Desk', 'Furniture', 800),        -- 桌子
('Chair', 'Furniture', 400);       -- 椅子

-- 向 orders 表插入若干订单记录
INSERT INTO orders (product_id, quantity) VALUES 
(1, 2),  -- Laptop ×2
(2, 3),  -- Phone ×3
(2, 1),  -- Phone ×1
(3, 5),  -- Desk ×5
(4, 2);  -- Chair ×2

3. 查询各产品总销量

sql 复制代码
-- 使用 JOIN 连接产品和订单,统计每种产品的销量
SELECT 
    p.name,                          -- 产品名称
    SUM(o.quantity) AS total_sold   -- 销量合计
FROM 
    products p
JOIN 
    orders o ON p.id = o.product_id -- 联结条件:订单中的产品ID = 产品表的ID
GROUP BY 
    p.name                           -- 按产品名称分组
ORDER BY 
    total_sold DESC;                 -- 按销量降序排列

4. 创建视图:产品销售统计

sql 复制代码
-- 创建一个视图,将查询封装,便于后续重复使用
CREATE VIEW product_sales AS
SELECT 
    p.name,                                   -- 产品名称
    p.category,                               -- 产品类别
    SUM(o.quantity) AS total_sold,            -- 总销量
    SUM(o.quantity * p.price) AS total_revenue -- 销售总额 = 数量 × 单价
FROM 
    products p
JOIN 
    orders o ON p.id = o.product_id
GROUP BY 
    p.id;  -- 按产品ID分组,确保唯一

5. 查询销售额超过 5000 的产品

sql 复制代码
-- 查询视图中销售额超过 5000 的产品
SELECT * 
FROM product_sales
WHERE total_revenue > 5000;

6. 子查询:筛选销售额高于平均值的产品

sql 复制代码
-- 使用子查询获得平均销售额,再筛选高于平均值的产品
SELECT 
    name, total_revenue
FROM 
    product_sales
WHERE 
    total_revenue > (
        SELECT AVG(total_revenue) FROM product_sales
    );

7. 创建索引提升查询性能

sql 复制代码
-- 为订单表中的 product_id 创建索引,加快联表查询速度
CREATE INDEX idx_orders_product_id 
ON orders(product_id);

8. 使用事务安全地插入订单

sql 复制代码
-- 启动事务,确保以下多条语句作为一个整体执行
BEGIN TRANSACTION;

-- 插入多条订单记录
INSERT INTO orders (product_id, quantity) VALUES (1, 1);  -- Laptop
INSERT INTO orders (product_id, quantity) VALUES (2, 1);  -- Phone
INSERT INTO orders (product_id, quantity) VALUES (3, 2);  -- Desk

-- 提交事务,保存更改
COMMIT;

9. 查询有销售记录的产品

sql 复制代码
-- 使用 EXISTS 子句判断某产品是否出现在订单表中
SELECT name 
FROM products
WHERE EXISTS (
    SELECT 1 FROM orders 
    WHERE orders.product_id = products.id
);

✅ 技术要点总结

功能模块 使用语法
数据结构定义 CREATE TABLE, FOREIGN KEY, CHECK
数据操作 INSERT, SELECT, UPDATE, DELETE
查询优化 INDEX, GROUP BY, ORDER BY
查询进阶 JOIN, VIEW, SUBQUERY, EXISTS
数据一致性 TRANSACTION, COMMIT, ROLLBACK

相关推荐
独行soc17 分钟前
2025年渗透测试面试题总结-某服面试经验分享(附回答)(题目+回答)
linux·运维·服务器·网络安全·面试·职场和发展·渗透测试
sunshineine1 小时前
jupyter notebook运行简单程序
linux·windows·python
weixin_376934631 小时前
JDK Version Manager (JVMS)
java·开发语言
怀君1 小时前
Flutter——数据库Drift开发详细教程(四)
数据库·flutter
月月大王1 小时前
easyexcel导出动态写入标题和数据
java·服务器·前端
O。o.尊都假都1 小时前
UDP协议
linux·服务器·网络·网络协议·udp
pqq的迷弟2 小时前
Redis的过期设置和策略
数据库·redis
JhonKI2 小时前
【MySQL】存储引擎 - CSV详解
android·数据库·mysql
天夏已微凉2 小时前
1.3.1 Linux音频框架alsa详细介绍
linux·音视频
2501_916013742 小时前
从一次被抄袭经历谈起:iOS App 安全保护实战
websocket·网络协议·tcp/ip·http·网络安全·https·udp