Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
SELECTcommande dans Amazon QLDB
Important
Avis de fin de support : les clients existants pourront utiliser Amazon QLDB jusqu'à la fin du support le 31 juillet 2025. Pour plus de détails, consultez Migrer un Amazon QLDB Ledger vers Amazon Aurora SQL Postgre
Dans AmazonQLDB, utilisez la SELECT
commande pour récupérer les données d'une ou de plusieurs tables. Chaque SELECT
requête QLDB est traitée dans le cadre d'une transaction et est soumise à un délai d'expiration de transaction.
L'ordre des résultats n'est pas spécifique et peut varier pour chaque SELECT
requête. Vous ne devez pas vous fier à l'ordre des résultats pour les requêtes dansQLDB.
Pour savoir comment contrôler l'accès afin d'exécuter cette commande partiQL sur des tables spécifiques, consultez. Commencer à utiliser le mode d'autorisation standard sur Amazon QLDB
Avertissement
Lorsque vous exécutez une requête QLDB sans recherche indexée, elle appelle une analyse complète de la table. partiQL prend en charge de telles requêtes car il est SQL compatible. Cependant, n'exécutez pas d'analyses de tables pour les cas d'utilisation en production dansQLDB. L'analyse des tables peut entraîner des problèmes de performance sur les tables de grande taille, notamment des conflits de simultanéité et des délais d'expiration des transactions.
Pour éviter de scanner des tables, vous devez exécuter des instructions contenant une clause de WHERE
prédicat à l'aide d'un opérateur d'égalité sur un champ indexé ou un identifiant de document ; par exemple, WHERE indexedField = 123
ou. WHERE indexedField IN (456, 789)
Pour plus d’informations, consultez Optimisation des performances des requêtes.
Rubriques
Syntaxe
SELECT [ VALUE ]
expression
[ ASfield_alias
] [,expression
, ... ] FROMsource
[ ASsource_alias
] [ ATidx_alias
] [ BYid_alias
] [,source
, ... ] [ WHEREcondition
]
Paramètres
- VALUE
-
Un qualificatif pour votre expression qui oblige la requête à renvoyer la valeur du type de données brutes, plutôt que la valeur soit encapsulée dans une structure de tuple.
expression
-
Projection formée à partir du
*
caractère générique ou liste de projections d'un ou de plusieurs champs de document issus du jeu de résultats. Une expression peut être constituée d'appels à Fonctions PartiQL ou de champs modifiés par Opérateurs PartiQL. - AS
field_alias
-
(Facultatif) Alias temporaire défini par l'utilisateur pour le champ utilisé dans le jeu de résultats final. Le
AS
mot clé est facultatif.Si vous ne spécifiez pas d'alias pour une expression qui n'est pas un simple nom de champ, le jeu de résultats applique un nom par défaut à ce champ.
- FROM
source
-
Source à interroger. Les seules sources actuellement prises en charge sont les noms de tables, les jointures internes entre les tables, les
SELECT
requêtes imbriquées (sous réserve deLimitations des requêtes imbriquées) et les appels de fonctions d'historique pour une table.Vous devez spécifier au moins une source. Les sources multiples doivent être séparées par des virgules.
- AS
source_alias
-
(Facultatif) Alias défini par l'utilisateur qui s'étend sur une source à interroger. Tous les alias de source utilisés dans la
WHERE
clauseSELECT
OR doivent être déclarés dans laFROM
clause. LeAS
mot clé est facultatif. - AT
idx_alias
-
(Facultatif) Alias défini par l'utilisateur qui se lie au numéro d'index (ordinal) de chaque élément d'une liste depuis la source. L'alias doit être déclaré dans la
FROM
clause à l'aide duAT
mot clé. - BY
id_alias
-
(Facultatif) Alias défini par l'utilisateur qui est lié au champ de
id
métadonnées de chaque document du jeu de résultats. L'alias doit être déclaré dans laFROM
clause à l'aide duBY
mot clé. Cela est utile lorsque vous souhaitez projeter ou filtrer sur l'ID du document tout en interrogeant la vue utilisateur par défaut. Pour plus d’informations, consultez Utilisation de la clause BY pour demander l'ID du document. - WHERE
condition
-
Les critères de sélection et les critères de jointure (le cas échéant) pour la requête.
Note
Si vous omettez la WHERE
clause, tous les documents du tableau sont récupérés.
Jointures
Seules les jointures internes sont actuellement prises en charge. Vous pouvez écrire des requêtes de jointure internes à l'aide de la INNER JOIN
clause explicite, comme suit. Dans cette syntaxe, JOIN
doit être associé àON
, et le INNER
mot-clé est facultatif.
SELECT
expression
FROM table1 AS t1 [ INNER ] JOIN table2 AS t2 ON t1.element
= t2.element
Vous pouvez également écrire des jointures internes en utilisant la syntaxe implicite, comme suit.
SELECT
expression
FROM table1 AS t1, table2 AS t2 WHERE t1.element
= t2.element
Limitations des requêtes imbriquées
Vous pouvez écrire des requêtes imbriquées (sous-requêtes) dans des SELECT
expressions et dans FROM
des sources. La principale restriction est que seule la requête la plus externe peut accéder à l'environnement de base de données global. Supposons, par exemple, que vous disposiez d'un registre contenant des tables VehicleRegistration
etPerson
. La requête imbriquée suivante n'est pas valide car l'utilisateur interne SELECT
essaie d'y accéderPerson
.
SELECT r.VIN, (SELECT p.PersonId FROM Person AS p WHERE p.PersonId = r.Owners.PrimaryOwner.PersonId) AS PrimaryOwner FROM VehicleRegistration AS r
Alors que la requête imbriquée suivante est valide.
SELECT r.VIN, (SELECT o.PrimaryOwner.PersonId FROM @r.Owners AS o) AS PrimaryOwner FROM VehicleRegistration AS r
Exemples
La requête suivante montre un caractère générique SELECT
entièrement générique de base avec une clause de WHERE
prédicat standard qui utilise l'IN
opérateur.
SELECT * FROM Vehicle WHERE VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
Ce qui suit montre SELECT
les projections avec un filtre de chaîne.
SELECT FirstName, LastName, Address FROM Person WHERE Address LIKE '%Seattle%' AND GovId = 'LEWISR261LL'
Ce qui suit montre une sous-requête corrélée qui aplatit les données imbriquées. Notez que le @
caractère est techniquement facultatif ici. Mais cela indique explicitement que vous voulez la Owners
structure qui y est imbriquéeVehicleRegistration
, et non une collection différente nommée Owners
(s'il en existait une). Pour plus de contexte, voir Données imbriquées le chapitre Utilisation des données et de l'historique.
SELECT r.VIN, o.SecondaryOwners FROM VehicleRegistration AS r, @r.Owners AS o WHERE r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
Ce qui suit montre une sous-requête de la SELECT
liste qui projette des données imbriquées, ainsi qu'une jointure interne implicite.
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')
Ce qui suit montre une jointure interne explicite.
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')
Ce qui suit montre une projection du champ de id
métadonnées du document, à l'aide de la BY
clause.
SELECT r_id, r.VIN FROM VehicleRegistration AS r BY r_id WHERE r_id = '
documentId
'
Ce qui suit utilise la BY
clause pour joindre les Person
tables DriversLicense
et dans leurs champs PersonId
et id
dans les champs du document, respectivement.
SELECT * FROM DriversLicense AS d INNER JOIN Person AS p BY pid ON d.PersonId = pid WHERE pid = '
documentId
'
Ce qui suit utilise le Un point de vue engagé pour joindre les Person
tables DriversLicense
et dans leurs champs PersonId
et dans les id
champs du document, respectivement.
SELECT * FROM DriversLicense AS d INNER JOIN _ql_committed_Person AS cp ON d.PersonId = cp.metadata.id WHERE cp.metadata.id = '
documentId
'
Ce qui suit renvoie le numéro d'index (ordinal) PersonId
et de chaque personne de la Owners.SecondaryOwners
liste pour un document dans une tableVehicleRegistration
.
SELECT s.PersonId, owner_idx FROM VehicleRegistration AS r, @r.Owners.SecondaryOwners AS s AT owner_idx WHERE r.VIN = 'KM8SRDHF6EU074761'
Exécution par programmation à l'aide du pilote
Pour savoir comment exécuter cette instruction par programmation à l'aide du QLDB pilote, consultez les didacticiels suivants dans Getting started with the driver :
-
Java : Tutoriel de démarrage rapide | Référence de livre de cuisine
-
.NET: Tutoriel de démarrage rapide | Référence de livre de cuisine
-
Allez : Tutoriel de démarrage rapide | Référence de livre de cuisine
-
Node.js : Tutoriel de démarrage rapide | Référence de livre de cuisine
-
Python : Tutoriel de démarrage rapide | Référence de livre de cuisine