PostgreSQL ON OLEMASSA SELECT-funktiolla Operator (esimerkki)

โšก ร„lykรคs yhteenveto

PostgreSQL EXISTS on totuusarvooperaattori, joka testaa, palauttaako korreloiva alikysely jonkin rivin. Tรคmรค antaa SELECT-, INSERT-, UPDATE- ja DELETE-lausekkeiden suodattaa tietoja tehokkaasti vastaavien tietueiden olemassaolon tai puuttumisen perusteella.

  • ๐Ÿ“‹ Syntaksi: WHERE EXISTS (alikysely) palauttaa arvon true, kun alikysely tuottaa vรคhintรครคn yhden rivin.
  • ๐Ÿ”— Korreloitu alikysely: EXISTS linkittรครค sisรคiset ja ulkoiset kyselyt, jotka vastaavat jaetun avaimen rivejรค.
  • โšก Oikosulku: EXISTS pysรคhtyy ensimmรคiseen vastaavaan riviin, joten se skaalautuu hyvin suurissa taulukoissa.
  • ๐Ÿ” Neljรค lausuntoa: Operaattori toimii SELECT-, INSERT-, UPDATE- ja DELETE-kyselyiden sisรคllรค.
  • ๐Ÿ›ก๏ธ EI OLE OLEMASSA: Jรคttรครค rivit turvallisesti pois ja vรคlttรครค NULL-ansan, joka rikkoo NOT IN -lausekkeen.
  • ๐Ÿค– Tekoรคlykyselyt: Assistentit luovat EXISTS-lausekkeita ja merkitsevรคt korreloituneiden alikyselyiden suorituskykyriskejรค.

PostgreSQL OLEMASSA Select-toiminnolla OperaTor

Mikรค on OLEMASSA PostgreSQL?

PostgreSQL EXISTS operaattori testaa, onko alikyselyssรค rivi(รค). Tรคmรค tarkoittaa, ettรค operaattoria kรคytetรครคn yhdessรค alikyselyn kanssa. EXISTS-operaattorin sanotaan tรคyttyneen, kun alikyselystรค lรถytyy vรคhintรครคn yksi rivi. Voit kรคyttรครค tรคtรค operaatiota yhdessรค SELECT-, UPDATE-, INSERT- ja DELETE-lausekkeiden kanssa.

PostgreSQL EXISTS-kyselyn syntaksi

Tรคssรค on syntaksi kohteelle PostgreSQL EXISTS lausunto:

WHERE EXISTS (subquery);

Yllรค oleva syntaksi osoittaa, ettรค EXISTS-operaattori ottaa argumentin, joka on alikysely. Alakysely on yksinkertaisesti a SELECT-lause jonka pitรคisi alkaa SELECT * -kirjaimella sarakkeiden nimien tai lausekkeiden luettelon sijaan.

PostgreSQL EXISTS ja SELECT-lauseke

Katsotaanpa, miten SELECT-lauseketta kรคytetรครคn EXISTS-operaattorin kanssa. Meillรค on seuraavat taulukot:

Kirja:

PostgreSQL EXISTS ja SELECT-lauseke

Hinta:

PostgreSQL EXISTS ja SELECT-lauseke

Suorita seuraava lauseke:

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

Tรคmรค palauttaa seuraavan:

PostgreSQL EXISTS ja SELECT-lausekkeen tulos

Yllรค olevan komennon pitรคisi palauttaa kaikki Kirja-taulukon tietueet, joiden tunnus vastaa minkรค tahansa alikyselyn tietueen tunnusta. Vain yksi tunnus lรถytyi. Nรคin ollen vain yksi levy palautettiin.

PostgreSQL EXISTS ja INSERT-lauseke

Voimme kรคyttรครค EXISTS-operaattoria an INSERT lausunto. Meillรค on seuraavat 3 pรถytรครค:

Kirja:

PostgreSQL EXISTS ja INSERT-lauseke

Hinta:

PostgreSQL EXISTS ja INSERT-lauseke

Hinta2:

PostgreSQL EXISTS ja INSERT-lauseke

Voimme sitten suorittaa seuraavan lauseen:

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

Hintataulukko on nyt seuraavanlainen:

PostgreSQL EXISTS ja INSERT-lausekkeen tulos

Hinta5-nimisen taulukon rivi, jonka tunnus on 2, tรคsmรคttiin. Tรคmรค tietue lisรคttiin sitten hintataulukkoon.

PostgreSQL OLEMASSA on UPDATE-lausunto

Voimme kรคyttรครค EXISTS-operaattoria UPDATE-kรคskyssรค.

Suorita seuraava kysely:

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 OLEMASSA on UPDATE-lausunto

Pรคivitรคmme Hintataulukon hintasaraketta. Tavoitteemme on, ettรค tunnuksen jakavien tuotteiden hinnat ovat samat. Vain yksi rivi osui, eli 5.

Koska hinnat ovat samat, eli 205, pรคivitystรค ei tehty. Jos ero olisi ollut, pรคivitys olisi tehty.

PostgreSQL EXISTS ja DELETE-lauseke

A PostgreSQL DELETE-kรคsky voi kรคyttรครค EXISTS-operaattoria. Tรคssรค on esimerkki:

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

Hintataulukko on nyt seuraavanlainen:

PostgreSQL EXISTS ja DELETE-lauseke

Rivi, jonka tunnus on 5, on poistettu.

PostgreSQL EXISTS-lauseke pgAdmin-komennolla

SQL-komennon lisรคksi samat EXISTS-kyselyt voidaan suorittaa visuaalisesti pgAdmin-kรคyttรถliittymรคn kautta. Katsotaanpa nyt, miten nรคmรค toiminnot voidaan suorittaa pgAdminin avulla:

SELECT-lausekkeen avulla

Alla on vaiheet EXISTS-kyselyn kรคyttรคmiseen PostgreSQL SELECT-lausekkeella pgAdminin avulla:

Vaihe 1) Kirjaudu pgAdmin-tilillesi. Avaa pgAdmin ja kirjaudu tilillesi tunnuksillasi.

Vaihe 2) Luo demotietokanta.

  1. Napsauta vasemmalla olevasta navigointipalkista Tietokannat.
  2. Napsauta Demo.

PostgreSQL EXISTS-lauseke pgAdmin-komennolla

Vaihe 3) Kirjoita alla oleva kysely kyselyeditoriin:

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

Vaihe 4) Napsauta Suorita-painiketta.

PostgreSQL EXISTS-lauseke pgAdmin-komennolla

Sen pitรคisi palauttaa seuraavat tiedot:

PostgreSQL EXISTS-lauseke pgAdmin-komennolla

INSERT-lausunnon kanssa

Suorita sama pgAdminin kautta seuraavasti:

Vaihe 1) Kirjaudu sisรครคn pgAdmin-tilillesi.

Vaihe 2)

  1. Napsauta vasemmalla olevasta navigointipalkista Tietokannat.
  2. Napsauta Demo.

EXISTS-lauseke kohdassa PostgreSQL pgAdminin avulla

Vaihe 3) Kirjoita kysely kyselyeditoriin:

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

Vaihe 4) Napsauta Suorita-painiketta.

EXISTS-lauseke kohdassa PostgreSQL pgAdminin avulla

Hintataulukon pitรคisi nyt olla seuraava:

EXISTS-lauseke kohdassa PostgreSQL pgAdminin avulla

Pร„IVITYSlausunnon kanssa

Suorita sama pgAdminin kautta seuraavasti:

Vaihe 1) Kirjaudu sisรครคn pgAdmin-tilillesi.

Vaihe 2)

  1. Napsauta vasemmalla olevasta navigointipalkista Tietokannat.
  2. Napsauta Demo.

EXISTS-lauseke kohdassa PostgreSQL pgAdminin avulla

Vaihe 3) Kirjoita kysely kyselyeditoriin:

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);

Vaihe 4) Napsauta Suorita-painiketta.

PostgreSQL EXISTS-lauseke pgAdmin-komennolla

Hintataulukon pitรคisi nyt olla seuraava:

PostgreSQL EXISTS-lauseke pgAdmin-komennolla

POISTA-ilmoituksella

Suorita sama pgAdminin kautta seuraavasti:

Vaihe 1) Kirjaudu sisรครคn pgAdmin-tilillesi.

Vaihe 2)

  1. Napsauta vasemmalla olevasta navigointipalkista Tietokannat.
  2. Napsauta Demo.

PostgreSQL EXISTS-lauseke pgAdmin-komennolla

Vaihe 3) Kirjoita kysely kyselyeditoriin:

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

Vaihe 4) Napsauta Suorita-painiketta.

PostgreSQL EXISTS-lauseke pgAdmin-komennolla

Hintataulukon pitรคisi nyt olla seuraava:

PostgreSQL EXISTS-lauseke pgAdmin-komennolla

Lataa tรคssรค opetusohjelmassa kรคytetty tietokanta

UKK

EXISTS testaa, palauttaako korreloiva alikysely rivin ja pysรคhtyy ensimmรคiseen osumaan, joten se sopii suurille alikyselyille. IN vertaa arvoa listaan โ€‹โ€‹ja sovittaa pienet, vakiojoukot.

NOT IN voi palauttaa nolla riviรค, kun alikysely sisรคltรครค NULL-arvon, koska vertailusta tulee tuntematon. NOT EXISTS jรคttรครค NULL-arvot huomiotta ja arvioi jokaisen rivin oikein, mikรค tekee siitรค luotettavan vaihtoehdon anti-liitoksille.

Korreloitu alikysely viittaa ulomman kyselyn sarakkeeseen, kuten WHERE Book.id = Price.id. EXISTS tarkistaa sen uudelleen jokaiselle ulommalle riville ja palauttaa arvon true, kun osuma lรถytyy.

Kyllรค. EXISTS palauttaa arvon true heti, kun alikysely tuottaa yhden rivin, joten se ei skannaa muita riviรค. Tรคmรค oikosulkutoiminto tekee siitรค tehokkaan suurissa korreloivissa alikyselyissรค.

Ei. EXISTS tarkistaa vain, palauttaako alikysely rivin, joten SELECT *, SELECT 1 tai SELECT id toimivat samalla tavalla. Alikyselyn sisรคllรค oleva sarakeluettelo ei vaikuta tulokseen.

Indeksoi alikyselyn sisรคllรค liitetyt sarakkeet, pidรค korrelaatioehto muutettavissa ja suorita EXPLAIN ANALYZE. PostgreSQL kirjoittaa usein EXISTS-lausekkeen uudelleen tehokkaaksi semi-liitokseksi, kun indeksit tukevat sitรค.

Tekoรคlyavustajat muuttavat selkokieliset sรครคnnรถt EXISTS-lausekkeiksi, rakentavat korreloivan alikyselyn ja varoittavat NOT IN NULL -ansoista. Ne ehdottavat myรถs indeksejรค ja EXPLAIN-vihjeitรค hienosรครคtรถรค varten.

Kyllรค. Tekoรคlyyn perustuva Copilot tunnistaa alikyselykuviot ja kirjoittaa IN-kyselyn uudelleen EXISTS-kyselyksi tai NOT IN-kyselyn NOT EXISTS-kyselyksi, mikรค parantaa NULL-tietoturvaa ja suorituskykyรค suurissa taulukoissa.

Tiivistรค tรคmรค viesti seuraavasti: