PostgreSQL EXISTĂ cu SELECT Operator (Exemplu)

⚡ Rezumat inteligent

PostgreSQL EXISTS este un operator boolean care testează dacă o subinterogare corelată returnează orice rând, permițând instrucțiunilor SELECT, INSERT, UPDATE și DELETE să filtreze eficient datele după prezența sau absența înregistrărilor corespondente.

  • 📋 Sintaxă: WHERE EXISTS (subinterogare) returnează „true” când subinterogarea produce cel puțin un rând.
  • 🔗 Subinterogare corelată: EXISTS leagă interogările interne și externe, care corespund rândurilor de pe o cheie partajată.
  • Scurtcircuit: EXISTS se oprește la primul rând corespondent, deci se scalează bine pe tabele mari.
  • 🔁 Patru afirmații: Operatorul funcționează în cadrul interogărilor SELECT, INSERT, UPDATE și DELETE.
  • 🛡️ NU EXISTĂ: Exclude în siguranță rândurile și evită capcana NULL care intră în NOT IN.
  • 🤖 Interogări AI: Asistenții generează clauze EXISTS și semnalează riscurile de performanță ale subinterogărilor corelate.

PostgreSQL EXISTĂ cu Selectare OperaTdR

Ce EXISTĂ în PostgreSQL?

PostgreSQL EXISTĂ Operatorul testează dacă există un rând (sau mai multe rânduri) într-o subinterogare. Aceasta înseamnă că operatorul este utilizat împreună cu o subinterogare. Se spune că operatorul EXISTS a fost îndeplinit atunci când se găsește cel puțin un rând în subinterogare. Puteți utiliza această operație împreună cu instrucțiunile SELECT, UPDATE, INSERT și DELETE.

PostgreSQL Sintaxa interogării EXISTS

Iată sintaxa pentru PostgreSQL Declarație EXISTS:

WHERE EXISTS (subquery);

Sintaxa de mai sus arată că operatorul EXISTS preia un argument, care este o subinterogare. Subinterogarea este pur și simplu a instrucțiunea SELECT care ar trebui să înceapă cu un SELECT * în loc de o listă de nume de coloane sau expresii.

PostgreSQL EXISTS cu instrucțiunea SELECT

Să vedem cum se utilizează o instrucțiune SELECT cu operatorul EXISTS. Avem următoarele tabele:

Carte:

PostgreSQL EXISTS cu instrucțiunea SELECT

Preț:

PostgreSQL EXISTS cu instrucțiunea SELECT

Rulați următoarea instrucțiune:

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

Aceasta returnează următoarele:

PostgreSQL EXISTS cu rezultatul instrucțiunii SELECT

Comanda de mai sus ar trebui să returneze toate înregistrările din tabelul Book al căror id se potrivește cu id-ul oricăror înregistrări din subinterogare. Un singur ID a fost potrivit. Prin urmare, a fost returnată o singură înregistrare.

PostgreSQL EXISTS cu instrucțiunea INSERT

Putem folosi operatorul EXISTS într-un instrucțiunea INSERT. Avem următoarele 3 tabele:

Carte:

PostgreSQL EXISTS cu instrucțiunea INSERT

Preț:

PostgreSQL EXISTS cu instrucțiunea INSERT

Preț 2:

PostgreSQL EXISTS cu instrucțiunea INSERT

Apoi putem rula următoarea instrucțiune:

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

Tabelul de prețuri este acum după cum urmează:

PostgreSQL EXISTS cu rezultatul instrucțiunii INSERT

Rândul cu id-ul 5 din tabelul numit Preț2 a fost potrivit. Această înregistrare a fost apoi inserată în tabelul de prețuri.

PostgreSQL EXISTS cu instrucțiunea UPDATE

Putem folosi operatorul EXISTS într-o instrucțiune UPDATE.

Rulați următoarea interogare:

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 cu instrucțiunea UPDATE

Actualizăm coloana de preț a tabelului de prețuri. Scopul nostru este ca prețurile articolelor care au un ID să fie aceleași. Doar un rând a fost potrivit, adică 5.

Cu toate acestea, deoarece prețurile sunt egale, adică 205, nu s-a făcut nicio actualizare. Dacă ar fi fost o diferență, ar fi fost făcută o actualizare.

PostgreSQL EXISTS cu instrucțiunea DELETE

A PostgreSQL Instrucțiunea DELETE poate folosi operatorul EXISTS. Iată un exemplu:

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

Tabelul de prețuri este acum după cum urmează:

PostgreSQL EXISTS cu instrucțiunea DELETE

Rândul cu ID-ul 5 a fost șters.

PostgreSQL Instrucțiunea EXISTS folosind pgAdmin

Dincolo de shell-ul SQL, aceleași interogări EXISTS pot fi executate vizual prin interfața pgAdmin. Acum să vedem cum pot fi efectuate aceste acțiuni folosind pgAdmin:

Cu instrucțiunea SELECT

Mai jos sunt pașii pentru utilizarea unei interogări EXISTS în PostgreSQL cu o instrucțiune SELECT folosind pgAdmin:

Pas 1) Conectați-vă la contul dvs. pgAdmin. Deschideți pgAdmin și conectați-vă la contul dvs. folosind datele de autentificare.

Pas 2) Creați o bază de date demonstrativă.

  1. Din bara de navigare din stânga, faceți clic pe Baze de date.
  2. Faceți clic pe Demo.

PostgreSQL Instrucțiunea EXISTS folosind pgAdmin

Pas 3) Introduceți interogarea de mai jos în editorul de interogări:

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

Pas 4) Faceți clic pe butonul Execute.

PostgreSQL Instrucțiunea EXISTS folosind pgAdmin

Ar trebui să returneze următoarele:

PostgreSQL Instrucțiunea EXISTS folosind pgAdmin

Cu instrucțiunea INSERT

Pentru a realiza același lucru prin pgAdmin, procedați astfel:

Pas 1) Conectați-vă la contul dvs. pgAdmin.

Pas 2)

  1. Din bara de navigare din stânga, faceți clic pe Baze de date.
  2. Faceți clic pe Demo.

Instrucțiunea EXISTS în PostgreSQL folosind pgAdmin

Pas 3) Introduceți interogarea în editorul de interogări:

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

Pas 4) Faceți clic pe butonul Execute.

Instrucțiunea EXISTS în PostgreSQL folosind pgAdmin

Tabelul de prețuri ar trebui să fie acum după cum urmează:

Instrucțiunea EXISTS în PostgreSQL folosind pgAdmin

Cu Declarație UPDATE

Pentru a realiza același lucru prin pgAdmin, procedați astfel:

Pas 1) Conectați-vă la contul dvs. pgAdmin.

Pas 2)

  1. Din bara de navigare din stânga, faceți clic pe Baze de date.
  2. Faceți clic pe Demo.

Instrucțiunea EXISTS în PostgreSQL folosind pgAdmin

Pas 3) Introduceți interogarea în editorul de interogări:

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

Pas 4) Faceți clic pe butonul Execute.

PostgreSQL Instrucțiunea EXISTS folosind pgAdmin

Tabelul de prețuri ar trebui să fie acum după cum urmează:

PostgreSQL Instrucțiunea EXISTS folosind pgAdmin

Cu instrucțiunea DELETE

Pentru a realiza același lucru prin pgAdmin, procedați astfel:

Pas 1) Conectați-vă la contul dvs. pgAdmin.

Pas 2)

  1. Din bara de navigare din stânga, faceți clic pe Baze de date.
  2. Faceți clic pe Demo.

PostgreSQL Instrucțiunea EXISTS folosind pgAdmin

Pas 3) Introduceți interogarea în editorul de interogări:

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

Pas 4) Faceți clic pe butonul Execute.

PostgreSQL Instrucțiunea EXISTS folosind pgAdmin

Tabelul de prețuri ar trebui să fie acum după cum urmează:

PostgreSQL Instrucțiunea EXISTS folosind pgAdmin

Descărcați baza de date folosită în acest tutorial

Întrebări frecvente

EXISTS testează dacă o subinterogare corelată returnează orice rând și se oprește la prima potrivire, deci este potrivită pentru subinterogările mari. IN compară o valoare cu o listă și se potrivește cu mulțimi mici, constante.

NOT IN poate returna zero rânduri când subinterogarea conține un NULL, deoarece comparația devine necunoscută. NOT EXISTS ignoră valorile NULL și evaluează fiecare rând corect, ceea ce o face alegerea fiabilă pentru anti-join-uri.

O subinterogare corelată face referire la o coloană din interogarea externă, cum ar fi WHERE Book.id = Price.id. EXISTS o verifică din nou pentru fiecare rând extern și returnează true odată ce găsește o potrivire.

Da. EXISTS returnează valoarea „true” imediat ce subinterogarea produce un rând, deci nu scanează restul. Acest comportament de scurtcircuit o face eficientă în cazul subinterogărilor corelate de mari dimensiuni.

Nu. EXISTS verifică doar dacă subinterogarea returnează un rând, deci SELECT *, SELECT 1 sau SELECT id se comportă la fel. Lista de coloane din interiorul subinterogării nu afectează rezultatul.

Indexați coloanele unite în subinterogare, păstrați condiția de corelare sargabilă și rulați EXPLAIN ANALYZE. PostgreSQL rescrie adesea EXISTS ca o semi-join eficientă atunci când indexurile o suportă.

Asistenții inteligenți artificiali transformă regulile din limba engleză simplă în clauze EXISTS, construiesc subinterogarea corelată și avertizează despre capcanele NOT IN NULL. De asemenea, sugerează indexuri și indicii EXPLAIN pentru reglare.

Da. Un AI Copilot detectează modele de subinterogări și rescrie IN ca EXISTS sau NOT IN ca NOT EXISTS, îmbunătățind siguranța și performanța valorilor NULL pe tabele mari.

Rezumați această postare cu: