Skip to content

1)数据库查询

  • 复杂查询:联表查询、分组、排序、聚合操作。

📌 学习目标

  1. 理解后端数据结构,优化前后端交互,减少不必要的接口调用。
  2. 编写前端 SQL 代码(如 GraphQL、Prisma、SQL 直接查询),提升全栈能力。
  3. 优化前端性能,避免不必要的数据库查询,提高数据交互效率。
  4. 理解数据库查询原理,更好地与后端工程师协作。

🧩 学习思考框架

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️⃣ 前端如何与数据库交互?

  1. REST API 查询(最常见)

    • 前端调用后端 API,例如:
      js
      fetch("/api/users")
        .then((response) => response.json())
        .then((data) => console.log(data));
    • 后端 SQL 代码:
      sql
      SELECT * FROM users;
  2. GraphQL 查询

    • GraphQL 允许前端更灵活地查询数据:
      graphql
      query {
        users {
          id
          name
        }
      }
  3. 直接查询数据库(如前端全栈框架)

    • 使用 ORM(如 Prisma, Sequelize)
      js
      const users = await prisma.user.findMany();

🎯 学习路径

阶段目标实践方式
基础阶段掌握 SQL 基础查询在 SQLite / MySQL 中练习 SELECT 语句
进阶阶段复杂查询、优化查询练习 JOIN、索引优化,在项目中分析 SQL 语句
应用阶段结合前端项目使用数据库使用 API 查询数据库,优化前后端交互

📌 练习

  1. 创建本地数据库
    • 在 MySQL / SQLite 中创建 usersorders 表,并插入数据。
  2. 练习查询
    • 练习 SELECTWHEREORDER BYJOIN 等语句。
  3. 分析项目中的数据库查询
    • 找到你正在开发的前端项目,分析 API 返回的数据是如何查询的。

📌 总结

  1. 关系型数据库(SQL)适用于结构化数据,NoSQL 适用于大规模数据存储。
  2. SQL 查询主要包括 SELECTWHEREJOINGROUP BY 等。
  3. 前端通过 API 请求GraphQLORM 访问数据库。
  4. 学会查询优化,减少数据传输,提高查询效率。

💡 思考:

  • 你能用 SQL 查询你项目中的数据吗?
  • 如何优化前后端数据交互,减少查询次数?
  • 是否可以用 GraphQL/Prisma 让前端更灵活查询数据库?

🎯 下一步:开始练习 SQL 语句,尝试在真实项目中分析数据库查询! 🚀