SQLite
 sql >> Baza danych >  >> RDS >> SQLite

SQLite ISTNIEJE

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, że EXISTS 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zastrzeżenia dotyczące Pythona i SQLite

  2. Operator INTERSECT SQLite

  3. Zwracanie tablicy ciągów i używanie jej w AutoCompleteTextview

  4. SQLite JSON_ARRAY_LENGTH()

  5. Jak uzyskać identyfikator z bazy danych po kliknięciu elementu listy w Androidzie?