sql >> Databáze >  >> RDS >> SQLite

SQLite EXISTUJE

Shrnutí :v tomto tutoriálu se naučíte používat SQLite EXISTS operátor pro testování existence řádků vrácených poddotazem.

Úvod do SQLite EXISTS operátor

EXISTS operátor je logický operátor, který kontroluje, zda poddotaz vrací nějaký řádek.

Zde je základní syntaxe EXISTS operátor:

EXISTS(subquery)
Code language: SQL (Structured Query Language) (sql)

V této syntaxi je poddotaz SELECT příkaz, který vrací nula nebo více řádků.

Pokud poddotaz vrátí jeden nebo více řádků, EXISTS operátor vrátí true. V opačném případě EXISTS operátor vrátí false nebo NULL .

Všimněte si, že pokud poddotaz vrátí jeden řádek s NULL , což je výsledek EXISTS Operátor je stále pravdivý, protože sada výsledků obsahuje jeden řádek s NULL.

Chcete-li negovat EXISTS operátor, použijete NOT EXISTS operátor takto:

NOT EXISTS (subquery)Code language: SQL (Structured Query Language) (sql)

NOT EXISTS operátor vrátí hodnotu true, pokud poddotaz nevrátí žádný řádek.

SQLite EXISTS příklad operátoru

Viz následující Customers a Invoices tabulky z ukázkové databáze:

Následující výpis najde zákazníky, kteří 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)

Následující obrázek ukazuje částečnou sadu výsledků:

V tomto příkladu pro každého zákazníka EXISTS operátor zkontroluje, zda ID zákazníka existuje ve invoices tabulka.

  • Pokud ano, poddotaz vrátí jeden řádek s hodnotou 1, která způsobí EXISTS operátor vyhodnotí jako pravdivé. Dotaz proto zahrnuje zákazníka do sady výsledků.
  • V případě, že číslo zákazníka v Invoices neexistuje tabulka, poddotaz nevrací žádné řádky, které způsobují EXISTS operátor vyhodnotit na hodnotu false, proto dotaz nezahrnuje zákazníka do sady výsledků.

Všimněte si, že můžete použít IN namísto EXISTS operátor v tomto případě k dosažení stejného výsledku:

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)

Jakmile poddotaz vrátí první řádek, EXISTS operátor zastaví vyhledávání, protože může určit výsledek. Na druhé straně IN Operátor musí pro zjištění výsledku prohledat všechny řádky vrácené poddotazem.

Obecně řečeno, EXISTS operátor je rychlejší než IN Pokud je výsledná sada vrácená poddotazem velká. Naproti tomu IN operátor je rychlejší než EXISTS Pokud je výsledná sada vrácená poddotazem malá.

SQLite NOT EXISTS příklad operátoru

Podívejte se na následující tabulku Interpreti a alba z ukázkové databáze:

Tento dotaz najde všechny interprety, kteří nemají žádné album v tabulce Alba:

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)

Zde je částečný výstup:

V tomto tutoriálu jste se naučili používat SQLite EXISTS operátor pro testování existence řádků vrácených poddotazem.


  1. Špatné návyky:Vyhýbání se NULL v SQL Server

  2. Předání varchar plného hodnot oddělených čárkou do funkce SQL Server IN

  3. MySQL dotaz citlivý na velká a malá písmena

  4. Jaké jsou rozdíly mezi transformacemi Merge Join a Lookup v SSIS?