Cos'è PostgreSQL Exists?
L'operatore EXISTS verifica se una o più righe esistono in una sottoquery. Ciò significa che l'operatore viene utilizzato insieme a una sottoquery. Si dice che l'operatore Exists sia stato soddisfatto quando viene trovata almeno una riga nella sottoquery. È possibile utilizzare questa operazione insieme alle istruzioni SELECT, UPDATE, INSERT e DELETE.
In questo tutorial di PostgreSQL imparerai quanto segue:
- Sintassi
- Con l'istruzione SELECT
- Con istruzione INSERT
- Con l'istruzione UPDATE
- Con l'istruzione DELETE
- Con pgAdmin
Sintassi
Ecco la sintassi per l'istruzione EXISTS di PostgreSQL:
WHERE EXISTS (subquery);
La sintassi precedente mostra che l'operatore EXISTS accetta un argomento, che è una sottoquery. La sottoquery è semplicemente un'istruzione SELECT che dovrebbe iniziare con SELECT * invece di un elenco di nomi di colonna o espressioni.
Con l'istruzione SELECT
Vediamo come utilizzare un'istruzione SELECT con l'operatore EXISTS. Abbiamo le seguenti tabelle:
Libro:
Prezzo:
Eseguire la seguente istruzione:
SELECT *FROM BookWHERE EXISTS (SELECT *FROM PriceWHERE Book.id = Price.id);
Ciò restituisce quanto segue:
Il comando precedente dovrebbe restituire tutti i record nella tabella Book il cui id corrisponde all'id di tutti i record della sottoquery. È stato trovato un solo ID. Quindi, è stato restituito un solo record.
Con istruzione INSERT
Possiamo usare l'operatore EXISTS in un'istruzione INSERT. Abbiamo le seguenti 3 tabelle:
Libro:
Prezzo:
Prezzo2:
Possiamo quindi eseguire la seguente istruzione:
INSERT INTO PriceSELECT id, priceFROM Price2WHERE EXISTS (SELECT idFROM BookWHERE Book.id = Price2.id);
La tabella dei prezzi è ora la seguente:
La riga con un ID di 5 nella tabella denominata Price2 è stata trovata. Questo record è stato quindi inserito nella tabella dei prezzi.
Con l'istruzione UPDATE
Possiamo usare l'operatore EXISTS in un'istruzione UPDATE.
Esegui la seguente query:
UPDATE PriceSET price = (SELECT priceFROM Price2WHERE Price2.id = Price.id)WHERE EXISTS (SELECT id, priceFROM Price2WHERE Price2.id = Price.id);
Stiamo aggiornando la colonna dei prezzi della tabella dei prezzi. Il nostro obiettivo è fare in modo che i prezzi degli articoli che condividono un ID siano gli stessi. È stata trovata una sola riga, ovvero 5.
Tuttavia, poiché i prezzi sono uguali, ovvero 205, non è stato effettuato alcun aggiornamento. Se ci fosse stata una differenza, sarebbe stato effettuato un aggiornamento.
Con l'istruzione DELETE
Un'istruzione DELETE di PostgreSQL può utilizzare l'operatore EXISTS. Ecco un esempio:
DELETE FROM PriceWHERE EXISTS (SELECT *FROM Price2WHERE Price.id = Price2.id);
La tabella dei prezzi è ora la seguente:
La riga con ID 5 è stata eliminata.
Con pgAdmin
Vediamo ora come queste azioni possono essere eseguite utilizzando pgAdmin.
Con l'istruzione SELECT
Per ottenere lo stesso risultato tramite pgAdmin, procedere come segue:
Passaggio 1) Accedi al tuo account pgAdmin.
Passo 2)
- Dalla barra di navigazione a sinistra, fare clic su Database.
- Fare clic su Demo.
Passaggio 3) Digita la query nell'editor di query:
SELECT *FROM BookWHERE EXISTS (SELECT *FROM PriceWHERE Book.id = Price.id);
Passaggio 4) Fare clic sul pulsante Esegui.
Dovrebbe restituire quanto segue:
Con istruzione INSERT
Per ottenere lo stesso risultato tramite pgAdmin, procedere come segue:
Passaggio 1) Accedi al tuo account pgAdmin.
Passo 2)
- Dalla barra di navigazione a sinistra, fare clic su Database.
- Fare clic su Demo.
Passaggio 3) Digita la query nell'editor di query:
INSERT INTO PriceSELECT id, priceFROM Price2WHERE EXISTS (SELECT idFROM BookWHERE Book.id = Price2.id);
Passaggio 4) Fare clic sul pulsante Esegui.
La tabella dei prezzi dovrebbe ora essere la seguente:
Con l'istruzione UPDATE
Per ottenere lo stesso risultato tramite pgAdmin, procedere come segue:
Passaggio 1) Accedi al tuo account pgAdmin.
Passo 2)
- Dalla barra di navigazione a sinistra, fare clic su Database.
- Fare clic su Demo.
Passaggio 3) Digita la query nell'editor di query:
UPDATE PriceSET price = (SELECT priceFROM Price2WHERE Price2.id = Price.id)WHERE EXISTS (SELECT id, priceFROM Price2WHERE Price2.id = Price.id);
Passaggio 4) Fare clic sul pulsante Esegui.
La tabella dei prezzi dovrebbe ora essere la seguente:
Con l'istruzione DELETE
Per ottenere lo stesso risultato tramite pgAdmin, procedere come segue:
Passaggio 1) Accedi al tuo account pgAdmin.
Passo 2)
- Dalla barra di navigazione a sinistra, fare clic su Database.
- Fare clic su Demo.
Passaggio 3) Digita la query nell'editor di query:
DELETE FROM PriceWHERE EXISTS (SELECT *FROM Price2WHERE Price.id = Price2.id);
Passaggio 4) Fare clic sul pulsante Esegui.
La tabella dei prezzi dovrebbe ora essere la seguente:
Sommario
- L'operatore EXISTS verifica se una o più righe esistono in una sottoquery.
- Viene utilizzato con una sottoquery e si dice che sia stato soddisfatto quando la sottoquery restituisce almeno una riga.
- Viene utilizzato insieme alle istruzioni SELECT, UPDATE, INSERT e DELETE.
Scarica il database utilizzato in questo tutorial