Hva er PostgreSQL eksisterer?
EXISTS-operatøren tester om det finnes en rad i en underspørring. Dette betyr at operatøren brukes sammen med et underspørsmål. Eksistens-operatøren sies å ha blitt møtt når minst en rad er funnet i underspørringen. Du kan bruke denne operasjonen sammen med SELECT-, UPDATE-, INSERT- og DELETE-setninger.
I denne PostgreSQL-opplæringen lærer du følgende:
- Syntaks
- Med SELECT Statement
- Med INSERT Statement
- Med UPDATE-uttalelse
- Med SLETT uttalelse
- Med pgAdmin
Syntaks
Her er syntaksen for utsagnet fra PostgreSQL EXISTS:
WHERE EXISTS (subquery);
Ovennevnte syntaks viser at EXISTS-operatøren tar inn et argument, som er et underspørsmål. Delspørringen er ganske enkelt en SELECT-setning som skal begynne med en SELECT * i stedet for en liste med kolonnenavn eller uttrykk.
Med SELECT Statement
La oss se hvordan du bruker en SELECT-setning med EXISTS-operatøren. Vi har følgende tabeller:
Bok:
Pris:
Kjør følgende uttalelse:
SELECT *FROM BookWHERE EXISTS (SELECT *FROM PriceWHERE Book.id = Price.id);
Dette returnerer følgende:
Ovennevnte kommando skal returnere alle poster i boktabellen hvis id samsvarer med ID-en for eventuelle poster fra undersøket. Bare en id ble matchet. Derfor ble bare én plate returnert.
Med INSERT Statement
Vi kan bruke EXISTS-operatøren i en INSERT-uttalelse. Vi har følgende tre tabeller:
Bok:
Pris:
Pris2:
Vi kan da kjøre følgende uttalelse:
INSERT INTO PriceSELECT id, priceFROM Price2WHERE EXISTS (SELECT idFROM BookWHERE Book.id = Price2.id);
Pristabellen er nå som følger:
Raden med en id på 5 i tabellen kalt Price2 ble matchet. Denne posten ble deretter satt inn i pristabellen.
Med UPDATE-uttalelse
Vi kan bruke EXISTS-operatøren i en UPDATE-uttalelse.
Kjør følgende spørsmål:
UPDATE PriceSET price = (SELECT priceFROM Price2WHERE Price2.id = Price.id)WHERE EXISTS (SELECT id, priceFROM Price2WHERE Price2.id = Price.id);
Vi oppdaterer priskolonnen i Pris-tabellen. Målet vårt er å ha prisene på varer som deler en id for å være den samme. Bare en rad ble matchet, det vil si 5.
Siden prisene er like, det vil si 205, ble det imidlertid ikke gjort noen oppdatering. Hvis det var en forskjell, ville det blitt gjort en oppdatering.
Med SLETT uttalelse
En PostgreSQL DELETE-setning kan bruke EXISTS-operatøren. Her er et eksempel:
DELETE FROM PriceWHERE EXISTS (SELECT *FROM Price2WHERE Price.id = Price2.id);
Pristabellen er nå som følger:
Raden med ID 5 er slettet.
Med pgAdmin
La oss nå se hvordan disse handlingene kan utføres ved hjelp av pgAdmin.
Med SELECT Statement
For å oppnå det samme gjennom pgAdmin, gjør du dette:
Trinn 1) Logg inn på pgAdmin-kontoen din.
Steg 2)
- Fra navigasjonslinjen til venstre - Klikk på Databaser.
- Klikk på Demo.
Trinn 3) Skriv inn spørringen i spørreeditoren:
SELECT *FROM BookWHERE EXISTS (SELECT *FROM PriceWHERE Book.id = Price.id);
Trinn 4) Klikk på Utfør-knappen.
Den skal returnere følgende:
Med INSERT Statement
For å oppnå det samme gjennom pgAdmin, gjør du dette:
Trinn 1) Logg inn på pgAdmin-kontoen din.
Steg 2)
- Fra navigasjonslinjen til venstre - Klikk på Databaser.
- Klikk på Demo.
Trinn 3) Skriv inn spørringen i spørreeditoren:
INSERT INTO PriceSELECT id, priceFROM Price2WHERE EXISTS (SELECT idFROM BookWHERE Book.id = Price2.id);
Trinn 4) Klikk på Utfør-knappen.
Pristabellen skal nå være som følger:
Med UPDATE-uttalelse
For å oppnå det samme gjennom pgAdmin, gjør du dette:
Trinn 1) Logg inn på pgAdmin-kontoen din.
Steg 2)
- Fra navigasjonslinjen til venstre - Klikk på Databaser.
- Klikk på Demo.
Trinn 3) Skriv inn spørringen i spørreeditoren:
UPDATE PriceSET price = (SELECT priceFROM Price2WHERE Price2.id = Price.id)WHERE EXISTS (SELECT id, priceFROM Price2WHERE Price2.id = Price.id);
Trinn 4) Klikk på Utfør-knappen.
Pristabellen skal nå være som følger:
Med SLETT uttalelse
For å oppnå det samme gjennom pgAdmin, gjør du dette:
Trinn 1) Logg inn på pgAdmin-kontoen din.
Steg 2)
- Fra navigasjonslinjen til venstre - Klikk på Databaser.
- Klikk på Demo.
Trinn 3) Skriv inn spørringen i spørreeditoren:
DELETE FROM PriceWHERE EXISTS (SELECT *FROM Price2WHERE Price.id = Price2.id);
Trinn 4) Klikk på Utfør-knappen.
Pristabellen skal nå være som følger:
Sammendrag
- EXISTS-operatøren tester om det finnes en rad i en underspørring.
- Den brukes sammen med et underspørsmål og sies å ha blitt oppfylt når undersøket returnerer minst en rad.
- Den brukes sammen med SELECT-, UPDATE-, INSERT- og DELETE-setninger.
Last ned databasen som brukes i denne veiledningen