欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 第五章 SQLite数据库:1、SQLite 基础语法及使用案例

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

2025/5/5 2:56:19 来源:https://blog.csdn.net/qq_62848032/article/details/147244027  浏览:    关键词:第五章 SQLite数据库:1、SQLite 基础语法及使用案例

SQLite 基础语法

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

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


一、基础语法规则

1. 大小写敏感性

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

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

2. 注释语法

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

3. SQL 语句结构

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

SELECT * FROM users;

二、数据定义语句(DDL)

1. 创建表

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

2. 修改表结构

ALTER TABLE products ADD COLUMN stock INTEGER DEFAULT 0;

三、数据操作语句(DML)

1. 插入数据

INSERT INTO products (name, price, category) 
VALUES ('Laptop', 4999.99, 'Electronics');

2. 查询数据

SELECT name, price 
FROM products 
WHERE price > 1000;

3. 更新数据

UPDATE products 
SET price = 4599.99 
WHERE name = 'Laptop';

4. 删除数据

DELETE FROM products 
WHERE price < 100;

四、查询条件与逻辑运算

1. WHERE 子句

用于设置查询条件:

SELECT * FROM products 
WHERE price BETWEEN 1000 AND 5000;

2. AND / OR 运算符

SELECT * FROM products 
WHERE price > 1000 AND stock > 0;

3. LIKE / GLOB 模糊匹配

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

4. IN / EXISTS 子句

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

五、分组与聚合函数

1. GROUP BY

SELECT category, COUNT(*) AS count 
FROM products 
GROUP BY category;

2. HAVING 子句

SELECT category, COUNT(*) 
FROM products 
GROUP BY category 
HAVING COUNT(*) > 1;

六、排序与限制

1. ORDER BY 排序

SELECT * FROM products 
ORDER BY price DESC;

2. LIMIT 限制行数

SELECT * FROM products 
ORDER BY price DESC 
LIMIT 5;

七、视图与虚拟表

1. 创建视图

CREATE VIEW expensive_products AS 
SELECT * FROM products 
WHERE price > 3000;

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

CREATE VIRTUAL TABLE articles 
USING fts5(title, content);

八、事务控制(ACID)

1. 开启事务

BEGIN;  -- 或 BEGIN TRANSACTION;
-- BEGIN EXCLUSIVE; 阻止其他连接访问数据库

2. 提交事务

COMMIT;

3. 回滚事务

ROLLBACK;

九、数据库管理

1. 附加数据库

ATTACH DATABASE 'sales.db' AS sales;
SELECT * FROM sales.orders;

十、索引与优化

1. 创建索引

CREATE INDEX idx_name ON products(name COLLATE NOCASE);

2. 删除索引

DROP INDEX idx_name;

3. ANALYZE 统计分析

ANALYZE;                       -- 分析所有表
ANALYZE main.products;         -- 分析特定表

十一、子查询用法

1. 子查询用于 WHERE 子句

SELECT * FROM products 
WHERE price > (SELECT AVG(price) FROM products
);

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

SELECT category, avg_price
FROM (SELECT category, AVG(price) AS avg_priceFROM productsGROUP BY category
)
WHERE avg_price > 1000;

十二、运算符示例

1. 算术运算符

SELECT 10 + 5, 10 % 3, 20 * 2, 10 / 2;

2. 比较运算符

SELECT * FROM products WHERE price >= 2000;

3. 逻辑运算符

SELECT * FROM products 
WHERE stock > 10 AND price < 1000;


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

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


🎯 场景目标:

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

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

1. 创建数据表

-- 创建产品表,包含主键、自增字段和价格非负约束
CREATE TABLE products (id INTEGER PRIMARY KEY AUTOINCREMENT,       -- 主键,自增产品IDname TEXT NOT NULL,                         -- 产品名称,不能为空category TEXT,                              -- 产品类别price REAL NOT NULL CHECK(price > 0)        -- 产品价格,必须为正数
);-- 创建订单表,包含外键关联产品ID、默认订单数量为1、默认当前日期
CREATE TABLE orders (id INTEGER PRIMARY KEY AUTOINCREMENT,       -- 主键,自增订单IDproduct_id INTEGER NOT NULL,                -- 外键,关联产品表quantity INTEGER DEFAULT 1,                 -- 订单数量,默认值为1order_date TEXT DEFAULT CURRENT_DATE,       -- 订单日期,默认是当前日期FOREIGN KEY (product_id) REFERENCES products(id)  -- 外键约束
);

2. 插入示例数据

-- 向 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. 查询各产品总销量

-- 使用 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. 创建视图:产品销售统计

-- 创建一个视图,将查询封装,便于后续重复使用
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 的产品

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

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

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

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

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

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

-- 启动事务,确保以下多条语句作为一个整体执行
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. 查询有销售记录的产品

-- 使用 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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词