Qu'est-ce que PostgreSQL existe?
L'opérateur EXISTS teste si une ou plusieurs lignes existent dans une sous-requête. Cela signifie que l'opérateur est utilisé avec une sous-requête. On dit que l'opérateur Exists a été rencontré lorsqu'au moins une ligne est trouvée dans la sous-requête. Vous pouvez utiliser cette opération avec les instructions SELECT, UPDATE, INSERT et DELETE.
Dans ce didacticiel PostgreSQL, vous apprendrez ce qui suit:
- Syntaxe
- Avec instruction SELECT
- Avec instruction INSERT
- Avec instruction UPDATE
- Avec l'instruction DELETE
- Avec pgAdmin
Syntaxe
Voici la syntaxe de l'instruction PostgreSQL EXISTS:
WHERE EXISTS (subquery);
La syntaxe ci-dessus montre que l'opérateur EXISTS prend un argument, qui est une sous-requête. La sous-requête est simplement une instruction SELECT qui doit commencer par SELECT * au lieu d'une liste de noms de colonnes ou d'expressions.
Avec instruction SELECT
Voyons comment utiliser une instruction SELECT avec l'opérateur EXISTS. Nous avons les tableaux suivants:
Livre:
Prix:
Exécutez l'instruction suivante:
SELECT *FROM BookWHERE EXISTS (SELECT *FROM PriceWHERE Book.id = Price.id);
Cela renvoie ce qui suit:
La commande ci-dessus doit renvoyer tous les enregistrements de la table Book dont l'ID correspond à l'ID de tous les enregistrements de la sous-requête. Un seul identifiant a été mis en correspondance. Par conséquent, un seul enregistrement a été renvoyé.
Avec instruction INSERT
Nous pouvons utiliser l'opérateur EXISTS dans une instruction INSERT. Nous avons les 3 tableaux suivants:
Livre:
Prix:
Prix2:
Nous pouvons ensuite exécuter l'instruction suivante:
INSERT INTO PriceSELECT id, priceFROM Price2WHERE EXISTS (SELECT idFROM BookWHERE Book.id = Price2.id);
Le tableau des prix se présente désormais comme suit:
La ligne avec un ID de 5 dans la table nommée Price2 a été mise en correspondance. Cet enregistrement a ensuite été inséré dans la table Price.
Avec instruction UPDATE
Nous pouvons utiliser l'opérateur EXISTS dans une instruction UPDATE.
Exécutez la requête suivante:
UPDATE PriceSET price = (SELECT priceFROM Price2WHERE Price2.id = Price.id)WHERE EXISTS (SELECT id, priceFROM Price2WHERE Price2.id = Price.id);
Nous mettons à jour la colonne des prix de la table des prix. Notre objectif est que les prix des articles partageant un identifiant soient les mêmes. Une seule ligne correspondait, c'est-à-dire 5.
Cependant, comme les prix sont égaux, c'est-à-dire 205, aucune mise à jour n'a été effectuée. S'il y avait une différence, une mise à jour aurait été effectuée.
Avec l'instruction DELETE
Une instruction DELETE PostgreSQL peut utiliser l'opérateur EXISTS. Voici un exemple:
DELETE FROM PriceWHERE EXISTS (SELECT *FROM Price2WHERE Price.id = Price2.id);
Le tableau des prix se présente désormais comme suit:
La ligne avec un identifiant de 5 a été supprimée.
Avec pgAdmin
Voyons maintenant comment ces actions peuvent être effectuées à l'aide de pgAdmin.
Avec instruction SELECT
Pour accomplir la même chose via pgAdmin, procédez comme suit:
Étape 1) Connectez-vous à votre compte pgAdmin.
Étape 2)
- Dans la barre de navigation sur la gauche, cliquez sur Bases de données.
- Cliquez sur Démo.
Étape 3) Tapez la requête dans l'éditeur de requête:
SELECT *FROM BookWHERE EXISTS (SELECT *FROM PriceWHERE Book.id = Price.id);
Étape 4) Cliquez sur le bouton Exécuter.
Il doit renvoyer ce qui suit:
Avec instruction INSERT
Pour accomplir la même chose via pgAdmin, procédez comme suit:
Étape 1) Connectez-vous à votre compte pgAdmin.
Étape 2)
- Dans la barre de navigation sur la gauche, cliquez sur Bases de données.
- Cliquez sur Démo.
Étape 3) Tapez la requête dans l'éditeur de requête:
INSERT INTO PriceSELECT id, priceFROM Price2WHERE EXISTS (SELECT idFROM BookWHERE Book.id = Price2.id);
Étape 4) Cliquez sur le bouton Exécuter.
Le tableau des prix devrait maintenant être le suivant:
Avec instruction UPDATE
Pour accomplir la même chose via pgAdmin, procédez comme suit:
Étape 1) Connectez-vous à votre compte pgAdmin.
Étape 2)
- Dans la barre de navigation sur la gauche, cliquez sur Bases de données.
- Cliquez sur Démo.
Étape 3) Tapez la requête dans l'éditeur de requête:
UPDATE PriceSET price = (SELECT priceFROM Price2WHERE Price2.id = Price.id)WHERE EXISTS (SELECT id, priceFROM Price2WHERE Price2.id = Price.id);
Étape 4) Cliquez sur le bouton Exécuter.
Le tableau des prix devrait maintenant être le suivant:
Avec l'instruction DELETE
Pour accomplir la même chose via pgAdmin, procédez comme suit:
Étape 1) Connectez-vous à votre compte pgAdmin.
Étape 2)
- Dans la barre de navigation sur la gauche, cliquez sur Bases de données.
- Cliquez sur Démo.
Étape 3) Tapez la requête dans l'éditeur de requête:
DELETE FROM PriceWHERE EXISTS (SELECT *FROM Price2WHERE Price.id = Price2.id);
Étape 4) Cliquez sur le bouton Exécuter.
Le tableau des prix devrait maintenant être le suivant:
Résumé
- L'opérateur EXISTS teste si une ou plusieurs lignes existent dans une sous-requête.
- Elle est utilisée avec une sous-requête et est dite satisfaite lorsque la sous-requête renvoie au moins une ligne.
- Il est utilisé avec les instructions SELECT, UPDATE, INSERT et DELETE.
Téléchargez la base de données utilisée dans ce didacticiel