当 您在 SQL编辑器中输入查询或创建 计算时,您将使用 PrestoSQL语法。例如,在 SQL 编辑器中,您可以编写完整的 SELECT 查询来查找要包含的数据源,然后筛选其数据:
SELECT DISTINCT column, AGG_FUNC(column_or_expression), … FROM source JOIN another_source ON source.column = another_source.column WHERE constraint_expression GROUP BY column HAVING constraint_expression ORDER BY column ASC/DESC LIMIT count OFFSET COUNT
注意: 为确保数据完整性,SQL 编辑器支持只读语句,例如 SELECT,但不支持 读/写语句,例如 INSERT 或 DELETE。
除了这些子句和语句之外,您的 SQL 语法还可以包含多个函数和运算符,以进一步定义结果并执行计算:
操作顺序
虽然并非每个查询都包含所有子句,但 SQL 语句的每个部分都按特定顺序执行:
- 使用
FROM和JOIN来确定正在查询的数据来源 - 其中
仅包含符合特定条件的数据 -
GROUP BY,用于根据共同值汇总数据。 -
包含,仅包含符合特定条件的聚合行数据 - 使用
SELECT或SELECT DISTINCT进一步指定要包含的源数据。 -
ORDER BY,用于指定结果中数据的排序方式 -
使用` LIMIT` 和`OFFSET`指定要从查询结果中包含多少条记录以及包含哪些记录。
了解查询执行 SQL 语法的顺序可以帮助您确定每个步骤中可用的结果。
从 和 连接
为了确定要查询的数据,查询首先执行 FROM 命令,该命令指定要从中选择数据的源。
要包含来自多个数据源的数据,请添加 JOIN 子句,根据相关列合并数据源的行:
-
INNER JOIN选择在 两个 源中都匹配的记录。 -
LEFT JOIN选择左侧源中的所有记录,以及右侧源中任何匹配的记录。 -
RIGHT JOIN选择右侧源中的所有记录,以及左侧源中任何匹配的记录。 -
FULL JOIN选择 中所有记录,无论 源。
要从两个以上的数据源编译数据,您可以应用多个JOIN子句按顺序组合数据源。例如,将订单与其客户和发货人的数据结合起来:
Customers ON Orders.CustomerID = Customers.CustomerID) INNER JOIN Shippers ON Orders.ShipperID= Shippers.ShipperID
)注意 :在查询构建器中,您需要创建一个 JOIN 子句作为关系 。 在哪里
查询根据 FROM 和 JOIN 子句确定其来源后,执行 WHERE 子句,将结果筛选为仅符合特定条件的数据。
分组依据
如果查询包含聚合函数,则可以包含 GROUP BY 语句,以根据指定列中的公共值汇总其行,例如 GROUP BY 列名。
拥有
如果查询包含 GROUP BY 语句,则应用 HAVING 子句的约束。与 WHERE类似, HAVING 仅包含符合特定条件的聚合行中的数据,并丢弃任何不符合条件的行。
SELECT 或 SELECT DISTINCT
查询将 WHERE 子句的约束应用于由 FROM 和 JOIN 子句确定的源,并根据 GROUP BY 语句和 HAVING 子句对行进行分组后,应用 SELECT 语句中的任何表达式来进一步指定要包含的数据。例如:
-
SELECT column1, column2 FROM source 仅返回 [ source中的字段 column1 和 column2 。
-
SELECT * FROM source 返回 所有 字段,来自 source。
如果查询包含 SELECT DISTINCT 语句,则会排除每一列中具有重复值的任何行。
排序方式
如果查询包含 ORDER BY 关键字,则会根据指定的列按升序或降序对结果进行排序— ASC 或 DESC。例如, ORDER BY field_header ASC。
要按多个字段排序,请用逗号分隔每个字段,例如 ORDER BY field_header1 ASC, field_header2 DESC。
注意:ORDER BY 的默认值为 ASC。如果在 ORDER BY语句中,字段
名后没有指定 ASC或 DESC , 则会自动按升序排序。 LIMIT 和 OFFSET
最后,查询会丢弃超出其 LIMIT 和 OFFSET 子句范围的任何行。
- 要在结果中返回特定数量的记录,请包含
LIMIT 子句。例如,要从源返回前 30 条记录, SELECT * FROM source LIMIT 30。
- 要返回特定数量的记录,但 不是从源中的第一条记录开始,请添加一个
OFFSET 子句,指定要跳过的记录数。例如,要返回从第 16 条记录开始的 10 条记录,可以使用以下语句: SELECT * FROM source LIMIT 10 OFFSET 15.
在哪里FROM 和 JOIN 子句确定其来源后,执行 WHERE 子句,将结果筛选为仅符合特定条件的数据。分组依据GROUP BY 语句,以根据指定列中的公共值汇总其行,例如 GROUP BY 列名。 拥有GROUP BY 语句,则应用 HAVING 子句的约束。与 WHERE类似, HAVING 仅包含符合特定条件的聚合行中的数据,并丢弃任何不符合条件的行。SELECT 或 SELECT DISTINCT WHERE 子句的约束应用于由 FROM 和 JOIN 子句确定的源,并根据 GROUP BY 语句和 HAVING 子句对行进行分组后,应用 SELECT 语句中的任何表达式来进一步指定要包含的数据。例如:SELECT column1, column2 FROM source 仅返回 [ source中的字段 column1 和 column2 。SELECT * FROM source 返回 所有 字段,来自 source。SELECT DISTINCT 语句,则会排除每一列中具有重复值的任何行。排序方式ORDER BY 关键字,则会根据指定的列按升序或降序对结果进行排序— ASC 或 DESC。例如, ORDER BY field_header ASC。 ORDER BY field_header1 ASC, field_header2 DESC。ORDER BY 的默认值为 ASC。如果在 ORDER BY语句中,字段LIMIT 和 OFFSET LIMIT 和 OFFSET 子句范围的任何行。LIMIT 子句。例如,要从源返回前 30 条记录, SELECT * FROM source LIMIT 30。OFFSET 子句,指定要跳过的记录数。例如,要返回从第 16 条记录开始的 10 条记录,可以使用以下语句: SELECT * FROM source LIMIT 10 OFFSET 15.