當您 在 SQL 編輯器中輸入查詢 或 建立計算時,您將使用 Presto SQL語法。例如,在 SQL 編輯器中,您可以編寫完整的 SELECT
查詢來尋找要包含的來源,然後過濾其資料:
SELECT DISTINCT column, AGG_FUNC(column_or_expression), … FROM source JOIN another_source ON source.column = another_source.column WHEREconstraint_expression GROUP BY column HAVING.
保證資料完整性,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.ipperipper) [Shipper:
Shipper 中建構器,您建立一個 JOIN
子句作為 關係。
在哪裡
查詢根據 FROM
和 JOIN
子句確定其來源後,會執行 WHERE
子句以將結果過濾為僅滿足特定條件的資料。
透過...分組
如果查詢包含聚合函數,則它可能包含 GROUP BY
語句,以根據指定列中的公用值匯總其行,例如 GROUP BY 列名
。
擁有
如果查詢包含 GROUP BY
語句,它將套用 HAVING
子句的限制。與 WHERE
類似, HAVING
僅包含滿足特定條件的聚合行中的數據,並丟棄任何不滿足特定條件的行。
選擇
或 選擇不同的
查詢將 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
子句。例如,若要從來源傳回前 30 筆記錄,SELECT * FROM source LIMIT 30
。 - 若要傳回特定數量的記錄,但 而非 從來源中的第一筆記錄開始,請新增一個
OFFSET
子句以及要跳過的記錄數。例如,要傳回從第 16 筆開始的 10 筆記錄,SELECT * FROM source LIMIT 10 OFFSET 15.