sql >> Database teknologi >  >> RDS >> SQLite

SQLite FINDER

Oversigt :i denne vejledning lærer du, hvordan du bruger SQLite EXISTS operator til at teste for eksistensen af ​​rækker, der returneres af en underforespørgsel.

Introduktion til SQLite FINDER operatør

FINDER operator er en logisk operator, der kontrollerer, om en underforespørgsel returnerer en række.

Her er den grundlæggende syntaks for EXISTS operatør:

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

I denne syntaks er underforespørgslen en SELECT sætning, der returnerer nul eller flere rækker.

Hvis underforespørgslen returnerer en eller flere rækker, vil EXISTS operatør returnerer sandt. Ellers FINDER operator returnerer false eller NULL .

Bemærk, at hvis underforespørgslen returnerer én række med NULL , resultatet af EXISTS operatoren er stadig sand, fordi resultatsættet indeholder én række med NULL.

For at ophæve koden EXISTS operatør, bruger du EKSISTERER IKKE operatør som følger:

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

FINDER IKKE operatoren returnerer sand, hvis underforespørgslen ikke returnerer nogen række.

SQLite FINDER operatøreksempel

Se følgende Kunder og Fakturaer tabeller fra eksempeldatabasen:

Følgende erklæring finder kunder, der har fakturaer:

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ølgende billede viser det delvise resultatsæt:

I dette eksempel, for hver kunde, er EXISTS operatør kontrollerer, om kunde-id'et findes i fakturaerne tabel.

  • Hvis ja, returnerer underforespørgslen én række med værdien 1, der forårsager EXISTS operatør vurdere til sandt. Derfor inkluderer forespørgslen curstomer i resultatsættet.
  • Hvis kunde-id'et ikke findes i Fakturaer tabel, returnerer underforespørgslen ingen rækker, som forårsager EXISTS operatør for at evaluere til falsk, derfor inkluderer forespørgslen ikke kunden i resultatsættet.

Bemærk, at du kan bruge IN operator i stedet for FINDER operatør i dette tilfælde for at opnå det samme 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 underforespørgslen returnerer den første række, FINDER operatør stopper med at søge, fordi den kan bestemme resultatet. På den anden side er IN operatøren skal scanne alle rækker returneret af underforespørgslen for at bestemme resultatet.

Generelt set er FINDER operatoren er hurtigere end IN operator, hvis resultatsættet, der returneres af underforespørgslen, er stort. Derimod er IN operatoren er hurtigere end EXISTS operator, hvis resultatsættet, der returneres af underforespørgslen, er lille.

SQLite FINDER IKKE operatøreksempel

Se følgende tabel over kunstnere og album fra eksempeldatabasen:

Denne forespørgsel finder alle kunstnere, der ikke har noget 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)

Her er det delvise output:

I denne øvelse har du lært, hvordan du bruger SQLite EXISTS operator til at teste for eksistensen af ​​rækker, der returneres af en underforespørgsel.


  1. ADDDATE() Eksempler – MySQL

  2. Er der et alternativ til TOP i MySQL?

  3. Træk sekunder fra en dato-tidsværdi i MariaDB

  4. Grundlæggende om tabeludtryk, del 1