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í
EXISTSoperátor vyhodnotí jako pravdivé. Dotaz proto zahrnuje zákazníka do sady výsledků. - V případě, že číslo zákazníka v
Invoicesneexistuje tabulka, poddotaz nevrací žádné řádky, které způsobujíEXISTSoperá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.