跳到正文

SQL

中级通用

SQL 是用来查询和修改关系型数据库中数据的语言。它让你能按条件取出、汇总或更新记录,比如查出某位用户最近一周的订单,而不必把所有订单交给程序逐条筛选。

你可能会说:「帮我从订单数据里找出每位用户上周付了多少钱,不想把所有订单都读到程序里算。」

读之前建议先了解

动手看看

订单查询 · 数据快照截至 2025-03-31,共有 4 笔订单;下方展示数据库查询返回的结果。
SELECT id, created_at, amount
SELECT SUM(amount) AS total_amount
FROM orders WHERE user_id = 1001
AND created_at >= '2025-03-25';
查询结果 · 用户 1001
订单号  下单日期    金额
1042   2025-03-29   ¥128.00
1040   2025-03-27   ¥89.00
1031   2025-03-12   ¥256.00
1028   2025-03-05   ¥199.00
total_amount:128.001 笔符合条件的订单,合计 ¥128.00。
total_amount:384.002 笔符合条件的订单:128 + 256。
total_amount:89.001 笔符合条件的订单,合计 ¥89.00。
total_amount:288.002 笔符合条件的订单:89 + 199。
用户
时间范围
查询操作

切换用户、时间范围和查询操作,对照 SQL 与结果;也可以悬停订单行。这里模拟数据库返回结果,不是真的连接数据库。

SELECT 指定要取哪些列,FROM 指定订单表,WHERE 指定条件。数据库只返回符合条件的订单,不必把全部订单交给程序逐条筛选。

要点

  1. 1

    先描述想要什么数据

    写 SQL 时,你通常是在描述结果:从哪张表取数据、筛选哪些记录、按什么分组。比如后台要看每天的付款总额,就可以让数据库先汇总,再把结果返回给页面。

  2. 2

    查询和修改都能用到它

    SQL 不只用来读取数据,也能新增、更新和删除记录。你让 AI Agent 写修改订单状态的语句时,要说清楚目标订单和更新条件;条件写错,受影响的记录就可能超出预期。

  3. 3

    动态输入交给参数处理

    用户在搜索框输入的词,往往会成为查询条件。让程序通过参数传入这个值,而不是直接拼进 SQL 字符串,可以避免输入内容被当成语句的一部分执行。

容易混淆的地方

SQL 是操作数据的语言,不是存放数据的数据库;PostgreSQL 才是一种数据库系统。不同数据库支持的 SQL 写法会有差异,所以让 AI Agent 写语句时,告诉它项目用的是哪一种数据库,比只说“写一段 SQL”更容易得到能运行的结果。

什么时候用

适合用

  • 做订单后台,需要按付款状态和日期筛选记录,并按天汇总销售额。
  • 做用户管理功能,需要按用户编号查询资料或更新账户状态。
  • 做报表接口,希望数据库先完成筛选和汇总,再返回少量结果。

不适合用

  • 只是保存当前页面展开了哪个面板,这类临时界面状态放在前端状态中更合适。
  • 要存用户上传的原始图片文件,可以用对象存储;数据库只记录文件地址和关联信息。
  • 只能通过第三方服务提供的接口获取数据时,用它的 API,而不是尝试写 SQL 访问它的内部数据库。

练一练

你在做订单后台,要展示指定日期范围内每位用户已付款订单的总金额。订单存在 PostgreSQL 中,哪种做法更合适?

让 AI 帮你做

项目使用 PostgreSQL。请为订单后台写一段 SQL:按传入的起止日期筛选已付款订单,按用户汇总订单金额。日期用参数传入;先说明你假设的表名和字段名,不要直接执行修改数据的语句。

接下来学什么