當您在 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 列 HAVING constraint_expression ORDER BY 列 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)
注意: 在 Query Builder 中,您创建了一个JOIN 子句作为关系 。
WHERE
在查詢根據FROM 和JOIN 子句確定其來源之後,它會執行WHERE 子句,將結果篩選為僅滿足特定條件的資料。
GROUP BY
如果查詢包含聚合函數,則可能包含GROUP BY 語句,以根據指定欄中的共用值總結其行,如GROUP BY column name(s) 。
HAVING
如果查詢包含GROUP BY 語句,則會套用HAVING 子句的約束。類似於WHERE,HAVING 只包含符合特定條件的聚集行的資料,並捨棄任何不符合特定條件的資料。
SELECT 或SELECT DISTINCT
在查詢將WHERE 子句的約束應用於由FROM 和JOIN 子句確定的來源,並根據GROUP BY 語句和HAVING 子句對行進行分組之後,它會應用SELECT 語句中的任何表達式,以進一步指定要包含的資料。例如:
-
SELECT column1, column2 FROM source只返回欄位column1和column2fromsource. -
SELECT * FROM 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。