PostgreSQL EXISTS koos SELECT-iga Operator (näide)

⚡ Nutikas kokkuvõte

PostgreSQL EXISTS on Boole'i ​​operaator, mis kontrollib, kas korreleeritud alampäring tagastab mõne rea, lastes SELECT-, INSERT-, UPDATE- ja DELETE-lausetel andmeid tõhusalt vastavate kirjete olemasolu või puudumise järgi filtreerida.

  • ???? süntaksit: WHERE EXISTS (alampäring) tagastab väärtuse tõene (true), kui alampäring annab tulemuseks vähemalt ühe rea.
  • 🔗 Korreleeritud alampäring: EXISTS lingib sisemised ja välised päringud, sobitades ridu jagatud võtmel.
  • Lühis: Funktsioon EXISTS peatub esimesel sobival real, seega sobib see hästi suurte tabelite puhul.
  • 🔁 Neli väidet: Operaator töötab SELECT, INSERT, UPDATE ja DELETE päringute sees.
  • 🛡️ EI OLE OLEMAS: Jätab read turvaliselt välja ja väldib NULL-lõksu, mis katkestab NOT IN-i.
  • 🤖 Tehisintellekti päringud: Assistendid genereerivad EXISTS-klausleid ja märgistavad korreleeritud alampäringute jõudlusriske.

PostgreSQL OLEMASOLEVAD valikuga Operator

Mis on OLEMASOLEVAS PostgreSQL?

. PostgreSQL OLEMAS operaator kontrollib, kas alampäringus on rida(d). See tähendab, et operaatorit kasutatakse koos alampäringuga. Operaatori EXISTS tingimus on täidetud, kui alampäringus on leitud vähemalt üks rida. Seda toimingut saab kasutada koos SELECT, UPDATE, INSERT ja DELETE lausetega.

PostgreSQL EXISTS päringu süntaks

Siin on süntaks PostgreSQL EXISTS väide:

WHERE EXISTS (subquery);

Ülaltoodud süntaks näitab, et operaator EXISTS võtab sisse argumendi, mis on alampäring. Alampäring on lihtsalt a SELECT avaldus mis peaks algama tähega SELECT *, mitte veergude nimede või avaldiste loendiga.

PostgreSQL EXISTS koos SELECT-lausega

Vaatame, kuidas kasutada SELECT-lauset koos EXISTS-operaatoriga. Meil ​​on järgmised tabelid:

Raamat:

PostgreSQL EXISTS koos SELECT-lausega

Hind:

PostgreSQL EXISTS koos SELECT-lausega

Käivitage järgmine avaldus:

SELECT *
FROM Book
WHERE EXISTS (SELECT *
              FROM Price
              WHERE Book.id = Price.id);

See tagastab järgmise:

PostgreSQL EXISTS koos SELECT-lause tulemusega

Ülaltoodud käsk peaks tagastama kõik tabeli Book kirjed, mille ID ühtib alampäringu kõigi kirjete ID-ga. Vastas ainult üks ID. Seega tagastati ainult üks plaat.

PostgreSQL EXISTS koos INSERT-lausega

Saame kasutada operaatorit EXISTS INSERT avaldus. Meil on järgmised 3 tabelit:

Raamat:

PostgreSQL EXISTS koos INSERT-lausega

Hind:

PostgreSQL EXISTS koos INSERT-lausega

Hind2:

PostgreSQL EXISTS koos INSERT-lausega

Seejärel saame käivitada järgmise avalduse:

INSERT INTO Price
SELECT id, price
FROM Price2
WHERE EXISTS (SELECT id
              FROM Book
              WHERE Book.id = Price2.id);

Hinnatabel on nüüd järgmine:

PostgreSQL EXISTS koos INSERT-lause tulemusega

Tabeli Hind5 rida ID-ga 2 sobitati. See rekord sisestati seejärel hinnatabelisse.

PostgreSQL EXISTS koos UPDATE avaldusega

UPDATE avalduses saame kasutada operaatorit EXISTS.

Käivitage järgmine päring:

UPDATE Price
SET price = (SELECT price
              FROM Price2
              WHERE Price2.id = Price.id)
WHERE EXISTS (SELECT id, price
FROM Price2
WHERE Price2.id = Price.id);

PostgreSQL EXISTS koos UPDATE avaldusega

Uuendame Hindade tabeli hinna veergu. Meie eesmärk on, et ID-d jagavate kaupade hinnad oleksid samad. Sobitatud oli ainult üks rida, see tähendab 5.

Kuna aga hinnad on võrdsed ehk siis 205, siis uuendust ei tehtud. Kui vahe oleks olnud, oleks värskendus tehtud.

PostgreSQL EXISTS koos DELETE-lausega

A PostgreSQL DELETE avaldus võib kasutada operaatorit EXISTS. Siin on näide:

DELETE FROM Price
WHERE EXISTS (SELECT *
              FROM Price2
              WHERE Price.id = Price2.id);

Hinnatabel on nüüd järgmine:

PostgreSQL EXISTS koos DELETE-lausega

Rida, mille ID on 5, on kustutatud.

PostgreSQL EXISTS-lause pgAdmini abil

Lisaks SQL-kestale saab samu EXISTS-päringuid visuaalselt käivitada ka pgAdmini liidese kaudu. Vaatame nüüd, kuidas neid toiminguid pgAdmini abil teha saab:

SELECT-lause abil

Allpool on toodud sammud EXISTS päringu kasutamiseks PostgreSQL SELECT-lause abil pgAdmini abil:

Step 1) Logige sisse oma pgAdmini kontole. Avage pgAdmin ja logige oma kontole sisse oma sisselogimisandmetega.

Step 2) Loo demo andmebaas.

  1. Klõpsake vasakpoolsel navigeerimisribal valikul Andmebaasid.
  2. Klõpsake Demo.

PostgreSQL EXISTS-lause pgAdmini abil

Step 3) Tippige päringuredaktorisse allolev päring:

SELECT *
FROM Book
WHERE EXISTS (SELECT *
              FROM Price
              WHERE Book.id = Price.id);

Step 4) Klõpsake nuppu Käivita.

PostgreSQL EXISTS-lause pgAdmini abil

See peaks tagastama järgmise:

PostgreSQL EXISTS-lause pgAdmini abil

Koos INSERT avaldusega

Sama tegemiseks pgAdmini kaudu tehke järgmist:

Step 1) Logige sisse oma pgAdmini kontole.

Step 2)

  1. Klõpsake vasakpoolsel navigeerimisribal valikul Andmebaasid.
  2. Klõpsake Demo.

EXISTS avaldus PostgreSQL kasutades pgAdminit

Step 3) Sisestage päring päringuredaktorisse:

INSERT INTO Price
SELECT id, price
FROM Price2
WHERE EXISTS (SELECT id
              FROM Book
              WHERE Book.id = Price2.id);

Step 4) Klõpsake nuppu Käivita.

EXISTS avaldus PostgreSQL kasutades pgAdminit

Hinnatabel peaks nüüd olema järgmine:

EXISTS avaldus PostgreSQL kasutades pgAdminit

Koos UPDATE avaldusega

Sama tegemiseks pgAdmini kaudu tehke järgmist:

Step 1) Logige sisse oma pgAdmini kontole.

Step 2)

  1. Klõpsake vasakpoolsel navigeerimisribal valikul Andmebaasid.
  2. Klõpsake Demo.

EXISTS avaldus PostgreSQL kasutades pgAdminit

Step 3) Sisestage päring päringuredaktorisse:

UPDATE Price
SET price = (SELECT price
              FROM Price2
              WHERE Price2.id = Price.id)
WHERE EXISTS (SELECT id, price
FROM Price2
WHERE Price2.id = Price.id);

Step 4) Klõpsake nuppu Käivita.

PostgreSQL EXISTS-lause pgAdmini abil

Hinnatabel peaks nüüd olema järgmine:

PostgreSQL EXISTS-lause pgAdmini abil

DELETE avaldusega

Sama tegemiseks pgAdmini kaudu tehke järgmist:

Step 1) Logige sisse oma pgAdmini kontole.

Step 2)

  1. Klõpsake vasakpoolsel navigeerimisribal valikul Andmebaasid.
  2. Klõpsake Demo.

PostgreSQL EXISTS-lause pgAdmini abil

Step 3) Sisestage päring päringuredaktorisse:

DELETE FROM Price
WHERE EXISTS (SELECT *
              FROM Price2
              WHERE Price.id = Price2.id);

Step 4) Klõpsake nuppu Käivita.

PostgreSQL EXISTS-lause pgAdmini abil

Hinnatabel peaks nüüd olema järgmine:

PostgreSQL EXISTS-lause pgAdmini abil

Laadige alla selles õpetuses kasutatud andmebaas

KKK

EXISTS kontrollib, kas korreleeritud alampäring tagastab mõne rea ja peatub esimese vaste juures, seega sobib see suurte alampäringute puhul. IN võrdleb väärtust loendiga ja sobitab väikesed, konstantsed hulgad.

Funktsioon NOT IN saab tagastada null rida, kui alampäring sisaldab NULL-väärtust, kuna võrdlus muutub tundmatuks. Funktsioon NOT EXISTS ignoreerib NULL-väärtusi ja hindab iga rida õigesti, muutes selle usaldusväärseks valikuks anti-liitumiste jaoks.

Seotud alampäring viitab välimise päringu veerule, näiteks WHERE Book.id = Price.id. EXISTS kontrollib seda iga välimise rea puhul uuesti ja tagastab väärtuse true, kui vaste leitakse.

Jah. EXISTS tagastab väärtuse „true” kohe, kui alampäring loob ühe rea, seega see ei skaneeri ülejäänuid. See lühistav käitumine muudab selle tõhusaks suurte korreleeritud alampäringute puhul.

Ei. EXISTS kontrollib ainult seda, kas alampäring tagastab rea, seega SELECT *, SELECT 1 või SELECT id käituvad samamoodi. Alampäringu veeruloend ei mõjuta tulemust.

Indekseeri alampäringu sees ühendatud veerud, jäta korrelatsioonitingimus avaldatavaks ja käivita EXPLAIN ANALYZE. PostgreSQL kirjutab EXISTSi sageli ümber efektiivseks poolliitumiseks, kui indeksid seda toetavad.

Tehisintellekti assistendid muudavad lihtsad inglise keele reeglid EXISTS-klausliteks, loovad korreleeritud alampäringu ja hoiatavad NOT IN NULL lõksude eest. Samuti pakuvad nad häälestamiseks välja indekseid ja EXPLAIN-vihjeid.

Jah. Tehisintellekti kopilot tuvastab alampäringu mustrid ja kirjutab IN ümber kui EXISTS või NOT IN ümber kui NOT EXISTS, parandades NULL-i ohutust ja jõudlust suurtes tabelites.

Võta see postitus kokku järgmiselt: