Vad är PostgreSQL existerar?
operatorn EXISTS testar om det finns en rad(er) i en underfråga. Detta innebär att operatören används tillsammans med en underfråga. Operatören Exists sägs ha uppfyllts när minst en rad finns i underfrågan. Du kan använda den här åtgärden tillsammans med select, UPDATE, INSERT och DELETE-satser.
i denna PostgreSQL-handledning lär du dig följande:
- Syntax
- med SELECT-uttalande
- med INSERT-uttalande
- med UPDATE-uttalande
- med DELETE-uttalande
- med pgAdmin
Syntax
här är syntaxen för PostgreSQL exists-uttalandet:
WHERE EXISTS (subquery);
ovanstående syntax visar att operatören EXISTS tar in ett argument, vilket är en underfråga. Subquery är helt enkelt ett SELECT-uttalande som bör börja med en SELECT * istället för en lista med kolumnnamn eller uttryck.
med SELECT-uttalande
Låt se hur du använder ett SELECT-uttalande med operatören EXISTS. Vi har följande tabeller:
Boka:
pris:
kör följande uttalande:
SELECT *FROM BookWHERE EXISTS (SELECT * FROM Price WHERE Book.id = Price.id);
detta returnerar följande:
kommandot ovan ska returnera alla poster i Boktabellen vars id matchar id för eventuella poster av underfrågan. Endast ett id matchades. Därför återlämnades endast en post.
med infoga uttalande
kan vi använda existerar operatorn i en infoga uttalande. Vi har följande 3 tabeller:
Boka:
pris:
Pris2:
vi kan sedan köra följande uttalande:
INSERT INTO PriceSELECT id, priceFROM Price2WHERE EXISTS (SELECT id FROM Book WHERE Book.id = Price2.id);
pristabellen är nu enligt följande:
raden med ett id på 5 i tabellen med namnet Price2 matchades. Denna post infördes sedan i pristabellen.
med UPPDATERINGSUTTALANDE
kan vi använda operatören EXISTS i ett UPPDATERINGSUTTALANDE.
kör följande fråga:
UPDATE PriceSET price = (SELECT price FROM Price2 WHERE Price2.id = Price.id)WHERE EXISTS (SELECT id, priceFROM Price2WHERE Price2.id = Price.id);
vi uppdaterar priskolumnen i pristabellen. Vårt mål är att priserna på artiklar som delar ett id ska vara desamma. Endast en rad matchades, det vill säga 5.
eftersom priserna är lika, det vill säga 205, gjordes ingen uppdatering. Om det fanns en skillnad skulle en uppdatering ha gjorts.
med DELETE-satsen
kan en PostgreSQL DELETE-sats använda operatören EXISTS. Här är ett exempel:
DELETE FROM PriceWHERE EXISTS (SELECT * FROM Price2 WHERE Price.id = Price2.id);
pristabellen är nu enligt följande:
raden med ett id på 5 har tagits bort.
med pgAdmin
låt oss nu se hur dessa åtgärder kan utföras med pgAdmin.
med SELECT-uttalande
för att uppnå detsamma genom pgAdmin, gör detta:
Steg 1) Logga in på ditt pgAdmin-konto.
steg 2)
- från navigeringsfältet till vänster – klicka på databaser.
- Klicka På Demo.
steg 3) Skriv frågan i frågeredigeraren:
SELECT *FROM BookWHERE EXISTS (SELECT * FROM Price WHERE Book.id = Price.id);
steg 4) Klicka på knappen Kör.
det bör returnera följande:
med infoga uttalande
för att uppnå detsamma genom pgAdmin, gör detta:
Steg 1) Logga in på ditt pgAdmin-konto.
steg 2)
- från navigeringsfältet till vänster – klicka på databaser.
- Klicka På Demo.
steg 3) Skriv frågan i frågeredigeraren:
INSERT INTO PriceSELECT id, priceFROM Price2WHERE EXISTS (SELECT id FROM Book WHERE Book.id = Price2.id);
steg 4) Klicka på knappen Kör.
pristabellen ska nu vara enligt följande:
med UPDATE Statement
för att uppnå detsamma genom pgAdmin, gör detta:
Steg 1) Logga in på ditt pgAdmin-konto.
steg 2)
- från navigeringsfältet till vänster – klicka på databaser.
- Klicka På Demo.
steg 3) Skriv frågan i frågeredigeraren:
UPDATE PriceSET price = (SELECT price FROM Price2 WHERE Price2.id = Price.id)WHERE EXISTS (SELECT id, priceFROM Price2WHERE Price2.id = Price.id);
steg 4) Klicka på knappen Kör.
pristabellen ska nu vara enligt följande:
med DELETE Statement
för att uppnå detsamma genom pgAdmin, gör detta:
Steg 1) Logga in på ditt pgAdmin-konto.
steg 2)
- från navigeringsfältet till vänster – klicka på databaser.
- Klicka På Demo.
steg 3) Skriv frågan i frågeredigeraren:
DELETE FROM PriceWHERE EXISTS (SELECT * FROM Price2 WHERE Price.id = Price2.id);
steg 4) Klicka på knappen Kör.
pristabellen ska nu vara enligt följande:
sammanfattning
- operatorn EXISTS testar om det finns en rad(er) i en underfråga.
- den används med en underfråga och sägs ha uppfyllts när underfrågan returnerar minst en rad.
- den används tillsammans med select, UPDATE, INSERT och DELETE-satser.
ladda ner databasen som används i denna handledning