本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
SELECTAmazon 的命令 QLDB
重要
支援結束通知:現有客戶將能夠使用 Amazon,QLDB直到 2025 年 7 月 31 日終止支援為止。有關更多詳細信息,請參閱將 Amazon QLDB 分類帳遷移到 Amazon Aurora 郵政. SQL
在 Amazon 中QLDB,使用命SELECT
令從一個或多個表中檢索數據。中QLDB的每個SELECT
查詢都會在交易中處理,且受到交易逾時限制的限制。
結果的順序不是特定的,並且每個SELECT
查詢可能會有所不同。您不應該依賴於QLDB.
若要瞭解如何控制在特定資料表上執行此 PartiQL 命令的存取權,請參閱Amazon 中的標準許可模式入門 QLDB。
警告
當您在中執行查詢時QLDB沒有索引查閱,它會叫用完整資料表掃描。PartiQL 支持這樣的查詢,因為它是SQL兼容的。但是,請勿針對中的生產使用案例執行表格掃描QLDB。資料表掃描可能會造成大型資料表的效能問題,包括並行衝突和交易逾時。
若要避免資料表掃描,您必須在索引欄位或文件 ID 上使用相等運算子來執行具有述WHERE
詞子句的陳述式;例如,WHERE indexedField = 123
或WHERE indexedField IN (456, 789)
。如需詳細資訊,請參閱 最佳化查詢效能。
語法
SELECT [ VALUE ]
expression
[ ASfield_alias
] [,expression
, ... ] FROMsource
[ ASsource_alias
] [ ATidx_alias
] [ BYid_alias
] [,source
, ... ] [ WHEREcondition
]
參數
- VALUE
-
運算式的限定詞,可讓查詢傳回原始資料類型值,而不是封裝在元組結構中的值。
expression
-
由
*
萬用字元或結果集中一或多個文件欄位的投影清單所形成的投影。一個表達式可以包含對 PartiQL 數 的呼叫或由 PartiQL 運算子 修改的欄位。 - AS
field_alias
-
(選擇性) 在最終結果集中使用之欄位的暫時性、使用者定義別名。
AS
關鍵字是可選的。如果您沒有為非簡單欄位名稱的運算式指定別名,則結果集會將預設名稱套用至該欄位。
- FROM
source
-
要查詢的來源。目前支援的唯一來源是資料表名稱、資料表之間的內部聯結、巢狀
SELECT
查詢 (受限於巢狀查詢限制),以及資料表的歷程函數呼叫。您必須指定至少一個來源。多個來源必須以逗號分隔。
- AS
source_alias
-
(選擇性) 使用者定義的別名,其範圍超過要查詢的來源。
SELECT
ORWHERE
子句中使用的所有來源別名都必須在FROM
子句中宣告。AS
關鍵字是可選的。 - AT
idx_alias
-
(選擇性) 使用者定義別名,繫結至來源清單中每個元素的索引 (序數) 編號。別名必須使用
AT
關鍵字在FROM
子句中聲明。 - BY
id_alias
-
(選擇性) 使用者定義別名,繫結至結果集中每個文件的中
id
繼資料欄位。別名必須使用BY
關鍵字在FROM
子句中聲明。當您想要在查詢預設使用者檢視時對文件 ID 進行投影或篩選時,此功能非常有用。如需詳細資訊,請參閱 使用 BY 子句來查詢文件 ID。 - WHERE
condition
-
查詢的選取條件和聯結準則 (如果適用)。
注意
如果您省略WHERE
子句,則會擷取表格中的所有文件。
聯結
目前僅支援內部聯結。您可以使用 explicit INNER JOIN
子句編寫內部聯接查詢,如下所示。在此語法中,JOIN
必須與配對ON
,並且INNER
關鍵字是可選的。
SELECT
expression
FROM table1 AS t1 [ INNER ] JOIN table2 AS t2 ON t1.element
= t2.element
或者,您可以使用隱含語法編寫內部聯結,如下所示。
SELECT
expression
FROM table1 AS t1, table2 AS t2 WHERE t1.element
= t2.element
巢狀查詢限制
您可以在SELECT
運算式內和FROM
來源中撰寫巢狀查詢 (子查詢)。主要限制是只有最外層的查詢才能訪問全局數據庫環境。例如,假設您有一個包含表格VehicleRegistration
和的分類帳Person
。下列巢狀查詢無效,因為內部SELECT
會嘗試存取Person
。
SELECT r.VIN, (SELECT p.PersonId FROM Person AS p WHERE p.PersonId = r.Owners.PrimaryOwner.PersonId) AS PrimaryOwner FROM VehicleRegistration AS r
而下面的嵌套查詢是有效的。
SELECT r.VIN, (SELECT o.PrimaryOwner.PersonId FROM @r.Owners AS o) AS PrimaryOwner FROM VehicleRegistration AS r
範例
下列查詢會顯示具SELECT
有使用IN
運算子之標準WHERE
述詞子句的全部萬用字元。
SELECT * FROM Vehicle WHERE VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
以下顯示具有字串篩選的SELECT
投影。
SELECT FirstName, LastName, Address FROM Person WHERE Address LIKE '%Seattle%' AND GovId = 'LEWISR261LL'
下面顯示了一個扁平化嵌套數據的相關子查詢。請注意,字@
符在技術上是可選的。但它明確表明您想要嵌套在其中的Owners
結構VehicleRegistration
,而不是名為的不同集合Owners
(如果存在的話)。如需更多前後關聯,請參閱〈使用資料和記錄〉一章嵌套數據中的。
SELECT r.VIN, o.SecondaryOwners FROM VehicleRegistration AS r, @r.Owners AS o WHERE r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
以下顯示了SELECT
列表中投影嵌套數據的子查詢以及隱含的內部關連。
SELECT v.Make, v.Model, (SELECT VALUE o.PrimaryOwner.PersonId FROM @r.Owners AS o) AS PrimaryOwner FROM VehicleRegistration AS r, Vehicle AS v WHERE r.VIN = v.VIN AND r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
下面顯示了一個明確的內部聯接。
SELECT v.Make, v.Model, r.Owners FROM VehicleRegistration AS r JOIN Vehicle AS v ON r.VIN = v.VIN WHERE r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
下面顯示了使用BY
子句的文檔id
元數據字段的投影。
SELECT r_id, r.VIN FROM VehicleRegistration AS r BY r_id WHERE r_id = '
documentId
'
以下使用子BY
句分別聯結其欄位DriversLicense
和文件id
欄位上的PersonId
和Person
表格。
SELECT * FROM DriversLicense AS d INNER JOIN Person AS p BY pid ON d.PersonId = pid WHERE pid = '
documentId
'
下列使用分別聯結其欄位DriversLicense
和文件id
欄位上的PersonId
和Person
表格。已提交檢視
SELECT * FROM DriversLicense AS d INNER JOIN _ql_committed_Person AS cp ON d.PersonId = cp.metadata.id WHERE cp.metadata.id = '
documentId
'
以下內容會傳回表VehicleRegistration
格中文件Owners.SecondaryOwners
清單中每個人員的PersonId
與索引 (序數) 編號。
SELECT s.PersonId, owner_idx FROM VehicleRegistration AS r, @r.Owners.SecondaryOwners AS s AT owner_idx WHERE r.VIN = 'KM8SRDHF6EU074761'
以編程方式使用驅動程序
若要了解如何以程式設計方式使用QLDB驅動程式執行此陳述式,請參閱開始使用驅動程式中的下列教學課程: