Hvad er PostgreSQL eksisterer?
EXISTS-operatøren tester, om der findes en række i en underforespørgsel. Dette betyder, at operatøren bruges sammen med en underforespørgsel. Operatoren Eksister siges at være opfyldt, når mindst én række findes i underforespørgslen. Du kan bruge denne handling sammen med SELECT-, UPDATE-, INSERT- og DELETE-udsagn.
I denne PostgreSQL-selvstudie lærer du følgende:
- Syntaks
- Med SELECT-erklæring
- Med INSERT-erklæring
- Med UPDATE-erklæring
- Med SLET erklæring
- Med pgAdmin
Syntaks
Her er syntaksen for PostgreSQL EXISTS-erklæringen:
WHERE EXISTS (subquery);
Ovenstående syntaks viser, at EXISTS-operatøren tager et argument, som er en underforespørgsel. Underforespørgslen er simpelthen en SELECT-sætning, der skal begynde med en SELECT * i stedet for en liste med kolonnenavne eller udtryk.
Med SELECT-erklæring
Lad os se, hvordan du bruger en SELECT-sætning med EXISTS-operatøren. Vi har følgende tabeller:
Bestil:
Pris:
Kør følgende udsagn:
SELECT *FROM BookWHERE EXISTS (SELECT *FROM PriceWHERE Book.id = Price.id);
Dette returnerer følgende:
Ovenstående kommando skal returnere alle poster i bogtabellen, hvis id svarer til id for eventuelle poster i underforespørgslen. Der blev kun matchet et id. Derfor blev kun en post returneret.
Med INSERT-erklæring
Vi kan bruge EXISTS-operatøren i en INSERT-erklæring. Vi har følgende 3 tabeller:
Bestil:
Pris:
Pris2:
Vi kan derefter køre følgende udsagn:
INSERT INTO PriceSELECT id, priceFROM Price2WHERE EXISTS (SELECT idFROM BookWHERE Book.id = Price2.id);
Pristabellen er nu som følger:
Rækken med et id på 5 i tabellen med navnet Price2 blev matchet. Denne post blev derefter indsat i pristabellen.
Med UPDATE-erklæring
Vi kan bruge EXISTS-operatøren i en UPDATE-erklæring.
Kør følgende forespørgsel:
UPDATE PriceSET price = (SELECT priceFROM Price2WHERE Price2.id = Price.id)WHERE EXISTS (SELECT id, priceFROM Price2WHERE Price2.id = Price.id);
Vi opdaterer priskolonnen i pristabellen. Vores mål er, at priserne på varer, der deler et id, er de samme. Kun en række blev matchet, det vil sige 5.
Da priserne er lige, dvs. 205, blev der imidlertid ikke foretaget nogen opdatering. Hvis der var en forskel, ville der være foretaget en opdatering.
Med SLET erklæring
En PostgreSQL DELETE-erklæring kan bruge EXISTS-operatøren. Her er et eksempel:
DELETE FROM PriceWHERE EXISTS (SELECT *FROM Price2WHERE Price.id = Price2.id);
Pristabellen er nu som følger:
Rækken med id 5 er slettet.
Med pgAdmin
Lad os nu se, hvordan disse handlinger kan udføres ved hjælp af pgAdmin.
Med SELECT-erklæring
For at opnå det samme gennem pgAdmin skal du gøre dette:
Trin 1) Log ind på din pgAdmin-konto.
Trin 2)
- Fra navigationslinjen til venstre - Klik på Databaser.
- Klik på Demo.
Trin 3) Skriv forespørgslen i forespørgselseditoren:
SELECT *FROM BookWHERE EXISTS (SELECT *FROM PriceWHERE Book.id = Price.id);
Trin 4) Klik på knappen Udfør.
Den skal returnere følgende:
Med INSERT-erklæring
For at opnå det samme gennem pgAdmin skal du gøre dette:
Trin 1) Log ind på din pgAdmin-konto.
Trin 2)
- Fra navigationslinjen til venstre - Klik på Databaser.
- Klik på Demo.
Trin 3) Skriv forespørgslen i forespørgselseditoren:
INSERT INTO PriceSELECT id, priceFROM Price2WHERE EXISTS (SELECT idFROM BookWHERE Book.id = Price2.id);
Trin 4) Klik på knappen Udfør.
Pristabellen skal nu være som følger:
Med UPDATE-erklæring
For at opnå det samme gennem pgAdmin skal du gøre dette:
Trin 1) Log ind på din pgAdmin-konto.
Trin 2)
- Fra navigationslinjen til venstre - Klik på Databaser.
- Klik på Demo.
Trin 3) Skriv forespørgslen i forespørgselseditoren:
UPDATE PriceSET price = (SELECT priceFROM Price2WHERE Price2.id = Price.id)WHERE EXISTS (SELECT id, priceFROM Price2WHERE Price2.id = Price.id);
Trin 4) Klik på knappen Udfør.
Pristabellen skal nu være som følger:
Med SLET erklæring
For at opnå det samme gennem pgAdmin skal du gøre dette:
Trin 1) Log ind på din pgAdmin-konto.
Trin 2)
- Fra navigationslinjen til venstre - Klik på Databaser.
- Klik på Demo.
Trin 3) Skriv forespørgslen i forespørgselseditoren:
DELETE FROM PriceWHERE EXISTS (SELECT *FROM Price2WHERE Price.id = Price2.id);
Trin 4) Klik på knappen Udfør.
Pristabellen skal nu være som følger:
Resumé
- EXISTS-operatøren tester, om der findes en række i en underforespørgsel.
- Det bruges med en underforespørgsel og siges at være opfyldt, når underforespørgslen returnerer mindst en række.
- Det bruges sammen med SELECT-, UPDATE-, INSERT- og DELETE-udsagn.
Download den database, der blev brugt i denne vejledning