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.