sql >> Databasteknik >  >> RDS >> SQLite

SQLite FINNS

Sammanfattning :i denna handledning kommer du att lära dig hur du använder SQLite EXISTS operator för att testa förekomsten av rader som returneras av en underfråga.

Introduktion till SQLite EXISTS operatör

EXISTS operator är en logisk operator som kontrollerar om en underfråga returnerar någon rad.

Här är den grundläggande syntaxen för EXISTS operatör:

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

I den här syntaxen är underfrågan en SELECT sats som returnerar noll eller fler rader.

Om underfrågan returnerar en eller flera rader, EXISTS operatör returnerar sant. Annars EXISTS operatorn returnerar false eller NULL .

Observera att om underfrågan returnerar en rad med NULL , resultatet av EXISTS operatorn är fortfarande sant eftersom resultatuppsättningen innehåller en rad med NULL.

För att negera koden EXISTS operatorn, använder du NOT EXISTS operatör enligt följande:

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

NOT EXISTS operatorn returnerar true om underfrågan inte returnerar någon rad.

SQLite EXISTS operatörsexempel

Se följande Customers och Invoices tabeller från exempeldatabasen:

Följande uttalande hittar kunder som har fakturor:

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)

Följande bild visar den partiella resultatuppsättningen:

I det här exemplet, för varje kund, EXISTS operatören kontrollerar om kund-id finns i invoices bord.

  • Om ja, returnerar underfrågan en rad med värdet 1 som orsakar EXISTS operatören utvärdera till sant. Därför inkluderar frågan curstomer i resultatuppsättningen.
  • Om kund-id inte finns i Invoices tabell, returnerar underfrågan inga rader som orsakar EXISTS operatör för att utvärdera till falskt, därför inkluderar frågan inte kunden i resultatuppsättningen.

Observera att du kan använda IN operator istället för EXISTS operatör i detta fall för att uppnå samma resultat:

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)

När underfrågan returnerar den första raden, EXISTS operatören slutar söka eftersom den kan fastställa resultatet. Å andra sidan, IN Operatören måste skanna alla rader som returneras av underfrågan för att fastställa resultatet.

Generellt sett är EXISTS operatören är snabbare än IN operatorn om resultatuppsättningen som returneras av underfrågan är stor. Däremot IN operatorn är snabbare än EXISTS operatorn om resultatuppsättningen som returneras av underfrågan är liten.

SQLite NOT EXISTS operatörsexempel

Se följande lista över artister och album från exempeldatabasen:

Denna fråga hittar alla artister som inte har något album i tabellen Album:

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)

Här är den partiella utmatningen:

I den här handledningen har du lärt dig hur du använder SQLite EXISTS operator för att testa förekomsten av rader som returneras av en underfråga.


  1. Temporal databasdesign, med en twist (live kontra utkastrader)

  2. NEXT_DAY() Funktion i Oracle

  3. Primära nycklar i SQL Server

  4. MySQL Workbench Alternatives - ClusterControl Configuration Management