Podsumowanie: W tym poradniku dowiesz się jak używać operatora PostgreSQL EXISTS do testowania istnienia wierszy w podzapytaniu.

Wprowadzenie do PostgreSQL operator EXISTS

Operator EXISTS jest operatorem boolean, który testuje istnienie wierszy w podzapytaniu.

Poniżej przedstawiono składnię operatora EXISTS:

EXISTS (subquery)

Operator EXISTS przyjmuje argument będący podzapytaniem.

Jeśli podzapytanie zwraca co najmniej jeden wiersz, wynikiem EXISTS jest true. W przypadku, gdy podzapytanie nie zwraca żadnego wiersza, wynik EXISTS jest fałszywy.

Operator EXISTS jest często używany z podzapytaniem skorelowanym.

Wynik operatora EXISTS zależy od tego, czy jakikolwiek wiersz zwrócony przez podzapytanie, a nie od zawartości wiersza. Dlatego kolumny, które występują w klauzuli SELECT podzapytania nie są istotne.

Z tego powodu powszechną konwencją kodowania jest pisanie EXISTS w następującej formie:

Zauważ, że jeśli podzapytanie zwraca NULL, wynikiem EXISTS jest prawda.

PostgreSQL EXISTS przykłady

Do demonstracji użyjemy następujących tabel customeri payment w przykładowej bazie danych:

tabele klient i płatność

A) Znajdź klientów, którzy mają co najmniej jedną płatność, której kwota jest większa niż 11.

Następujące zapytanie zwraca klientów, którzy zapłacili przynajmniej jedną płatność za wynajem na kwotę większą niż 11:

SELECT first_name, last_nameFROM customer cWHERE EXISTS (SELECT 1 FROM payment p WHERE p.customer_id = c.customer_id AND amount > 11 )ORDER BY first_name, last_name;

Kwerenda zwraca następujące dane wyjściowe:

PostgreSQL EXISTS example

W tym przykładzie, dla każdego klienta w tabeli customer, podzapytanie sprawdza tabelę payment aby znaleźć czy ten klient dokonał przynajmniej jednej płatności (p.customer_id = c.customer_id) i czy kwota jest większa niż 11 ( amount > 11)

B) NOT EXISTS przykład

Operator NOT neguje wynik operatora EXISTS. Operator NOT EXISTS jest przeciwny do operatora EXISTS. Oznacza to, że jeśli podzapytanie nie zwróci żadnego wiersza, NOT EXISTS zwraca wartość true. Jeśli podzapytanie zwraca jeden lub więcej wierszy, NOT EXISTS zwraca false.

Następujący przykład zwraca klientów, którzy nie dokonali żadnej płatności większej niż 11.

SELECT first_name, last_nameFROM customer cWHERE NOT EXISTS (SELECT 1 FROM payment p WHERE p.customer_id = c.customer_id AND amount > 11 )ORDER BY first_name, last_name;

Tutaj jest wynik:

PostgreSQL NOT EXISTS przykład

C) EXISTS i NULL

Jeśli podzapytanie zwraca NULLEXISTS zwraca true. Zobacz następujący przykład:

SELECTfirst_name,last_nameFROMcustomerWHEREEXISTS( SELECT NULL )ORDER BYfirst_name,last_name;
Code language: SQL (Structured Query Language) (sql)

W tym przykładzie podzapytanie zwróciło NULL, dlatego zapytanie zwróciło wszystkie wiersze z tabeli customer.

PostgreSQL EXIST with NULL przykład

W tym tutorialu dowiedziałeś się, jak wykorzystać funkcję PostgreSQL EXISTS do testowania istnienia wierszy w podzapytaniu.

  • Czy ten tutorial był pomocny?
  • TakNie

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *