图片由 Freepik
SQL(即标准查询语言)是一种用于在关系数据库管理系统 (RDBMS) 中管理和操作数据的编程语言。它是许多公司使用的标准语言,可帮助企业顺利访问数据。因为它被广泛使用,所以工作中通常将 SQL 作为必备技能之一。这就是为什么学习 SQL 非常重要。
人们在学习 SQL 时常见的问题之一是理解查询,主要是当另一个人编写查询时。我们在公司中作为一个团队工作,经常需要阅读和理解他们的 SQL 查询。因此,我们需要练习解构 SQL 查询并理解它们。
本文将逐步介绍阅读和理解 SQL 查询的过程。我们该怎么做呢?让我们开始吧。
当遇到SQL查询时,我们要做的第一件事就是了解SQL查询的一般意图。一般意图并不意味着我们完全了解查询的结构;更多的是关于整体流量。
我们应该先了解标准的 SQL 查询,才能了解一般的 SQL 查询。大多数 SQL 查询都以 选择 条款并遵循 从 条款。从那里继续,查询之后最常见的是 注册, 在, 通过...分组, 订购依据, 和 HAVING 条款。
上面的子句是我们需要理解的SQL查询中的标准子句。对于每个子句,它们的功能是:
- 选择:将从表中取出哪些列
- 从: 数据来自哪个表
- 注册:合并具有指定标识符的表
- 在:根据条件过滤数据
- 通过...分组:根据列的值组织数据并允许执行聚合功能。
- ORDER BY:根据特定列排列数据结果顺序
- HAVING:不能指定聚合函数的过滤条件 在
这些是标准子句,也是您在了解一般 SQL 查询结构时应该首先找到的内容。让我们使用示例代码来进一步学习。
SELECT
customers.name,
purchases.product,
SUM(price) as total_price
FROM
purchases
JOIN customers ON purchases.cust_id = customers.id
WHERE
purchases.category = 'kitchen'
GROUP BY
customers.name,
purchases.product
HAVING
total_price > 10000
ORDER BY
total_price DESC;
当您查看上面的查询时,请尝试识别标准子句。该子句将使您了解选择了哪些数据(选择),它来自(从 和 注册),以及条件(在, 通过...分组, ORDER BY及 HAVING).
例如,阅读上面的查询将使您了解以下内容:
- 我们尝试获取三种不同类型的数据:来自名为“customers”的表的名称、来自名为“purchasing”的表的产品以及价格列的聚合,这些价格列不标识该表的来源,并且具有别名total_price(来自子句的信息) 选择).
- 总体数据将来自购买和客户表,这些表使用购买中的 cust_id 列和客户表中的 id 列连接在一起(子句中的信息) 从) 和 注册).
- 我们只会选择购买表中类别列值为“厨房”的数据(来自子句的信息 在),
- 聚合函数的组,其名称和产品列来自相应的表(来自子句的信息 通过...分组),
- 也从聚合函数结果总和中过滤,其中total_price 大于 10000(来自子句的信息 HAVING),
- 根据total_price(来自子句的信息)对数据进行降序排序 ORDER BY).
这就是您需要了解和识别的一般 SQL 查询结构。从那里,我们可以进一步探索高级查询。让我们继续下一步。
有时候你会遇到一个复杂的查询,其中有很多 选择 子句存在于同一查询中。在这种情况下,我们应该了解查询的最终结果或最终(第一个) 选择 你在查询中看到。关键是要知道查询输出想要什么。
让我们使用更复杂的代码,如下所示。
WITH customerspending AS (
SELECT
customers.id,
SUM(purchases.price) as total_spending
FROM
purchases
JOIN customers ON purchases.cust_id = customers.id
GROUP BY
customers.id
)
SELECT
c.name,
pd.product,
pd.total_product_price,
cs.total_spending
FROM
(
SELECT
purchases.cust_id,
purchases.product,
SUM(purchases.price) as total_product_price
FROM
purchases
WHERE
purchases.category = 'kitchen'
GROUP BY
purchases.cust_id,
purchases.product
HAVING
SUM(purchases.price) > 10000
) AS pd
JOIN customers c ON pd.cust_id = c.id
JOIN customerspending cs ON c.id = cs.id
ORDER BY
pd.total_product_price DESC;
现在查询看起来更复杂、更长,但最初的重点应该是最终的 选择, 这似乎试图产生客户的总支出和购买历史记录。尝试评估最终结果并从那里分解它。
我们对结果的洞察应该来自于查询。接下来就是看看最终的条件是什么 选择 是。条件条款,包括 在, 通过...分组, ORDER BY及 HAVING 是控制总体数据结果的人。
尝试阅读并理解我们的查询条件,我们将更好地理解查询的最终结果。例如,在我们之前的 SQL 查询中,最终条件只是 ORDER BY。这意味着最终结果将按照产品总价降序排列。
了解最终条件将有助于您理解查询的重要部分和整体查询意图。
最后,我们需要了解数据来自哪里。了解了要选择的数据以及获取数据的条件后,我们需要了解数据的来源。决赛 注册 子句将使我们了解表如何交互和数据流。
例如,前面的复杂查询显示我们执行了两次 Join。这意味着我们至少使用了三个数据源来获得最终结果。在后续步骤中,需要此信息来进一步了解每个数据源的来源,尤其是当数据源来自子查询时。
在了解了最终结果应该如何以及它从何而来之后,我们需要仔细查看细节。从这里,我们将回溯到每个子查询并理解为什么它们是这样的结构。
然而,我们并不试图以自上而下的结构来看待它们。相反,我们应该尝试查看更接近最终结果的子查询,然后向上移动到距最终结果最远的子查询。从上面的代码示例中,我们应该首先尝试理解这段代码:
SELECT
purchases.cust_id,
purchases.product,
SUM(purchases.price) as total_product_price
FROM
purchases
WHERE
purchases.category = 'kitchen'
GROUP BY
purchases.cust_id,
purchases.product
HAVING
SUM(purchases.price) > 10000
然后,我们转向最远的代码,即:
WITH customerspending AS (
SELECT
customers.id,
SUM(purchases.price) as total_spending
FROM
purchases
JOIN customers ON purchases.cust_id = customers.id
GROUP BY
customers.id
)
当我们将每个子查询从距离结果较近的子查询到最远的子查询分解时,我们可以清楚地追踪作者的思维过程。
如果您需要帮助理解每个子查询,请尝试重复上述过程。通过一些练习,您将在阅读和理解查询方面获得更好的体验。
阅读和理解 SQL 查询是现代每个人都应该具备的技能,因为每个公司都会处理它们。通过使用以下分步指南,您将有更好的时间来理解复杂的 SQL 查询。步骤包括:
- 了解一般 SQL 查询结构
- 了解最终选择
- 了解最终条件条款
- 了解最终连接
- 倒序阅读并重复
科尼利厄斯·尤达·维贾亚 是一名数据科学助理经理和数据作家。 在 Allianz Indonesia 全职工作期间,他喜欢通过社交媒体和写作媒体分享 Python 和数据技巧。
- SEO 支持的内容和 PR 分发。 今天得到放大。
- PlatoData.Network 垂直生成人工智能。 赋予自己力量。 访问这里。
- 柏拉图爱流。 Web3 智能。 知识放大。 访问这里。
- 柏拉图ESG。 碳, 清洁科技, 能源, 环境, 太阳能, 废物管理。 访问这里。
- 柏拉图健康。 生物技术和临床试验情报。 访问这里。
- Sumber: https://www.kdnuggets.com/a-step-by-step-guide-to-reading-and-understanding-sql-queries?utm_source=rss&utm_medium=rss&utm_campaign=a-step-by-step-guide-to-reading-and-understanding-sql-queries
- :是
- :不是
- :在哪里
- $UP
- 12
- 17
- 9
- a
- 关于
- 以上
- ACCESS
- 根据
- 高级
- 后
- 聚合
- 安联
- 让
- an
- 和
- 另一个
- 保健
- 刊文
- AS
- 评估
- 助理
- At
- 作者
- 基于
- BE
- 因为
- 开始
- 如下。
- 更好
- 午休
- 企业
- 但是
- by
- 被称为
- 来了
- CAN
- 不能
- 案件
- 产品类别
- 明确地
- 接近
- 码
- 柱
- 列
- 结合
- 如何
- 购买的订单均
- 未来
- 相当常见
- 公司
- 公司
- 复杂
- 流程条件
- 条件
- 继续
- 受控
- cs
- 顾客
- 合作伙伴
- data
- 数据科学
- 数据库
- 交易
- 详情
- 不同
- do
- 不会
- 别
- 向下
- 每
- 雇用
- 遭遇
- 遇到
- 完全
- 时代
- 特别
- 必要
- 所有的
- 每个人
- 例子
- 存在
- 体验
- 探索
- 过滤
- 最后
- 找到最适合您的地方
- 姓氏:
- 流
- 流动
- 专注焦点
- 遵循
- 其次
- 以下
- 针对
- 止
- 功能
- 功能
- 进一步
- 其他咨询
- 得到
- 给
- 团队
- 指南
- 有
- 有
- he
- 帮助
- 此处
- 历史
- 创新中心
- HTTPS
- ID
- 识别码
- 鉴定
- if
- in
- 包括
- 包含
- 印度尼西亚
- 信息
- 初始
- 洞察
- 代替
- 意图
- 相互作用
- 成
- IT
- 加入
- JPG
- 掘金队
- 键
- 种
- 知道
- 语言
- 后来
- 学习用品
- 学习
- 最少
- 喜欢
- 不再
- 看
- 爱
- 主要
- 颠覆性技术
- 管理系统
- 经理
- 管理的
- 操纵
- 许多
- 意味着
- 手段
- 媒体
- 现代
- 更多
- 最先进的
- 移动
- 移动
- 姓名
- 必要
- 需求
- 下页
- 现在
- of
- 经常
- on
- 一
- 那些
- 仅由
- or
- 秩序
- 我们的
- 产量
- 最划算
- 部分
- 员工
- 执行
- 人
- 柏拉图
- 柏拉图数据智能
- 柏拉图数据
- 在练习上
- 以前
- 车资
- 问题
- 过程
- 生产
- 产品
- 代码编程
- 提供
- 采购
- 购买
- 蟒蛇
- 查询
- 询问
- 阅读
- 阅读
- 重复
- 那些
- 导致
- 反转
- s
- 同
- 科学
- 看到
- 似乎
- 选择
- 选
- Share
- 应该
- 作品
- 显著
- 技能
- 技能
- 顺利
- So
- 社会
- 社会化媒体
- 一些
- 来源
- 来源
- 具体的
- 指定
- 花费
- SQL
- 标准
- 开始
- 步
- 步骤
- 结构体
- 结构化
- 结构
- 总和
- 系统
- 表
- 拍摄
- 团队
- 比
- 这
- 其
- 他们
- 那里。
- 他们
- 事
- Free Introduction
- 思想
- 三
- 通过
- 次
- 秘诀
- 至
- 一起
- 合计
- 跟踪时
- 尝试
- 两次
- 理解
- 理解
- us
- 使用
- 用过的
- 运用
- 平时
- 折扣值
- 通过
- 走
- 希望
- we
- 井
- 什么是
- ,尤其是
- 这
- 而
- 为什么
- 广泛
- 将
- 中
- 工作
- 加工
- 将
- 会给
- 作家
- 写作
- 您
- 和风网