PostgreSQL ISTNIEJE z WYBIERZ Operator (Przykład)

⚡ Inteligentne podsumowanie

PostgreSQL EXISTS to operator logiczny, który sprawdza, czy skorelowane podzapytanie zwraca jakikolwiek wiersz, umożliwiając instrukcjom SELECT, INSERT, UPDATE i DELETE wydajne filtrowanie danych według obecności lub braku pasujących rekordów.

  • 📋 Składnia: WHERE EXISTS (podzapytanie) zwraca wartość true, gdy podzapytanie zwróci przynajmniej jeden wiersz.
  • 🔗 Skorelowane podzapytanie: EXISTS łączy zapytania wewnętrzne i zewnętrzne, dopasowując wiersze do klucza współdzielonego.
  • Zwarcie: EXISTS zatrzymuje się na pierwszym pasującym wierszu, dzięki czemu dobrze skaluje się w przypadku dużych tabel.
  • 🔁 Cztery stwierdzenia: Operator działa w zapytaniach SELECT, INSERT, UPDATE i DELETE.
  • 🛡️ NIE ISTNIEJE: Bezpiecznie wyklucza wiersze i unika pułapki NULL, która powoduje błąd NOT IN.
  • 🤖 Zapytania AI: Asystenci generują klauzule EXISTS i sygnalizują zagrożenia wydajnościowe związane z skorelowanymi podzapytaniami.

PostgreSQL ISTNIEJE z Select OperaTor

Co to jest EXISTS w PostgreSQL?

PostgreSQL ISTNIEJE Operator sprawdza, czy wiersz(e) istnieją w podzapytaniu. Oznacza to, że operator jest używany razem z podzapytaniem. Operator EXISTS uznaje się za spełniony, gdy w podzapytaniu zostanie znaleziony co najmniej jeden wiersz. Operacji tej można używać razem z instrukcjami SELECT, UPDATE, INSERT i DELETE.

PostgreSQL Składnia zapytania EXISTS

Oto składnia dla PostgreSQL Instrukcja ISTNIEJE:

WHERE EXISTS (subquery);

Powyższa składnia pokazuje, że operator EXISTS przyjmuje argument, który jest podzapytaniem. Podzapytanie jest po prostu SELECT oświadczenie które powinno zaczynać się od SELECT * zamiast listy nazw kolumn lub wyrażeń.

PostgreSQL EXISTS z poleceniem SELECT

Zobaczmy, jak używać instrukcji SELECT z operatorem EXISTS. Mamy następujące tabele:

Książka:

PostgreSQL EXISTS z poleceniem SELECT

Cena:

PostgreSQL EXISTS z poleceniem SELECT

Uruchom następujące polecenie:

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

To zwraca następujące informacje:

PostgreSQL EXISTS z wynikiem polecenia SELECT

Powyższe polecenie powinno zwrócić wszystkie rekordy w tabeli Book, których identyfikator odpowiada identyfikatorowi dowolnego rekordu w podzapytaniu. Dopasowano tylko jeden identyfikator. W związku z tym zwrócono tylko jeden rekord.

PostgreSQL EXISTS z poleceniem INSERT

Możemy użyć operatora EXISTS w WSTAW oświadczenieMamy następujące 3 tabele:

Książka:

PostgreSQL EXISTS z poleceniem INSERT

Cena:

PostgreSQL EXISTS z poleceniem INSERT

Cena2:

PostgreSQL EXISTS z poleceniem INSERT

Następnie możemy uruchomić następujące polecenie:

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

Tabela cen wygląda teraz następująco:

PostgreSQL Wynik EXISTS z poleceniem INSERT

Dopasowano wiersz o identyfikatorze 5 w tabeli o nazwie Cena2. Rekord ten został następnie wstawiony do tabeli cen.

PostgreSQL EXISTS z instrukcją UPDATE

Operatora EXISTS możemy używać w poleceniu UPDATE.

Uruchom następujące zapytanie:

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 z instrukcją UPDATE

Aktualizujemy kolumnę cenową w tabeli cen. Naszym celem jest, aby ceny przedmiotów mających wspólny identyfikator były takie same. Dopasowano tylko jeden wiersz, czyli 5.

Ponieważ jednak ceny są równe, czyli 205, nie dokonano żadnej aktualizacji. Gdyby była różnica, aktualizacja zostałaby dokonana.

PostgreSQL EXISTS z instrukcją DELETE

A PostgreSQL Instrukcja DELETE może używać operatora EXISTS. Oto przykład:

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

Tabela cen wygląda teraz następująco:

PostgreSQL EXISTS z instrukcją DELETE

Wiersz o identyfikatorze 5 został usunięty.

PostgreSQL Instrukcja EXISTS z użyciem pgAdmin

Poza powłoką SQL, te same zapytania EXISTS można wykonać wizualnie za pomocą interfejsu pgAdmin. Zobaczmy teraz, jak można wykonać te czynności za pomocą pgAdmin:

Z instrukcją SELECT

Poniżej przedstawiono kroki korzystania z zapytania EXISTS w PostgreSQL za pomocą polecenia SELECT przy użyciu pgAdmin:

Krok 1) Zaloguj się na swoje konto pgAdmin. Otwórz pgAdmin i zaloguj się na swoje konto, używając swoich danych logowania.

Krok 2) Utwórz bazę danych demonstracyjną.

  1. Na pasku nawigacyjnym po lewej stronie kliknij opcję Bazy danych.
  2. Kliknij opcję Demo.

PostgreSQL Instrukcja EXISTS z użyciem pgAdmin

Krok 3) Wpisz poniższe zapytanie w edytorze zapytań:

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

Krok 4) Kliknij przycisk Wykonaj.

PostgreSQL Instrukcja EXISTS z użyciem pgAdmin

Powinno zostać zwrócone:

PostgreSQL Instrukcja EXISTS z użyciem pgAdmin

Z instrukcją INSERT

Aby osiągnąć to samo poprzez pgAdmin, wykonaj następujące czynności:

Krok 1) Zaloguj się na swoje konto pgAdmin.

Krok 2)

  1. Na pasku nawigacyjnym po lewej stronie kliknij opcję Bazy danych.
  2. Kliknij opcję Demo.

Oświadczenie EXISTS w PostgreSQL za pomocą pgAdmina

Krok 3) Wpisz zapytanie w edytorze zapytań:

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

Krok 4) Kliknij przycisk Wykonaj.

Oświadczenie EXISTS w PostgreSQL za pomocą pgAdmina

Tabela cen powinna teraz wyglądać następująco:

Oświadczenie EXISTS w PostgreSQL za pomocą pgAdmina

Z instrukcją UPDATE

Aby osiągnąć to samo poprzez pgAdmin, wykonaj następujące czynności:

Krok 1) Zaloguj się na swoje konto pgAdmin.

Krok 2)

  1. Na pasku nawigacyjnym po lewej stronie kliknij opcję Bazy danych.
  2. Kliknij opcję Demo.

Oświadczenie EXISTS w PostgreSQL za pomocą pgAdmina

Krok 3) Wpisz zapytanie w edytorze zapytań:

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

Krok 4) Kliknij przycisk Wykonaj.

PostgreSQL Instrukcja EXISTS z użyciem pgAdmin

Tabela cen powinna teraz wyglądać następująco:

PostgreSQL Instrukcja EXISTS z użyciem pgAdmin

Z instrukcją DELETE

Aby osiągnąć to samo poprzez pgAdmin, wykonaj następujące czynności:

Krok 1) Zaloguj się na swoje konto pgAdmin.

Krok 2)

  1. Na pasku nawigacyjnym po lewej stronie kliknij opcję Bazy danych.
  2. Kliknij opcję Demo.

PostgreSQL Instrukcja EXISTS z użyciem pgAdmin

Krok 3) Wpisz zapytanie w edytorze zapytań:

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

Krok 4) Kliknij przycisk Wykonaj.

PostgreSQL Instrukcja EXISTS z użyciem pgAdmin

Tabela cen powinna teraz wyglądać następująco:

PostgreSQL Instrukcja EXISTS z użyciem pgAdmin

Pobierz bazę danych używaną w tym samouczku

FAQ

EXISTS sprawdza, czy skorelowane podzapytanie zwraca dowolny wiersz i zatrzymuje się na pierwszym dopasowaniu, co oznacza, że ​​pasuje do dużych podzapytań. IN porównuje wartość z listą i dopasowuje małe, stałe zbiory.

NOT IN może zwrócić zero wierszy, gdy podzapytanie zawiera wartość NULL, ponieważ porównanie staje się nieznane. NOT EXISTS ignoruje wartości NULL i poprawnie ocenia każdy wiersz, co czyni go niezawodnym wyborem w przypadku antypołączeń.

Skorelowane podzapytanie odwołuje się do kolumny z zapytania zewnętrznego, np. WHERE Book.id = Price.id. Funkcja EXISTS sprawdza ją ponownie dla każdego wiersza zewnętrznego i zwraca wartość true po znalezieniu dopasowania.

Tak. Funkcja EXISTS zwraca wartość true, gdy podzapytanie wygeneruje jeden wiersz, więc nie skanuje pozostałych. To krótkie zachowanie sprawia, że ​​funkcja ta jest wydajna w przypadku dużych, skorelowanych podzapytań.

Nie. EXISTS sprawdza tylko, czy podzapytanie zwraca wiersz, więc SELECT *, SELECT 1 lub SELECT id zachowują się tak samo. Lista kolumn w podzapytaniu nie ma wpływu na wynik.

Zaindeksuj kolumny połączone wewnątrz podzapytania, zachowaj dopuszczalny warunek korelacji i uruchom polecenie EXPLAIN ANALYZE. PostgreSQL często przepisuje EXISTS jako wydajne półzłączenie, jeśli indeksy to obsługują.

Asystenci AI przekształcają reguły prostego języka w klauzule EXISTS, budują skorelowane podzapytania i ostrzegają przed pułapkami NOT IN NULL. Sugerują również indeksy i podpowiadają EXPLAIN do dostrajania.

Tak. Copilot AI wykrywa wzorce podzapytań i przepisuje IN jako EXISTS lub NOT IN jako NOT EXISTS, zwiększając bezpieczeństwo wartości NULL i wydajność w dużych tabelach.

Podsumuj ten post następująco: