Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
SELECTBefehl in Amazon QLDB
Wichtig
Hinweis zum Ende des Supports: Bestandskunden können Amazon QLDB bis zum Ende des Supports am 31.07.2025 nutzen. Weitere Informationen finden Sie unter Migrieren eines Amazon QLDB Ledgers zu Amazon Aurora SQL Postgre
Verwenden Sie in Amazon den SELECT
BefehlQLDB, um Daten aus einer oder mehreren Tabellen abzurufen. Jede SELECT
eingehende Anfrage QLDB wird in einer Transaktion verarbeitet und unterliegt einem Transaktions-Timeout-Limit.
Die Reihenfolge der Ergebnisse ist nicht spezifisch und kann für jede SELECT
Abfrage variieren. Sie sollten sich bei keiner Abfrage auf die Reihenfolge der Ergebnisse verlassenQLDB.
Informationen zur Steuerung des Zugriffs auf die Ausführung dieses PartiQL-Befehls für bestimmte Tabellen finden Sie unterErste Schritte mit dem Standardberechtigungsmodus in Amazon QLDB.
Warnung
Wenn Sie eine Abfrage QLDB ohne indizierte Suche ausführen, wird ein vollständiger Tabellenscan aufgerufen. PartiQL unterstützt solche Abfragen, weil es SQL kompatibel ist. Führen Sie jedoch keine Tabellenscans für Produktionsanwendungsfälle in QLDB aus. Tabellenscans können bei großen Tabellen zu Leistungsproblemen führen, einschließlich Parallelitätskonflikten und Transaktions-Timeouts.
Um Tabellenscans zu vermeiden, müssen Sie Anweisungen mit einer WHERE
Prädikatklausel ausführen, indem Sie einen Gleichheitsoperator für ein indiziertes Feld oder eine Dokument-ID verwenden, z. B. oder. WHERE indexedField = 123
WHERE indexedField IN (456, 789)
Weitere Informationen finden Sie unter Optimierung der Abfrageleistung.
Themen
Syntax
SELECT [ VALUE ]
expression
[ ASfield_alias
] [,expression
, ... ] FROMsource
[ ASsource_alias
] [ ATidx_alias
] [ BYid_alias
] [,source
, ... ] [ WHEREcondition
]
Parameter
- VALUE
-
Ein Qualifizierer für Ihren Ausdruck, durch den die Abfrage den unformatierten Datentypwert zurückgibt, anstatt den Wert, der von einer Tupel-Struktur umgeben ist.
expression
-
Eine Projektion aus dem
*
-Platzhalter oder eine Projektionsliste aus einem oder mehreren Dokumentfeldern aus dem Ergebnissatz. Ein Ausdruck kann aus Aufrufen an PartiQL-Funktionen oder Feldern bestehen, die von PartiQL-Operatoren geändert werden. - AS
field_alias
-
(Optional) Ein temporärer, benutzerdefinierter Alias für das Feld, das in dem endgültigen Ergebnissatz verwendet wird. Das
AS
-Schlüsselwort ist optional.Wenn Sie kein Alias für einen Ausdruck angeben, bei dem es sich nicht um einen einfachen Feldnamen handelt, wendet der Ergebnissatz einen Standardnamen auf dieses Feld an.
- FROM
source
-
Eine Quelle, die abgefragt werden soll. Die einzigen derzeit unterstützten Quellen sind Tabellennamen, interne Joins zwischen Tabellen, verschachtelte
SELECT
-Abfragen (vorbehaltlich Einschränkungen bei verschachtelten Abfragen) und Verlaufsfunktionsaufrufe für eine Tabelle.Sie müssen mindestens eine Quelle angeben. Mehrere Quellen müssen durch Kommata getrennt werden.
- AS
source_alias
-
Ein optionaler, benutzerdefinierter Alias-Name, der über eine Quelle reicht, aus der abgefragt werden soll. Alle Quell-Aliasse, die in den Klauseln
SELECT
ODERWHERE
verwendet werden, müssen in derFROM
-Klausel deklariert werden. DasAS
-Schlüsselwort ist optional. - AT
idx_alias
-
(Optional) Ein benutzerdefinierter Alias, der an die Indexnummer (Ordnungszahl) jedes Elements in einer Liste aus der Quelle bindet. Der Alias muss in der
FROM
-Klausel mit dem SchlüsselwortAT
deklariert werden. - BY
id_alias
-
(Optional) Eine benutzerdefinierter Alias, der an das Metadatenfeld
id
für jedes Dokument im Ergebnissatz gebunden ist. Der Alias muss in derFROM
-Klausel mit dem SchlüsselwortBY
deklariert werden. Dies ist nützlich, wenn Sie nach der Dokument-ID projizieren oder filtern möchten, während Sie die Standard-Benutzeransicht abfragen. Weitere Informationen finden Sie unter Verwenden der BY-Klausel zur Abfrage der Dokument-ID. - WHERE
condition
-
Die Auswahlkriterien und Join-Kriterien (falls zutreffend) für die Abfrage.
Anmerkung
Wenn Sie die WHERE
-Klausel weglassen, werden alle Dokumente in der Tabelle abgerufen.
Joins
Nur innere Joins werden derzeit unterstützt. Sie können Abfragen mithilfe der expliziten INNER JOIN
-Klausel innere Join-Abfragen wie folgt schreiben. In dieser Syntax muss JOIN
mit ON
gekoppelt werden und das INNER
-Schlüsselwort ist optional.
SELECT expression
FROM table1 AS t1 [ INNER ] JOIN table2 AS t2
ON t1.element
= t2.element
Sie können auch wie folgt innere Joins mithilfe der impliziten Syntax schreiben.
SELECT expression
FROM table1 AS t1, table2 AS t2
WHERE t1.element
= t2.element
Einschränkungen bei verschachtelten Abfragen
Sie können verschachtelte Abfragen innerhalb von SELECT
-Ausdrücken und innerhalb von FROM
-Quellen schreiben. Die wichtigste Beschränkung besteht darin, dass nur die äußerste Abfrage auf die globale Datenbankumgebung zugreifen kann. Beispiel: Angenommen, Sie verfügen über einen Ledger mit den Tabellen VehicleRegistration
und Person
. Die folgende verschachtelte Abfrage ist nicht gültig, weil die innere SELECT
versucht, auf Person
zuzugreifen.
SELECT r.VIN,
(SELECT p.PersonId FROM Person AS p WHERE p.PersonId = r.Owners.PrimaryOwner.PersonId) AS PrimaryOwner
FROM VehicleRegistration AS r
Die folgende verschachtelte Abfrage ist allerdings gültig.
SELECT r.VIN, (SELECT o.PrimaryOwner.PersonId FROM @r.Owners AS o) AS PrimaryOwner
FROM VehicleRegistration AS r
Beispiele
Die folgende Abfrage zeigt eine einfache reine SELECT
Platzhalterklausel mit einer WHERE
Standardprädikatsklausel, die den Operator verwendet. IN
SELECT * FROM Vehicle
WHERE VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
Das folgende Beispiel zeigt SELECT
-Projektionen mit einem Zeichenfolgenfilter.
SELECT FirstName, LastName, Address
FROM Person
WHERE Address LIKE '%Seattle%'
AND GovId = 'LEWISR261LL'
Das folgende Beispiel zeigt eine korrelierte Unterabfrage, die verschachtelte Daten vereinfacht. Beachten Sie, dass das Zeichen @
hier technisch optional ist. Es wird jedoch ausdrücklich darauf hingewiesen, dass Sie die Owners
Struktur, die darin verschachtelt istVehicleRegistration
, nicht eine andere Sammlung benennen möchten Owners
(falls vorhanden). Weitere Informationen finden Sie Verschachtelte Daten im Kapitel Arbeiten mit Daten und Verlauf.
SELECT
r.VIN,
o.SecondaryOwners
FROM
VehicleRegistration AS r, @r.Owners AS o
WHERE
r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
Das folgende Beispiel zeigt eine Unterabfrage in der SELECT
-Liste, die verschachtelte Daten vereinfacht, sowie einen impliziten inneren Join.
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')
Das folgende Beispiel zeigt einen expliziten inneren Join.
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')
Das folgende Beispiel zeigt eine Projektion des Dokument-id
-Metadatenfelds unter Verwendung der BY
-Klausel.
SELECT
r_id,
r.VIN
FROM
VehicleRegistration AS r BY r_id
WHERE
r_id = 'documentId
'
Im Folgenden wird die BY
Klausel verwendet, um die DriversLicense
Person
Tabellen in ihren jeweiligen Feldern PersonId
und in den id
Dokumentfeldern zu verknüpfen.
SELECT * FROM DriversLicense AS d INNER JOIN Person AS p BY pid
ON d.PersonId = pid
WHERE pid = 'documentId
'
Im Folgenden wird die verwendetFestgeschriebene Ansicht, um die Person
Tabellen DriversLicense
PersonId
und ihre jeweiligen id
Dokumentfelder miteinander zu verknüpfen.
SELECT * FROM DriversLicense AS d INNER JOIN _ql_committed_Person AS cp
ON d.PersonId = cp.metadata.id
WHERE cp.metadata.id = 'documentId
'
Im Folgenden wird die PersonId
Indexzahl (Ordnungszahl) jeder Person in der Owners.SecondaryOwners
Liste für ein Dokument in der Tabelle VehicleRegistration
zurückgegeben.
SELECT s.PersonId, owner_idx
FROM VehicleRegistration AS r, @r.Owners.SecondaryOwners AS s AT owner_idx
WHERE r.VIN = 'KM8SRDHF6EU074761'
Wird programmgesteuert mit dem Treiber ausgeführt
Informationen zum programmgesteuerten Ausführen dieser Anweisung mithilfe des QLDB Treibers finden Sie in den folgenden Tutorials unter Erste Schritte mit dem Treiber:
-
Gehe zu: Schnellstart-Tutorial | Referenz zum Kochbuch
-
Node.js: Schnellstart-Tutorial | Referenz zum Kochbuch
-
Python: Schnellstart-Tutorial | Referenz zum Kochbuch