SQLite
 sql >> Base de données >  >> RDS >> SQLite

SQLite EXISTE

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 le EXISTS 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.