Vad är PostgreSQL?
EXISTS-operatören testar om det finns en rad i en underfråga. Detta innebär att operatören används tillsammans med en underfråga. Operatören Exister 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-uttalanden.
I den här PostgreSQL-självstudien lär du dig följande:
- Syntax
- Med SELECT Statement
- Med INSERT Statement
- Med UPDATE-uttalande
- Med DELETE Statement
- Med pgAdmin
Syntax
Här är syntaxen för uttalandet om PostgreSQL EXISTS:
WHERE EXISTS (subquery);
Ovanstående syntax visar att EXISTS-operatören tar in ett argument som är en underfråga. Underfrågan är helt enkelt ett SELECT-uttalande som bör börja med ett SELECT * istället för en lista med kolumnnamn eller -uttryck.
Med SELECT Statement
Låt oss se hur man använder ett SELECT-uttalande med EXISTS-operatören. Vi har följande tabeller:
Bok:
Pris:
Kör följande uttalande:
SELECT *FROM BookWHERE EXISTS (SELECT *FROM PriceWHERE Book.id = Price.id);
Detta returnerar följande:
Ovanstående kommando ska returnera alla poster i boktabellen vars id matchar id för eventuella poster av underfrågan. Endast ett ID matchades. Därför returnerades bara en post.
Med INSERT Statement
Vi kan använda EXISTS-operatören i ett INSERT-uttalande. Vi har följande tre tabeller:
Bok:
Pris:
Pris2:
Vi kan sedan köra följande uttalande:
INSERT INTO PriceSELECT id, priceFROM Price2WHERE EXISTS (SELECT idFROM BookWHERE Book.id = Price2.id);
Pristabellen är nu som följer:
Raden med ett id på 5 i tabellen som heter Price2 matchades. Denna post infördes sedan i pristabellen.
Med UPDATE-uttalande
Vi kan använda EXISTS-operatören i ett UPDATE-uttalande.
Kör följande fråga:
UPDATE PriceSET price = (SELECT priceFROM Price2WHERE 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 dock ingen uppdatering. Om det var en skillnad skulle en uppdatering ha gjorts.
Med DELETE Statement
Ett PostgreSQL DELETE-uttalande kan använda EXISTS-operatören. Här är ett exempel:
DELETE FROM PriceWHERE EXISTS (SELECT *FROM Price2WHERE Price.id = Price2.id);
Pristabellen är nu som följer:
Raden med id 5 är borttagen.
Med pgAdmin
Låt oss nu se hur dessa åtgärder kan utföras med pgAdmin.
Med SELECT Statement
För att åstadkomma samma 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ågeditoren:
SELECT *FROM BookWHERE EXISTS (SELECT *FROM PriceWHERE Book.id = Price.id);
Steg 4) Klicka på knappen Kör.
Den ska returnera följande:
Med INSERT Statement
För att åstadkomma samma 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ågeditoren:
INSERT INTO PriceSELECT id, priceFROM Price2WHERE EXISTS (SELECT idFROM BookWHERE Book.id = Price2.id);
Steg 4) Klicka på knappen Kör.
Pristabellen ska nu vara som följer:
Med UPDATE-uttalande
För att åstadkomma samma 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ågeditoren:
UPDATE PriceSET price = (SELECT priceFROM Price2WHERE 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 som följer:
Med DELETE Statement
För att åstadkomma samma 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ågeditoren:
DELETE FROM PriceWHERE EXISTS (SELECT *FROM Price2WHERE Price.id = Price2.id);
Steg 4) Klicka på knappen Kör.
Pristabellen ska nu vara som följer:
Sammanfattning
- EXISTS-operatören testar om det finns en rad 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-uttalanden.
Ladda ner databasen som används i denna handledning