# 概述（SQL 语法）

By [ma1984.eth](https://paragraph.com/@ma1984) · 2024-01-22

---

为什么是 SQL？
=========

结构化查询语言（SQL）是一种标准的声明性语言，用于描述所需的数据结果。与其他需要用户指定计算机应执行的确切步骤的过程语言（如 Python、Java、Rust 等）不同，SQL 是声明性的，这意味着用户描述最终输出，并允许 SQL 解析器程序构建准确的结果。运行时自动执行步骤。这极大地简化了生成和优化复杂数据操作的工作，简化为几乎任何人都可以学习的非常简单直观的命令集。

鉴于 SQL 的长期成功，人们常说“商业世界靠 SQL 运行”。虽然 SQL 有许多扩展和变体，但美国国家标准协会 (ANSI) 已经定义了 SQL 的外观，并且遵守该标准的数据系统被称为符合 ANSI 的 SQL。SQL 的这种一致性使得整个分析系统和工具行业能够高效地进行互操作，以至于至今仍是标准。Space and Time 是一个数据仓库，因此在符合 ANSI 的 SQL 上运行。有几个空间和时间扩展使我们能够更好地作为去中心化的 Web3 原生数据系统进行操作。

SQL 语法 – 基础知识
=============

SQL 语法在过去 40 年里已经成熟，比这里合理记录的更加强大和全面。如果您想了解有关 SQL 的更多一般知识，以下是一些很好的在线课程，可教授 SQL 基础知识：

*   [Udemy - 完整的 SQL 训练营](https://www.udemy.com/course/the-complete-sql-bootcamp/?LSNPUBID=JVFxdTr9V80&ranEAID=JVFxdTr9V80&ranMID=39197&ranSiteID=JVFxdTr9V80-6DQBVo4kG7kJeEYRUmJqDA&utm_medium=udemyads&utm_source=aff-campaign)
    
*   [Coursera / UCDavis - 用于数据科学的 SQL](https://www.coursera.org/learn/sql-for-data-science?irclickid=20TTASyaLzaaRJVRTiyvH2UPUkAQ8jUlLwatWw0&irgwc=1&utm_medium=partners&utm_source=impact&utm_campaign=3294490&utm_content=b2c)
    
*   [教育性 - SQL 入门指南](https://www.educative.io/courses/introductory-guide-to-sql?affiliate_id=5073518643380224)
    
*   [ZeroToMastery - 完整的 SQL + 数据库训练营：从零到精通](https://zerotomastery.io/courses/sql-bootcamp/)
    
*   [FutureLearn - 数据库和 SQL 简介](https://www.futurelearn.com/courses/introduction-to-databases-and-sql?utm_source=rakutenmarketing&utm_medium=affiliate&utm_campaign=fl_3335621:LightCode&utm_content=10:1&utm_term=UKNetwork&ranMID=42801&ranEAID=JVFxdTr9V80&ranSiteID=JVFxdTr9V80-xHwMzqwNA1cK.h.oMBJcyA)
    

长话短说
----

如果您正在寻找过于简化的 SQL 入门知识，基本 SQL 语句分为 5 个部分：

*   `SELECT`– 要返回的列列表，或使用星号 (\*) 指示所有列
    
*   `FROM`– 一个或多个包含数据的表
    
*   `WHERE`– 过滤器以减少从表返回的数据
    
*   `GROUP BY`– 在聚合中，指定哪些列驱动分组，而所有其他列必须包装在 SUM() 等聚合函数中
    
*   `ORDER BY`– 指定返回数据的顺序
    

例如，下面的 SQL 将返回 100 万个区块范围内存在的以太坊区块链每天的交易总数：

SQL

    SELECT  
     CAST(TIME_STAMP as DATE) as BlockDate  
    ,SUM(TRANSACTION_COUNT)   as TxnCount  
    FROM ETHEREUM.BLOCKS  
    WHERE BLOCK_NUMBER between 14e6 and 15e6  
    GROUP BY BlockDate  
    ORDER BY BlockDate;
    

一旦用户理解将一种数据类型转换为另一种数据类型（在本例中，将完整时间戳转换为日期）以及科学计数法 14e6 = 1400 万，那么上述 SQL 就会变得非常可读。`CAST()`

SQL 的内容远不止上述 5 个组件，但额外的复杂性是建立在这个基础上的，这使其成为一个很好的起点。

通用 SQL 的最佳实践
------------

这些最佳实践将适用于几乎所有数据仓库系统，并且也适用于空间和时间：

**尽早过滤**\- 对于更复杂的查询，尽早应用语句。例如，如果要连接两个子选择，则通常可以在外部语句中应用该语句一次，或者在每个子选择中重复应用该语句两次。这样做两次的好处是减少了连接前每个数据集的行数，这可以将 5 秒的运行时间更改为 500 毫秒的运行时间。`WHEREWHERE`

**限制 10** – 在初始发现期间，分析师开始探索数据类型、格式和样本数据的情况并不罕见。也就是说，当无约束尝试将整个表（可能有数百万行）返回给客户端应用程序时，它可以在系统上生成相当多的计算量。即使数据库计算速度很快，移动大数据的网络延迟也会使响应感觉很慢。通过添加到查询的末尾，数据库将只返回前N条记录，然后停止处理。例如，将仅返回前 10 行。请注意：与 不同。将简单地返回数据库可以找到的前 10 行，通常（但并非总是）按顺序存储在磁盘上，使其不适合随机样本。`SELECT * FROM Schema.Table_NameSELECTLIMIT NSELECT * FROM Schema.Table_Name LIMIT 10LIMITSAMPLELIMIT`

**了解键**– 在处理非常大的数据时，在过滤或连接表的键列时您将获得更好的性能，因为它与数据的物理存储方式保持一致。例如，表的键是（主键，意味着它是唯一的）。任何连接或过滤器都会比类似的唯一列返回得更快。表的键可以使用资源发现 API 找到，也可以在 JDBC 驱动程序中找到，并通过大多数现代 SQL 编辑器公开。`ETHEREUM.BLOCKSBlock_NumberBlock_NumberBlock_Hash`

**Snake\_Case** – SQL 名称的典型约定是 Snake\_Case，又名使用下划线分隔单词，例如，或 与任何约定一样，除了与其他 SQL 开发人员保持一致之外，没有任何技术优势。`Block_NumberGas_Fee.`

SQL 语法 – 空间和时间细节
================

Space and Time 是符合 ANSI 标准的数据库，这意味着普通 SQL 将按预期工作。也就是说，与任何独特的数据系统一样，有一些值得注意的独特特征。本节中的子页面列出了空间和时间的唯一[数据类型](https://docs.spaceandtime.io/docs/data-types)和[保留字](https://docs.spaceandtime.io/docs/reserved-words)。

价钱
==

当您使用空间和时间时，您所付出的只是计算。存储、索引区块链数据、OpenAI 仪表板、集群中的 OLTP + OLAP 查询、SQL 加密证明等都包含在内。

我们提供多种不同的定价选项来满足您的需求和用例。访问[此页面](https://docs.spaceandtime.io/docs/pay-per-compute-query-costs)了解更多信息。

---

*Originally published on [ma1984.eth](https://paragraph.com/@ma1984/sql)*
