1)数据库查询
- 复杂查询:联表查询、分组、排序、聚合操作。
📌 学习目标
- 理解后端数据结构,优化前后端交互,减少不必要的接口调用。
- 编写前端 SQL 代码(如 GraphQL、Prisma、SQL 直接查询),提升全栈能力。
- 优化前端性能,避免不必要的数据库查询,提高数据交互效率。
- 理解数据库查询原理,更好地与后端工程师协作。
🧩 学习思考框架
1️⃣ 为什么要学习数据库查询?
在前端开发过程中,我们经常需要与数据库打交道,例如:
- 获取用户信息(如登录用户数据、个人资料)。
- 展示商品列表(如电商网站的商品展示)。
- 处理分页查询(如社交平台的动态流)。
- 进行搜索和筛选(如电商平台的商品筛选)。
数据库查询优化得好,可以减少后端请求次数,提高页面渲染速度,提升用户体验。
2️⃣ 数据库查询的基本概念
🟢 关系型数据库 vs. NoSQL
- 关系型数据库(SQL):如 MySQL、PostgreSQL,数据存储在表(Table)中,需要通过 SQL 语言查询。
- NoSQL 数据库:如 MongoDB,数据存储为文档(JSON 格式),查询方式不同。
🔹 前端通常用 SQL 进行查询,但 NoSQL 也会遇到(如 Firebase, MongoDB)。
3️⃣ SQL 查询基础
SQL(Structured Query Language) 是查询关系型数据库的语言。常见查询包括:
查询功能 | SQL 语句 | 应用场景 |
---|---|---|
查询所有数据 | SELECT * FROM users; | 获取用户列表 |
查询指定列 | SELECT name, email FROM users; | 仅获取用户的名称和邮箱 |
条件查询 | SELECT * FROM users WHERE age > 18; | 获取 18 岁以上的用户 |
排序 | SELECT * FROM users ORDER BY created_at DESC; | 按创建时间倒序获取用户 |
限制数据量 | SELECT * FROM users LIMIT 10; | 仅获取前 10 个用户 |
分页查询 | SELECT * FROM users LIMIT 10 OFFSET 20; | 获取第 3 页的用户(每页 10 个) |
4️⃣ SQL 进阶查询
在实际项目中,查询往往更复杂:
功能 | SQL 语句 | 应用场景 |
---|---|---|
关联查询(JOIN) | SELECT orders.id, users.name FROM orders JOIN users ON orders.user_id = users.id; | 获取订单及对应用户信息 |
分组统计 | SELECT category, COUNT(*) FROM products GROUP BY category; | 统计每个类别的商品数量 |
计算平均值 | SELECT AVG(price) FROM products; | 计算商品的平均价格 |
条件组合查询 | SELECT * FROM users WHERE age > 18 AND city = 'Beijing'; | 筛选符合多个条件的用户 |
5️⃣ 数据库查询优化
- 减少不必要的数据传输
- ❌
SELECT * FROM users;
- ✅
SELECT id, name FROM users;
- ❌
- 避免 N+1 查询问题
- ❌ 在前端循环发送查询请求
- ✅ 用
JOIN
语句一次获取完整数据
- 使用索引
- 例如:
CREATE INDEX idx_users_name ON users(name);
提高WHERE name = 'Tom'
的查询速度
- 例如:
提示
注意:以上的查询示例,我们不用刻意的去花较多时间记忆了。在 AI 时代,我们只需要知道如何去查询,查询什么,查询结果是什么,至于 SQL 语句,交给 AI 即可。
6️⃣ NoSQL 查询(MongoDB 示例)
如果数据库使用的是 MongoDB,你可能会看到类似这样的查询:
js
db.users.find({ age: { $gt: 18 } }); // 查询年龄大于18的用户
与 SQL 对应:
sql
SELECT * FROM users WHERE age > 18;
7️⃣ 前端如何与数据库交互?
REST API 查询(最常见)
- 前端调用后端 API,例如:js
fetch("/api/users") .then((response) => response.json()) .then((data) => console.log(data));
- 后端 SQL 代码:sql
SELECT * FROM users;
- 前端调用后端 API,例如:
GraphQL 查询
- GraphQL 允许前端更灵活地查询数据:graphql
query { users { id name } }
- GraphQL 允许前端更灵活地查询数据:
直接查询数据库(如前端全栈框架)
- 使用 ORM(如 Prisma, Sequelize)js
const users = await prisma.user.findMany();
- 使用 ORM(如 Prisma, Sequelize)
🎯 学习路径
阶段 | 目标 | 实践方式 |
---|---|---|
基础阶段 | 掌握 SQL 基础查询 | 在 SQLite / MySQL 中练习 SELECT 语句 |
进阶阶段 | 复杂查询、优化查询 | 练习 JOIN 、索引优化,在项目中分析 SQL 语句 |
应用阶段 | 结合前端项目使用数据库 | 使用 API 查询数据库,优化前后端交互 |
📌 练习
- 创建本地数据库
- 在 MySQL / SQLite 中创建
users
和orders
表,并插入数据。
- 在 MySQL / SQLite 中创建
- 练习查询
- 练习
SELECT
、WHERE
、ORDER BY
、JOIN
等语句。
- 练习
- 分析项目中的数据库查询
- 找到你正在开发的前端项目,分析 API 返回的数据是如何查询的。
📌 总结
- 关系型数据库(SQL)适用于结构化数据,NoSQL 适用于大规模数据存储。
- SQL 查询主要包括
SELECT
、WHERE
、JOIN
、GROUP BY
等。 - 前端通过 API 请求、GraphQL、ORM 访问数据库。
- 学会查询优化,减少数据传输,提高查询效率。
💡 思考:
- 你能用 SQL 查询你项目中的数据吗?
- 如何优化前后端数据交互,减少查询次数?
- 是否可以用 GraphQL/Prisma 让前端更灵活查询数据库?
🎯 下一步:开始练习 SQL 语句,尝试在真实项目中分析数据库查询! 🚀