在 SQL 编辑器 中输入查询或创建计算 时,使用Presto SQL 语法 。例如,在 SQL 编辑器中,您可以编写一个完整的SELECT
查询来查找要包含的数据源,然后过滤它们的数据:
SELECT DISTINCT column, AGG_FUNC(column_or_expression), ... FROM source JOIN another_source ON source.column = another_source.列 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
,以确定所查询数据的来源 -
WHERE
,只包含符合特定条件的数据 -
GROUP BY
,根据共同值汇总数据 -
HAVING
,只包含符合特定条件的汇总行数据 -
SELECT
或SELECT DISTINCT
,以进一步指定要包含的源数据 -
ORDER BY
,用于指定如何对结果中的数据进行排序 -
LIMIT
和OFFSET
,以指定从查询中包含多少记录和哪些记录
了解查询执行其 SQL 语法的顺序,有助于确定每一步的可用结果。
FROM
和JOIN
要确定所查询的数据,查询首先要执行FROM
命令,该命令指定了要从中选择数据的源。
要包含多个数据源的数据,请使用JOIN
子句,根据相关列合并数据源的行:
-
INNER JOIN
选择在和 来源中匹配的记录。 -
LEFT JOIN
从左侧信息源中选择所有记录,同时也选择右侧信息源中的任何匹配记录。 -
RIGHT JOIN
从右侧信息源中选择所有记录,同时也选择左侧信息源中匹配的记录。 -
FULL JOIN
选择或 来源中的所有记录。
要编译来自两个以上数据源的数据,可以应用多个JOIN
子句来按顺序合并数据源。 例如,将订单与其客户和托运人的数据结合起来:
SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName FROM ((Orders INNER 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 列名(s)
。
拥有
如果查询包含GROUP BY
语句,则会应用HAVING
子句的约束条件。与WHERE
相似,HAVING
只包含符合特定条件的聚合行数据,并丢弃不符合条件的任何行。
SELECT
或SELECT DISTINCT
查询将WHERE
子句的约束应用于FROM
和JOIN
子句确定的来源,并根据GROUP BY
语句和HAVING
子句对行进行分组,然后应用SELECT
语句中的任何表达式,进一步指定要包含的数据。例如
-
SELECT column1, column2 FROM source
仅返回字段column1
和column2
fromsource
。 -
SELECT * FROM source
返回来自source
的所有 字段。
如果查询包含SELECT DISTINCT
语句,就会排除每列中有重复值的记录。
ORDER BY
如果查询包含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。