Podsumowanie :w tym samouczku dowiesz się, jak używać SQLite EXISTS operator do testowania istnienia wierszy zwróconych przez podzapytanie.
Wprowadzenie do SQLite EXISTS operator
EXISTS operator to operator logiczny, który sprawdza, czy podzapytanie zwraca jakikolwiek wiersz.
Oto podstawowa składnia EXISTS operator:
EXISTS(subquery)
Code language: SQL (Structured Query Language) (sql)
W tej składni podzapytanie to SELECT instrukcja, która zwraca zero lub więcej wierszy.
Jeśli podzapytanie zwraca jeden lub więcej wierszy, EXISTS operator zwraca prawdę. W przeciwnym razie EXISTS operator zwraca false lub NULL .
Zauważ, że jeśli podzapytanie zwróci jeden wiersz z NULL , wynik EXISTS operator jest nadal prawdziwy, ponieważ zestaw wyników zawiera jeden wiersz z wartością NULL.
Aby zanegować EXISTS operatora, użyj NOT EXISTS operatora w następujący sposób:
NOT EXISTS (subquery)Code language: SQL (Structured Query Language) (sql)
NOT EXISTS operator zwraca prawdę, jeśli podzapytanie nie zwraca żadnego wiersza.
SQLite EXISTS przykład operatora
Zobacz następujących Customers i Invoices tabele z przykładowej bazy danych:
Poniższe oświadczenie znajduje klientów, którzy mają faktury:
SELECT
CustomerId,
FirstName,
LastName,
Company
FROM
Customers c
WHERE
EXISTS (
SELECT
1
FROM
Invoices
WHERE
CustomerId = c.CustomerId
)
ORDER BY
FirstName,
LastName;
Code language: SQL (Structured Query Language) (sql) Poniższy rysunek przedstawia częściowy zestaw wyników:
W tym przykładzie dla każdego klienta EXISTS operator sprawdza, czy identyfikator klienta istnieje w invoices tabela.
- Jeśli tak, podzapytanie zwraca jeden wiersz o wartości 1, co powoduje, że
EXISTSoperator ocenia na prawdę. Dlatego zapytanie zawiera curstomer w zestawie wyników. - W przypadku, gdy identyfikator klienta nie istnieje w
Invoicestabeli, podzapytanie nie zwraca żadnych wierszy, co powoduje, żeEXISTSoperator do oceny na fałsz, dlatego zapytanie nie obejmuje klienta w zestawie wyników.
Zauważ, że możesz użyć IN operator zamiast EXISTS w tym przypadku operatora, aby osiągnąć ten sam wynik:
SELECT
CustomerId,
FirstName,
LastName,
Company
FROM
Customers c
WHERE
CustomerId IN (
SELECT
CustomerId
FROM
Invoices
)
ORDER BY
FirstName,
LastName;Code language: SQL (Structured Query Language) (sql)
Gdy podzapytanie zwróci pierwszy wiersz, EXISTS operator przestaje szukać, ponieważ może określić wynik. Z drugiej strony IN operator musi przeskanować wszystkie wiersze zwrócone przez podzapytanie, aby określić wynik.
Ogólnie rzecz biorąc, EXISTS operator jest szybszy niż IN operatora, jeśli zestaw wyników zwrócony przez podzapytanie jest duży. Natomiast IN operator jest szybszy niż EXISTS operatora, jeśli zestaw wyników zwrócony przez podzapytanie jest mały.
SQLite NOT EXISTS przykład operatora
Zobacz następującą tabelę Wykonawcy i albumy z przykładowej bazy danych:
To zapytanie umożliwia znalezienie wszystkich wykonawców, którzy nie mają żadnego albumu w tabeli Albumy:
SELECT
*
FROM
Artists a
WHERE
NOT EXISTS(
SELECT
1
FROM
Albums
WHERE
ArtistId = a.ArtistId
)
ORDER BY Name;Code language: SQL (Structured Query Language) (sql) Oto częściowe wyjście:
W tym samouczku nauczyłeś się korzystać z SQLite EXISTS operator do testowania istnienia wierszy zwróconych przez podzapytanie.