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
EXISTS
operator ocenia na prawdę. Dlatego zapytanie zawiera curstomer w zestawie wyników. - W przypadku, gdy identyfikator klienta nie istnieje w
Invoices
tabeli, podzapytanie nie zwraca żadnych wierszy, co powoduje, żeEXISTS
operator 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.