Résumé :dans ce tutoriel, vous apprendrez à utiliser le SQLite EXISTS
opérateur pour tester l'existence de lignes renvoyées par une sous-requête.
Introduction à SQLite EXISTS
opérateur
Le EXISTS
L'opérateur est un opérateur logique qui vérifie si une sous-requête renvoie une ligne.
Voici la syntaxe de base du EXISTS
opérateur :
EXISTS(subquery)
Code language: SQL (Structured Query Language) (sql)
Dans cette syntaxe, la sous-requête est un SELECT
instruction qui renvoie zéro ou plusieurs lignes.
Si la sous-requête renvoie une ou plusieurs lignes, le EXISTS
l'opérateur renvoie vrai. Sinon, le EXISTS
l'opérateur renvoie faux ou NULL
.
Notez que si la sous-requête renvoie une ligne avec NULL
, le résultat de EXISTS
est toujours vrai car le jeu de résultats contient une ligne avec NULL.
Pour nier le EXISTS
opérateur, vous utilisez le NOT EXISTS
opérateur comme suit :
NOT EXISTS (subquery)
Code language: SQL (Structured Query Language) (sql)
Le NOT EXISTS
l'opérateur renvoie vrai si la sous-requête ne renvoie aucune ligne.
SQLite EXISTS
exemple d'opérateur
Voir les Customers
suivants et Invoices
tables de la base de données exemple :
L'instruction suivante recherche les clients qui ont des factures :
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)
L'image suivante montre le jeu de résultats partiel :
Dans cet exemple, pour chaque client, le EXISTS
l'opérateur vérifie si l'identifiant client existe dans les invoices
tableau.
- Si oui, la sous-requête renvoie une ligne avec la valeur 1 qui provoque le
EXISTS
l'opérateur évalue à vrai. Par conséquent, la requête inclut le client dans le jeu de résultats. - Dans le cas où l'identifiant client n'existe pas dans les
Invoices
table, la sous-requête ne renvoie aucune ligne, ce qui provoque leEXISTS
opérateur à évaluer à faux, par conséquent la requête n'inclut pas le client dans le jeu de résultats.
Notez que vous pouvez utiliser le IN
opérateur au lieu de EXISTS
opérateur dans ce cas pour obtenir le même résultat :
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)
Une fois que la sous-requête renvoie la première ligne, le EXISTS
l'opérateur arrête la recherche car il peut déterminer le résultat. Par contre, le IN
l'opérateur doit analyser toutes les lignes renvoyées par la sous-requête pour déterminer le résultat.
De manière générale, le EXISTS
l'opérateur est plus rapide que IN
opérateur si le jeu de résultats renvoyé par la sous-requête est volumineux. En revanche, le IN
l'opérateur est plus rapide que EXISTS
opérateur si le jeu de résultats renvoyé par la sous-requête est petit.
SQLite NOT EXISTS
exemple d'opérateur
Consultez le tableau Artistes et albums suivant de la base de données exemple :
Cette requête trouve tous les artistes qui n'ont pas d'album dans le tableau Albums :
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)
Voici la sortie partielle :
Dans ce tutoriel, vous avez appris à utiliser SQLite EXISTS
opérateur pour tester l'existence de lignes renvoyées par une sous-requête.