Oversigt :i denne øvelse lærer du, hvordan du bruger SQLite IN operator til at bestemme, om en værdi matcher en værdi i en liste over værdier eller et resultat af en underforespørgsel.
Introduktion til SQLite IN operatør
SQLite IN operatoren bestemmer, om en værdi matcher en værdi i en liste eller en underforespørgsel. Syntaksen for IN operatør er som følger:
expression [NOT] IN (value_list|subquery);Code language: SQL (Structured Query Language) (sql)
expression kan være et hvilket som helst gyldigt udtryk eller en kolonne i en tabel.
En liste over værdier er en liste med faste værdier eller et resultatsæt af en enkelt kolonne, der returneres af en underforespørgsel. Den returnerede type udtryk og værdier i listen skal være de samme.
IN operatoren returnerer sand eller falsk afhængigt af, om udtrykket matcher en værdi på en liste med værdier eller ej. For at afvise listen over værdier, bruger du NOT IN operatør.
SQLite IN operatøreksempler
Vi vil bruge Tracks tabel fra prøvedatabasen til demonstrationen.
Følgende sætning bruger IN operatør for at forespørge sporene, hvis medietype-id er 1 eller 2.
SELECT
TrackId,
Name,
Mediatypeid
FROM
Tracks
WHERE
MediaTypeId IN (1, 2)
ORDER BY
Name ASC;Code language: SQL (Structured Query Language) (sql) Prøv det
Denne forespørgsel bruger OR operator i stedet for IN operatør for at returnere det samme resultatsæt som ovenstående forespørgsel:
SELECT
TrackId,
Name,
MediaTypeId
FROM
Tracks
WHERE
MediaTypeId = 1 OR MediaTypeId = 2
ORDER BY
Name ASC;Code language: SQL (Structured Query Language) (sql) Prøv det
Som du kan se fra forespørgslerne, ved hjælp af IN operatøren er meget kortere.
Hvis du har en forespørgsel, der bruger mange OR operatører, kan du overveje at bruge IN operator i stedet for at gøre forespørgslen mere læsbar.
SQLite IN operatør med et eksempel på en underforespørgsel
Følgende forespørgsel returnerer en liste over album-id for kunstner-id 12:
SELECT albumid
FROM albums
WHERE artistid = 12;Code language: SQL (Structured Query Language) (sql) Prøv det
For at få de numre, der hører til kunstner-id 12, kan du kombinere IN operator med en underforespørgsel som følger:
SELECT
TrackId,
Name,
AlbumId
FROM
Tracks
WHERE
AlbumId IN (
SELECT
AlbumId
FROM
Albums
WHERE
ArtistId = 12
);Code language: SQL (Structured Query Language) (sql) Prøv det
I dette eksempel:
- For det første returnerer underforespørgslen en liste over album-id'er, der tilhører kunstner-id 12.
- Derefter returnerer den ydre forespørgsel alle spor, hvis album-id matcher med album-id-listen, der returneres af underforespørgslen.
SQLite IKKE I eksempler
Følgende sætning returnerer en liste over spor, hvis genre-id ikke er på en liste med (1,2,3).
SELECT
trackid,
name,
genreid
FROM
tracks
WHERE
genreid NOT IN (1, 2,3);Code language: SQL (Structured Query Language) (sql) Prøv det
I denne øvelse har du lært, hvordan du bruger SQLite IN operator for at matche en værdi med en liste over værdier eller en underforespørgsel.