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

SQLite CASE

Oversigt: i denne øvelse vil du lære om SQLite CASE udtryk for at tilføje den betingede logik til en forespørgsel.

SQLite CASE udtryk evaluerer en liste over betingelser og returnerer et udtryk baseret på resultatet af evalueringen.

CASE udtryk ligner IF-THEN-ELSE erklæring på andre programmeringssprog.

Du kan bruge CASE udtryk i enhver sætning eller sætning, der accepterer et gyldigt udtryk. For eksempel kan du bruge CASE udtryk i klausuler såsom WHERE , ORDER BY , HAVING , SELECT og udsagn såsom SELECT , UPDATE og DELETE .

SQLite giver to former for CASE udtryk:simpel CASE og søgte i CASE .

SQLite simpel CASE udtryk

Den simple CASE udtryk sammenligner et udtryk med en liste af udtryk for at returnere resultatet. Det følgende illustrerer syntaksen for den simple CASE udtryk.

CASE case_expression
     WHEN when_expression_1 THEN result_1
     WHEN when_expression_2 THEN result_2
     ...
     [ ELSE result_else ] 
ENDCode language: SQL (Structured Query Language) (sql)

Den simple CASE udtryk sammenligner case_expression til udtrykket vises i den første WHEN klausul, when_expression_1 , for ligestilling.

Hvis case_expression er lig med when_expression_1 , den simple CASE returnerer udtrykket i den tilsvarende THEN klausul, som er result_1 .

Ellers den simple CASE udtryk sammenligner case_expression med udtrykket i den næste WHEN klausul.

I tilfælde af ingen case_expression matcher when_expression , CASE udtryk returnerer result_else i ELSE klausul. Hvis du udelader ELSE klausulen, CASE udtryk returnerer NULL.

Den simple CASE udtryk bruger kortslutningsevaluering. Med andre ord returnerer den resultatet og holder op med at evaluere andre forhold, så snart den finder et match.

Simpel CASE eksempel

Lad os tage et kig på customers tabel i eksempeldatabasen.

Antag, at du skal lave en rapport over kundegrupperne med den logik, at hvis en kunde befinder sig i USA, tilhører denne kunde den indenlandske gruppe, ellers tilhører kunden den udenlandske gruppe.

For at lave denne rapport bruger du den simple CASE udtryk i SELECT erklæring som følger:

SELECT customerid,
       firstname,
       lastname,
       CASE country 
           WHEN 'USA' 
               THEN 'Domestic' 
           ELSE 'Foreign' 
       END CustomerGroup
FROM 
    customers
ORDER BY 
    LastName,
    FirstName;Code language: SQL (Structured Query Language) (sql)

Prøv det

SQLite søgte i CASE udtryk

Den søgte CASE udtryk evaluerer en liste over udtryk for at bestemme resultatet. Bemærk, at den simple CASE udtryk sammenligner kun for lighed, mens den søgte CASE udtryk kan bruge enhver form for sammenligning.

Det følgende illustrerer syntaksen for den søgte CASE udtryk.

CASE
     WHEN bool_expression_1 THEN result_1
     WHEN bool_expression_2 THEN result_2
     [ ELSE result_else ] 
ENDCode language: SQL (Structured Query Language) (sql)

Den søgte CASE udtryk evaluerer de boolske udtryk i den angivne sekvens og returnerer det tilsvarende resultat, hvis udtrykket evalueres til sandt.

Hvis intet udtryk vurderes til at være sandt, vil den søgte CASE udtryk returnerer udtrykket i ELSE klausul hvis specificeret. Hvis du udelader ELSE klausul, den søgte CASE udtryk returnerer NULL .

Svarende til den simple CASE udtryk, den søgte CASE udtryk stopper evalueringen, når en betingelse er opfyldt.

Søgte i CASE eksempel

Vi vil bruge tracks bord til demonstrationen.

Antag, at du vil klassificere sporene baseret på deres længde, f.eks. mindre et minut, sporet er kort; mellem 1 og 5 minutter er sporet medium; mere end 5 minutter, sporet er langt.

For at opnå dette, bruger du den søgte CASE udtryk som følger:

SELECT
	trackid,
	name,
	CASE
		WHEN milliseconds < 60000 THEN
			'short'
		WHEN milliseconds > 60000 AND milliseconds < 300000 THEN 'medium'
		ELSE
			'long'
		END category
FROM
	tracks;Code language: SQL (Structured Query Language) (sql)

Prøv det

I dette selvstudie har du lært om SQLite CASE udtryk for at danne betinget logik inde i en SQL-forespørgsel.


  1. Livsforsikringsdatamodel

  2. Hvorfor får jeg java.lang.AbstractMethodError, når jeg prøver at indlæse en blob i db'en?

  3. Databaseprofilering i IRI Workbench

  4. Få en liste over datoer mellem to datoer