sql >> Database >  >> RDS >> SQLite

SQLite BESTAAT

Samenvatting :in deze tutorial leer je hoe je de SQLite EXISTS . gebruikt operator om te testen op het bestaan ​​van rijen die worden geretourneerd door een subquery.

Inleiding tot SQLite EXISTS telefoniste

De EXISTS operator is een logische operator die controleert of een subquery een rij retourneert.

Hier is de basissyntaxis van de EXISTS operator:

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

In deze syntaxis is de subquery een SELECT statement dat nul of meer rijen retourneert.

Als de subquery een of meer rijen retourneert, wordt de EXISTS operator return true. Anders, de EXISTS operator retourneert false of NULL .

Merk op dat als de subquery één rij retourneert met NULL , het resultaat van de EXISTS operator is nog steeds waar omdat de resultaatset één rij met NULL bevat.

Om de EXISTS te negeren operator, gebruik je de NOT EXISTS operator als volgt:

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

De NOT EXISTS operator retourneert true als de subquery geen rij retourneert.

SQLite EXISTS operator voorbeeld

Zie de volgende Customers en Invoices tabellen uit de voorbeelddatabase:

De volgende verklaring vindt klanten die facturen hebben:

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)

De volgende afbeelding toont de gedeeltelijke resultaatset:

In dit voorbeeld geldt voor elke klant de EXISTS operator controleert of de klant-ID bestaat in de invoices tafel.

  • Zo ja, dan retourneert de subquery één rij met waarde 1 die de EXISTS veroorzaakt operator evalueren naar waar. Daarom bevat de query de curstomer in de resultatenset.
  • In het geval dat de klant-ID niet bestaat in de Invoices tabel, de subquery retourneert geen rijen waardoor de EXISTS operator om te evalueren naar false, daarom neemt de zoekopdracht de klant niet op in de resultatenset.

Merk op dat u de IN . kunt gebruiken operator in plaats van EXISTS operator in dit geval om hetzelfde resultaat te bereiken:

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)

Zodra de subquery de eerste rij retourneert, wordt de EXISTS operator stopt met zoeken omdat hij het resultaat kan bepalen. Aan de andere kant, de IN operator moet alle rijen scannen die door de subquery worden geretourneerd om het resultaat te bepalen.

Over het algemeen bestaat de EXISTS operator is sneller dan IN operator als de resultaatset die door de subquery wordt geretourneerd groot is. Daarentegen is de IN operator is sneller dan de EXISTS operator als de resultaatset die door de subquery wordt geretourneerd klein is.

SQLite NOT EXISTS operator voorbeeld

Zie de volgende artiesten- en albumstabel uit de voorbeelddatabase:

Deze zoekopdracht vindt alle artiesten die geen album hebben in de Albums-tabel:

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)

Hier is de gedeeltelijke output:

In deze tutorial heb je geleerd hoe je de SQLite EXISTS . gebruikt operator om te testen op het bestaan ​​van rijen die worden geretourneerd door een subquery.


  1. De landinstelling instellen voor de huidige verbinding in MySQL

  2. Database hoge beschikbaarheid voor Camunda BPM met MySQL of MariaDB Galera Cluster

  3. LAST_DAY() Functie in Oracle

  4. Welke vaardigheden en kennis hebben databaseontwerpers nodig?