SQLite Interrogazione: Seleziona, Dove, LIMITE, OFFSET, Conteggio, Raggruppa per

Per scrivere query SQL in un file SQLite database, รจ necessario sapere come funzionano le clausole SELECT, FROM, WHERE, GROUP BY, ORDER BY e LIMIT e come utilizzarle.

Durante questo tutorial imparerai come utilizzare queste clausole e come scrivere SQLite clausole.

Lettura dei dati con Seleziona

La clausola SELECT รจ l'istruzione principale che usi per interrogare un SQLite Banca dati. Nella clausola SELECT, dichiari cosa selezionare. Ma prima della clausola select, vediamo da dove possiamo selezionare i dati utilizzando la clausola FROM.

La clausola FROM viene utilizzata per specificare dove si desidera selezionare i dati. Nella clausola from, รจ possibile specificare una o piรน tabelle o sottoquery da cui selezionare i dati, come vedremo piรน avanti nei tutorial.

Si noti che, per tutti gli esempi seguenti, รจ necessario eseguire sqlite3.exe e aprire una connessione al database di esempio come segue:

Passo 1) In questa fase,

  1. Aprire Risorse del computer e andare alla seguente directory โ€œC:\sqlite" e
  2. Quindi apri โ€œsqlite3.exe"

Lettura dei dati con Seleziona

Passo 2) Apri la banca datiโ€TutorialSampleDB.db" con il seguente comando:

Lettura dei dati con Seleziona

Ora sei pronto per eseguire qualsiasi tipo di query sul database.

Nella clausola SELECT, puoi selezionare non solo un nome di colonna, ma hai molte altre opzioni per specificare cosa selezionare. Come segue:

SELECT *

Questo comando selezionerร  tutte le colonne da tutte le tabelle (o sottoquery) a cui si fa riferimento nella clausola FROM. Per esempio:

SELECT * 
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Questo selezionerร  tutte le colonne sia dalle tabelle studenti che dalle tabelle dipartimenti:

Lettura dei dati con Seleziona

SELEZIONA nometabella.*

Ciรฒ selezionerร  tutte le colonne solo dalla tabella "nometabella". Per esempio:

SELECT Students.*
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Questo selezionerร  tutte le colonne solo dalla tabella degli studenti:

Lettura dei dati con Seleziona

Un valore letterale

Un valore letterale รจ un valore costante che puรฒ essere specificato nell'istruzione select. รˆ possibile utilizzare normalmente valori letterali nello stesso modo in cui si utilizzano i nomi delle colonne nella clausola SELECT. Questi valori letterali verranno visualizzati per ogni riga tra le righe restituite dalla query SQL.

Ecco alcuni esempi di diversi valori letterali che puoi selezionare:

  • Letterale numerico: numeri in qualsiasi formato come 1, 2.55, ... ecc.
  • Stringhe letterali: qualsiasi stringa "USA", "questo รจ un testo di esempio", ... ecc.
  • NULL โ€“ Valore NULL.
  • Current_TIME โ€“ Ti darร  l'ora corrente.
  • CURRENT_DATE โ€“ questo ti darร  la data corrente.

Questo puรฒ essere utile in alcune situazioni in cui devi selezionare un valore costante per tutte le righe restituite. Ad esempio, se vuoi selezionare tutti gli studenti dalla tabella Studenti, con una nuova colonna chiamata Paese che contiene il valore "USA", puoi farlo:

SELECT *, 'USA' AS Country FROM Students;

Questo ti darร  tutte le colonne degli studenti, piรน una nuova colonna "Paese" come questa:

Lettura dei dati con Seleziona

Tieni presente che questa nuova colonna Paese non รจ effettivamente una nuova colonna aggiunta alla tabella. รˆ una colonna virtuale, creata nella query per visualizzare i risultati e non verrร  creata nella tabella.

Nomi e alias

L'alias รจ un nuovo nome per la colonna che consente di selezionare la colonna con un nuovo nome. Gli alias delle colonne vengono specificati utilizzando la parola chiave "AS".

Ad esempio, se desideri selezionare la colonna StudentName da restituire con "Student Name" anzichรฉ "StudentName" puoi assegnarle un alias come questo:

SELECT StudentName AS 'Student Name' FROM Students;

Questo ti darร  i nomi degli studenti con il nome "Nome studente" invece di "Nome studente" in questo modo:

Nomi e alias

Tieni presente che il nome della colonna รจ ancora "Nome dello studenteโ€œ; la colonna StudentName รจ sempre la stessa, non cambia con l'alias.

L'alias non modificherร  il nome della colonna; cambierร  semplicemente il nome visualizzato nella clausola SELECT.

Inoltre, tieni presente che la parola chiave "AS" รจ facoltativa, puoi inserire il nome dell'alias senza di essa, qualcosa del genere:

SELECT StudentName 'Student Name' FROM Students;

E ti darร  esattamente lo stesso risultato della query precedente:

Nomi e alias

Puoi anche dare alias alle tabelle, non solo alle colonne. Con la stessa parola chiave โ€œASโ€. Ad esempio, puoi fare questo:

SELECT s.* FROM Students AS s;

Questo ti darร  tutte le colonne nella tabella Studenti:

Nomi e alias

Questo puรฒ essere molto utile se si stanno unendo piรน tabelle; invece di ripetere il nome completo della tabella nella query, รจ possibile assegnare a ogni tabella un nome alias breve. Ad esempio, nella query seguente:

SELECT Students.StudentName, Departments.DepartmentName
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Questa query selezionerร  il nome di ciascun studente dalla tabella "Studenti" con il nome del dipartimento dalla tabella "Dipartimenti":

Nomi e alias

Tuttavia, la stessa query puรฒ essere scritta in questo modo:

SELECT s.StudentName, d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
  • Abbiamo assegnato alla tabella Studenti un alias โ€œsโ€ e alla tabella Dipartimenti un alias โ€œdโ€.
  • Quindi invece di utilizzare il nome completo della tabella, abbiamo utilizzato i loro alias per fare riferimento ad esse.
  • INNER JOIN unisce due o piรน tabelle insieme utilizzando una condizione. Nel nostro esempio, abbiamo unito la tabella Studenti alla tabella Dipartimenti con la colonna DepartmentId. C'รจ anche una spiegazione approfondita per l'INNER JOIN nella sezione "SQLite Unisciโ€ tutorial.

Questo ti darร  l'output esatto della query precedente:

Nomi e alias

DOVE

Scrivere query SQL utilizzando la sola clausola SELECT con la clausola FROM, come abbiamo visto nella sezione precedente, ti darร  tutte le righe delle tabelle. Tuttavia, se desideri filtrare i dati restituiti, devi aggiungere una clausola "WHERE".

La clausola WHERE viene utilizzata per filtrare il set di risultati restituito da Query SQL. Ecco come funziona la clausola WHERE:

  • Nella clausola WHERE รจ possibile specificare una "espressione".
  • Tale espressione verrร  valutata per ogni riga restituita dalle tabelle specificate nella clausola FROM.
  • L'espressione verrร  valutata come espressione booleana, con un risultato vero, falso o nullo.
  • Quindi verranno restituite solo le righe per le quali l'espressione รจ stata valutata con un valore vero e quelle con risultati falsi o nulli verranno ignorate e non incluse nel set di risultati.
  • Per filtrare i risultati impostati utilizzando la clausola WHERE, รจ necessario utilizzare espressioni e operatori.

Elenco degli operatori in SQLite e come usarli

Nella sezione seguente spiegheremo come filtrare utilizzando espressioni e operatori.

L'espressione รจ uno o piรน valori letterali o colonne combinati tra loro con un operatore.

Tieni presente che puoi utilizzare le espressioni sia nella clausola SELECT che nella clausola WHERE.

Negli esempi seguenti, proveremo le espressioni e gli operatori sia nella clausola select che nella clausola WHERE. Per mostrarti come funzionano.

Esistono diversi tipi di espressioni e operatori che รจ possibile specificare come segue:

SQLite l'operatore di concatenazione โ€œ||โ€

Questo operatore viene utilizzato per concatenare uno o piรน valori letterali o colonne tra loro. Produrrร  una stringa di risultati da tutti i valori o colonne letterali concatenati. Per esempio:

SELECT 'Id with Name: '|| StudentId || StudentName AS StudentIdWithName
FROM Students;

Questo si concatenerร  in un nuovo alias โ€œStudentIdConNome"

  • Il valore stringa letterale โ€œId con nome: "
  • con il valore del โ€œStudentId"colonna e
  • con il valore da "Nome dello studente"colonna

SQLite l'operatore di concatenazione '||'

SQLite Operatore CAST:

L'operatore CAST viene utilizzato per convertire un valore da un tipo di dati a un altro tipo di dati.

Ad esempio, se hai un valore numerico memorizzato come valore stringa come questo " '12.5' " e vuoi convertirlo in un valore numerico puoi usare l'operatore CAST per farlo in questo modo "CAST('12.5' โ€‹โ€‹COME REALE)โ€œ. Oppure se hai un valore decimale come 12.5 e devi ottenere solo la parte intera, puoi convertirlo in un numero intero come questo "CAST(12.5 AS INTEGER)".

Esempio

Nel seguente comando proveremo a convertire valori diversi in altri tipi di dati:

SELECT CAST('12.5' AS REAL) ToReal, CAST(12.5 AS INTEGER) AS ToInteger;

Questo ti darร :

SQLite CAST Operator

Il risultato รจ il seguente:

  • CAST('12.5' โ€‹โ€‹AS REAL) โ€“ il valore '12.5' โ€‹โ€‹รจ un valore stringa, verrร  convertito in un valore REAL.
  • CAST(12.5 AS INTEGER) โ€“ il valore 12.5 รจ un valore decimale, verrร  convertito in un valore intero. La parte decimale verrร  troncata e diventerร  12.

SQLite Aritmetica Operatori:

Prendi due o piรน valori letterali numerici o colonne numeriche e restituisci un valore numerico. Gli operatori aritmetici supportati in SQLite siamo:

  • Aggiunta โ€œ+โ€ โ€“ fornisce la somma dei due operandi.
  • Sottrazione โ€œ-โ€ โ€“ sottrae i due operandi e dร  come risultato la differenza.
  • Moltiplicazione โ€œ*โ€ โ€“ il prodotto dei due operandi.
  • Promemoria (modulo) โ€œ%โ€ โ€“ fornisce il resto che risulta dalla divisione di un operando per il secondo operando.
  • Divisioneโ€/โ€ โ€“ restituisce il quoziente risultante dalla divisione dell'operando sinistro per l'operando destro.

Esempio:

Nell'esempio seguente, proveremo i cinque operatori aritmetici con valori numerici letterali nello stesso

seleziona la clausola:

SELECT 25+6, 25-6, 25*6, 25%6, 25/6;

Questo ti darร :

SQLite Aritmetica OperaTors

Nota come qui abbiamo utilizzato un'istruzione SELECT senza una clausola FROM. E questo รจ consentito SQLite purchรฉ selezioniamo valori letterali.

SQLite Operatori di confronto

Confronta due operandi tra loro e restituisci un vero o un falso come segue:

  • "<โ€ โ€“ restituisce vero se l'operando di sinistra รจ minore dell'operando di destra.
  • "<=โ€ โ€“ restituisce vero se l'operando di sinistra รจ minore o uguale all'operando di destra.
  • ">โ€ โ€“ restituisce vero se l'operando di sinistra รจ maggiore dell'operando di destra.
  • ">=โ€ โ€“ restituisce vero se l'operando di sinistra รจ maggiore o uguale all'operando di destra.
  • "=" e "==โ€ โ€“ restituisce vero se i due operandi sono uguali. Tieni presente che entrambi gli operatori sono uguali e non vi รจ alcuna differenza tra loro.
  • "!=" e "<>โ€ โ€“ restituisce vero se i due operandi non sono uguali. Tieni presente che entrambi gli operatori sono uguali e non vi รจ alcuna differenza tra loro.

Notare che, SQLite esprime il valore vero con 1 e il valore falso con 0.

Esempio:

SELECT 
  10<6 AS '<', 10<=6 AS '<=',
  10>6 AS '>', 10>=6 AS '>=',
  10=6 AS '=', 10==6 AS '==',
  10!=6 AS '!=', 10<>6 AS '<>';

Questo darร  qualcosa del genere:

SQLite Confronto OperaTors

SQLite Operatori di corrispondenza di pattern

"COMEโ€ โ€“ viene utilizzato per la corrispondenza dei modelli. Utilizzando โ€œComeโ€œ, รจ possibile cercare valori che corrispondono a un modello specificato utilizzando un carattere jolly.

L'operando a sinistra puรฒ essere un valore letterale stringa o una colonna stringa. Il modello puรฒ essere specificato come segue:

  • Contiene modello. Per esempio, NomeStudente MI PIACE '%a%' โ€“ cercherร  i nomi degli studenti che contengono la lettera โ€œaโ€ in qualsiasi posizione nella colonna NomeStudente.
  • Inizia con il modello. Per esempio, "NomeStudente MI PIACE 'a%'โ€ โ€“ cerca i nomi degli studenti che iniziano con la lettera โ€œaโ€.
  • Termina con il modello. Per esempio, "NomeStudente MI PIACE '%a'โ€ โ€“ Cerca i nomi degli studenti che terminano con la lettera โ€œaโ€.
  • Corrispondenza di qualsiasi singolo carattere in una stringa utilizzando la lettera di sottolineatura "_". Per esempio, "NomeStudente COME 'J___'โ€ โ€“ Cerca i nomi degli studenti lunghi 4 caratteri. Deve iniziare con la lettera "J" e puรฒ contenere altri tre caratteri dopo la lettera "J".

Esempi di corrispondenza dei modelli:

  1. Ottieni nomi di studenti che iniziano con la lettera "j":
    SELECT StudentName FROM Students WHERE StudentName LIKE 'j%';

    Risultato:

    SQLite Pattern Matching OperaTors

  2. Ottieni che i nomi degli studenti finiscano con la lettera "y":
    SELECT StudentName FROM Students WHERE StudentName LIKE '%y';

    Risultato:

    SQLite Pattern Matching OperaTors

  3. Ottieni i nomi degli studenti che contengono la lettera "n":
    SELECT StudentName FROM Students WHERE StudentName LIKE '%n%';

    Risultato:

    SQLite Pattern Matching OperaTors

โ€œGLOBโ€ โ€“ รจ equivalente all'operatore LIKE, ma GLOB รจ sensibile alle maiuscole e alle minuscole, a differenza dell'operatore LIKE. Ad esempio, i due comandi seguenti restituiranno risultati diversi:

SELECT 'Jack' GLOB 'j%';
SELECT 'Jack' LIKE 'j%';

Questo ti darร :

SQLite Pattern Matching OperaTors

  • La prima istruzione restituisce 0 (falso) perchรฉ l'operatore GLOB distingue tra maiuscole e minuscole, quindi "j" non รจ uguale a "J". Tuttavia, la seconda istruzione restituirร  1 (vero) perchรฉ l'operatore LIKE non fa distinzione tra maiuscole e minuscole, quindi "j" รจ uguale a "J".

Altri operatori:

SQLite and

Un operatore logico che combina una o piรน espressioni. Restituirร  vero, solo se tutte le espressioni restituiscono un valore "vero". Tuttavia, restituirร  false solo se tutte le espressioni restituiscono un valore โ€œfalseโ€.

Esempio:

La query seguente cercherร  gli studenti che hanno StudentId > 5 e StudentName che inizia con la lettera N; gli studenti restituiti devono soddisfare le due condizioni:

SELECT * 
FROM Students 
WHERE (StudentId > 5) AND (StudentName LIKE 'N%');

SQLite and Operator

Come output, nello screenshot qui sopra, questo ti darร  solo "Nancy". Nancy รจ l'unica studentessa che soddisfa entrambe le condizioni.

SQLite OR

Un operatore logico che combina una o piรน espressioni, in modo che se uno degli operatori combinati restituisce vero, restituirร  vero. Tuttavia, se tutte le espressioni restituiscono false, verrร  restituito false.

Esempio:

La seguente query cercherร  gli studenti che hanno StudentId > 5 o StudentName che inizia con la lettera N; gli studenti restituiti devono soddisfare almeno una delle condizioni:

SELECT * 
FROM Students 
WHERE (StudentId > 5) OR (StudentName LIKE 'N%');

Questo ti darร :

SQLite OR Operator

Come output, nello screenshot sopra, questo ti darร  il nome di uno studente con la lettera "n" nel nome piรน l'ID studente con valore>5.

Come puoi vedere il risultato รจ diverso dalla query con l'operatore AND.

SQLite TRA

BETWEEN viene utilizzato per selezionare i valori compresi in un intervallo di due valori. Per esempio, "X TRA Y E Z" restituirร  true (1) se il valore X รจ compreso tra i due valori Y e Z. Altrimenti, restituirร  false (0). "X TRA Y E Z" รจ equivalente a "X >= Y E X <= Zโ€œ, X deve essere maggiore o uguale a Y e X รจ minore o uguale a Z.

Esempio:

Nella seguente query di esempio, scriveremo una query per ottenere gli studenti con valore Id compreso tra 5 e 8:

SELECT *
FROM Students
WHERE StudentId BETWEEN 5 AND 8;

Questo darร  solo agli studenti con ID 5, 6, 7 e 8:

SQLite TRA Operator

SQLite IN

Accetta un operando e un elenco di operandi. Restituirร  true se il valore del primo operando รจ uguale al valore di uno degli operandi dall'elenco. L'operatore IN restituisce true (1) se l'elenco di operandi contiene il valore del primo operando nei suoi valori. Altrimenti, restituirร  false (0).

Come questo: "colIN(x, y, z)โ€œ. Ciรฒ equivale aโ€ (col=x) o (col=y) o (col=z) ".

Esempio:

La seguente query selezionerร  solo gli studenti con ID 2, 4, 6, 8:

SELECT * 
FROM Students
WHERE StudentId IN(2, 4, 6, 8);

Mi Piace

SQLite IN Operator

La query precedente fornirร  lo stesso risultato della query seguente perchรฉ sono equivalenti:

SELECT * 
FROM Students
WHERE (StudentId = 2) OR (StudentId =  4) OR (StudentId =  6) OR (StudentId = 8);

Entrambe le query forniscono l'output esatto. Tuttavia, la differenza tra le due query รจ che nella prima query abbiamo utilizzato l'operatore "IN". Nella seconda query abbiamo utilizzato piรน operatori โ€œORโ€.

L'operatore IN equivale a utilizzare piรน operatori OR. IL "DOVE IDStudente IN(2, 4, 6, 8)" รจ equivalente a " DOVE (StudentId = 2) OR (StudentId = 4) OR (StudentId = 6) OR (StudentId = 8);"

Mi Piace

SQLite IN Operator

SQLite NON IN

L'operando โ€œNOT INโ€ รจ l'opposto dell'operatore IN. Ma con la stessa sintassi; richiede un operando e un elenco di operandi. Restituirร  vero se il valore del primo operando non รจ uguale a uno dei valori degli operandi dall'elenco. cioรจ restituirร  vero (0) se l'elenco degli operandi non contiene il primo operando. Come questo: "col NON IN(x, y, z)โ€œ. Ciรฒ equivale a โ€œ(col<>x) AND (col<>y) AND (col<>z)".

Esempio:

La seguente query selezionerร  gli studenti con ID diversi da uno di questi ID 2, 4, 6, 8:

SELECT * 
FROM Students
WHERE StudentId NOT IN(2, 4, 6, 8);

Ti piace questa

SQLite NON IN Operator

La query precedente fornisce lo stesso risultato esatto della query seguente perchรฉ sono equivalenti:

SELECT * 
FROM Students
WHERE (StudentId <> 2) AND (StudentId <> 4) AND (StudentId <> 6) AND (StudentId <> 8);

Mi Piace

SQLite NON IN Operator

Nello screenshot sopra,

Abbiamo utilizzato piรน operatori diversi da "<>" per ottenere un elenco di studenti che non sono uguali a nessuno dei seguenti ID: 2, 4, 6 o 8. Questa query restituirร  tutti gli altri studenti diversi da questi elenchi di ID.

SQLite ESISTE

Gli operatori EXISTS non accettano operandi; dopo รจ necessaria solo una clausola SELECT. L'operatore EXISTS restituirร  vero (1) se sono presenti righe restituite dalla clausola SELECT e restituirร  falso (0) se non sono presenti righe restituite dalla clausola SELECT.

Esempio:

Nell'esempio seguente, selezioneremo il nome del dipartimento, se l'ID del dipartimento esiste nella tabella studenti:

SELECT DepartmentName
FROM Departments AS d
WHERE EXISTS (SELECT DepartmentId FROM Students AS s WHERE d.DepartmentId = s.DepartmentId);

Questo ti darร :

SQLite ESISTE Operator

Solo i tre dipartimentiโ€Informatica, fisica e arte" verrร  restituito. E il nome del dipartimentoโ€Matematica" non verrร  restituito perchรฉ non ci sono studenti in quel dipartimento, quindi l'ID dipartimento non esiste nella tabella degli studenti. Ecco perchรฉ l'operatore EXISTS ha ignorato il "Matematica" Dipartimento.

SQLite NON

Reverse il risultato dell'operatore precedente che viene dopo. Ad esempio:

  • NOT BETWEEN โ€“ Restituirร  vero se BETWEEN restituisce falso e viceversa.
  • NOT LIKE โ€“ Restituirร  vero se LIKE restituisce falso e viceversa.
  • NOT GLOB โ€“ Restituirร  vero se GLOB restituisce falso e viceversa.
  • NON ESISTE โ€“ Restituirร  vero se EXISTS restituisce falso e viceversa.

Esempio:

Nell'esempio seguente, useremo l'operatore NOT con l'operatore EXISTS per ottenere i nomi dei dipartimenti che non esistono nella tabella Students, che รจ il risultato inverso dell'operatore EXISTS. Quindi, la ricerca verrร  eseguita tramite DepartmentId che non esiste nella tabella department.

SELECT DepartmentName
FROM Departments AS d
WHERE NOT EXISTS (SELECT DepartmentId 
                  FROM Students AS s 
                  WHERE d.DepartmentId = s.DepartmentId);

Uscita:

SQLite NON Operator

Solo il dipartimentoโ€Matematica " verrร  restituito. Perchรฉ il "Matematicaโ€ รจ l'unico dipartimento che non esiste nella tabella degli studenti.

Limitare e ordinare

SQLite Ordine

SQLite L'ordine consiste nell'ordinare il risultato in base a una o piรน espressioni. Per ordinare il set di risultati, รจ necessario utilizzare la clausola ORDER BY come segue:

  • Innanzitutto, devi specificare la clausola ORDER BY.
  • La clausola ORDER BY deve essere specificata alla fine della query; dopo di essa รจ possibile specificare solo la clausola LIMIT.
  • Specificare l'espressione con cui ordinare i dati, questa espressione puรฒ essere un nome di colonna o un'espressione.
  • Dopo l'espressione รจ possibile specificare una direzione di ordinamento facoltativa. O DESC, per ordinare i dati in ordine decrescente o ASC per ordinare i dati in ordine crescente. Se non ne specificassi nessuno, i dati verrebbero ordinati in modo crescente.
  • รˆ possibile specificare piรน espressioni utilizzando "," tra loro.

Esempio

Nell'esempio seguente selezioneremo tutti gli studenti ordinati in base al loro nome ma in ordine decrescente, quindi in base al nome del dipartimento in ordine crescente:

SELECT s.StudentName, d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId
ORDER BY d.DepartmentName ASC , s.StudentName DESC;

Questo ti darร :

Limitare e ordinare

  • SQLite ordinerร  innanzitutto tutti gli studenti in base al nome del dipartimento in ordine crescente
  • Quindi, per ciascun nome di dipartimento, tutti gli studenti sotto quel nome di dipartimento verranno visualizzati in ordine decrescente in base ai loro nomi

SQLite Limite:

Puoi limitare il numero di righe restituite dalla tua query SQL, utilizzando la clausola LIMIT. Ad esempio, LIMIT 10 ti darร  solo 10 righe e ignorerร  tutte le altre righe.

Nella clausola LIMIT รจ possibile selezionare un numero specifico di righe a partire da una posizione specifica utilizzando la clausola OFFSET. Per esempio, "SPOSTAMENTO LIMITE 4 4" ignorerร  le prime 4 righe e restituirร  4 righe a partire dalla quinta riga, quindi otterrai le righe 5,6,7 e 8.

Tieni presente che la clausola OFFSET รจ facoltativa, puoi scriverla come "LIMITE 4, 4" e ti darร  i risultati esatti.

Esempio:

Nell'esempio seguente, restituiremo solo 3 studenti a partire dall'ID studente 5 utilizzando la query:

SELECT * FROM Students LIMIT 4,3;

Questo ti darร  solo tre studenti a partire dalla riga 5. Quindi ti darร  le righe con StudentId 5, 6 e 7:

Limitare e ordinare

Rimozione dei duplicati

Se la tua query SQL restituisce valori duplicati, puoi utilizzare il comando "DISTINCT" parola chiave per rimuovere tali duplicati e restituire valori distinti. รˆ possibile specificare piรน di una colonna dopo il tasto DISTINCT.

Esempio:

La seguente query restituirร  valori duplicati dei "nomi dipartimento": qui abbiamo valori duplicati con i nomi IT, Fisica e Arti.

SELECT d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

Questo ti darร  valori duplicati per il nome del dipartimento:

Rimozione di duplicati

Notare come sono presenti valori duplicati per il nome del dipartimento. Ora utilizzeremo la parola chiave DISTINCT con la stessa query per rimuovere tali duplicati e ottenere solo valori univoci. Come questo:

SELECT DISTINCT d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

Questo ti darร  solo tre valori univoci per la colonna del nome del dipartimento:

Rimozione di duplicati

Aggregato

SQLite Gli aggregati sono funzioni integrate definite in SQLite che raggrupperร  piรน valori di piรน righe in un unico valore.

Ecco gli aggregati supportati da SQLite:

SQLite AVG()

Restituita la media per tutti i valori x.

Esempio:

Nell'esempio seguente otterremo il voto medio che gli studenti devono ottenere da tutti gli esami:

SELECT AVG(Mark) FROM Marks;

Questo ti darร  il valore โ€œ18.375โ€:

Aggregato:SQLite AVG()

Questi risultati derivano dalla somma di tutti i valori dei voti divisi per il loro conteggio.

COUNT() โ€“ COUNT(X) o COUNT(*)

Restituisce il conteggio totale del numero di volte in cui รจ apparso il valore x. Ed ecco alcune opzioni che puoi utilizzare con COUNT:

  • COUNT(x): conta solo i valori x, dove x รจ il nome di una colonna. Ignorerร  i valori NULL.
  • COUNT(*): conta tutte le righe da tutte le colonne.
  • COUNT (DISTINCT x): รจ possibile specificare una parola chiave DISTINCT prima di x che otterrร  il conteggio dei valori distinti di x.

Esempio

Nell'esempio seguente, otterremo il conteggio totale dei dipartimenti con COUNT(DepartmentId), COUNT(*) e COUNT(DISTINCT DepartmentId) e le loro differenze:

SELECT COUNT(DepartmentId), COUNT(DISTINCT DepartmentId), COUNT(*) FROM Students;

Questo ti darร :

Aggregato:COUNT() โ€“ COUNT(X) o COUNT(*)

Come segue:

  • COUNT(DepartmentId) ti fornirร  il conteggio di tutti gli ID del dipartimento e ignorerร  i valori null.
  • COUNT(DISTINCT DepartmentId) fornisce valori distinti di DepartmentId, che sono solo 3. Quali sono i tre diversi valori del nome del dipartimento. Si noti che ci sono 8 valori del nome del dipartimento nel nome dello studente. Ma solo i tre diversi valori che sono matematica, informatica e fisica.
  • COUNT(*) conta il numero di righe nella tabella studenti che corrispondono a 10 righe per 10 studenti.

GRUPPO_CONCAT() โ€“ GRUPPO_CONCAT(X) o GRUPPO_CONCAT(X,Y)

La funzione di aggregazione GROUP_CONCAT concatena piรน valori in un unico valore, separandoli con una virgola. Ha le seguenti opzioni:

  • GRUPPO_CONCAT(X): concatena tutto il valore di x in un'unica stringa, con la virgola "", utilizzata come separatore tra i valori. I valori NULL verranno ignorati.
  • GROUP_CONCAT(X, Y): concatenerร  i valori di x in un'unica stringa, con il valore di y utilizzato come separatore tra ciascun valore invece del separatore predefinito ','. Anche i valori NULL verranno ignorati.
  • GROUP_CONCAT(DISTINCT X): concatenerร  tutti i valori distinti di x in un'unica stringa, con la virgola "", utilizzata come separatore tra i valori. I valori NULL verranno ignorati.

GRUPPO_CONCAT(NomeDipartimento) Esempio

La query seguente concatenerร  tutti i valori del nome del dipartimento dalla tabella studenti e dipartimenti in una stringa separata da virgole. Quindi, invece di restituire un elenco di valori, un valore su ogni riga. Restituirร  solo un valore su una riga, con tutti i valori separati da virgole:

SELECT GROUP_CONCAT(d.DepartmentName)
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

Questo ti darร :

Aggregato:GROUP_CONCAT() โ€“ GRUPPO_CONCAT(X) o GRUPPO_CONCAT(X,Y)

Questo ti darร  l'elenco dei valori dei nomi di 8 dipartimenti concatenati in una stringa separata da virgole.

GRUPPO_CONCAT(DISTINCTNomeDipartimento) Esempio

La seguente query concatenerร  i valori distinti del nome del dipartimento dalle tabelle studenti e dipartimenti in un'unica stringa separata da virgole:

SELECT GROUP_CONCAT(DISTINCT d.DepartmentName)
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

Questo ti darร :

Aggregato:GROUP_CONCAT(DISTINCT NomeDipartimento) Esempio

Nota come il risultato รจ diverso dal risultato precedente; sono stati restituiti solo tre valori che sono i nomi dei dipartimenti distinti e i valori duplicati sono stati rimossi.

GRUPPO_CONCAT(NomeDipartimento ,'&') Esempio

La seguente query concatenerร  tutti i valori della colonna del nome del dipartimento dalle tabelle studenti e dipartimenti in un'unica stringa, ma con il carattere '&' al posto della virgola come separatore:

SELECT GROUP_CONCAT(d.DepartmentName, '&')
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

Questo ti darร :

Aggregato:GROUP_CONCAT(NomeDipartimento,'&') Esempio

Notare come viene utilizzato il carattere "&" al posto del carattere predefinito "," per separare i valori.

SQLite MASSIMO() e MINIMO()

MAX(X) restituisce il valore piรน alto tra i valori X. MAX restituirร  un valore NULL se tutti i valori di x sono nulli. Mentre MIN(X) restituisce il valore piรน piccolo tra i valori X. MIN restituirร  un valore NULL se tutti i valori di X sono nulli.

Esempio

Nella seguente query, utilizzeremo le funzioni MIN e MAX per ottenere il punteggio piรน alto e il punteggio piรน basso da โ€œMarks" tavolo:

SELECT MAX(Mark), MIN(Mark) FROM Marks;

Questo ti darร :

Aggregato:SQLite MASSIMO() e MINIMO()

SQLite SOMMA(x), Totale(x)

Entrambi restituiranno la somma di tutti i valori x. Ma sono diversi in quanto segue:

  • SUM restituirร  null se tutti i valori sono null, ma Total restituirร  0.
  • TOTAL restituisce sempre valori in virgola mobile. SOMMA restituisce un valore intero se tutti i valori x sono interi. Tuttavia, se i valori non sono interi, verrร  restituito un valore in virgola mobile.

Esempio

Nella query seguente useremo SUM e total per ottenere la somma di tutti i voti nella โ€œMarks"tabelle:

SELECT SUM(Mark), TOTAL(Mark) FROM Marks;

Questo ti darร :

Aggregato:SQLite SOMMA(x), Totale(x)

Come puoi vedere, TOTAL restituisce sempre un punto mobile. Ma SUM restituisce un valore intero perchรฉ i valori nella colonna "Mark" potrebbero essere numeri interi.

Differenza tra SUM e TOTALE esempio:

Nella seguente query mostreremo la differenza tra SUM e TOTAL quando ottengono la SOMMA dei valori NULL:

SELECT SUM(Mark), TOTAL(Mark) FROM Marks WHERE TestId = 4;

Questo ti darร :

Aggregato:Differenza tra SOMMA e TOTALE Esempio

Tieni presente che non ci sono segni per TestId = 4, quindi ci sono valori null per quel test. SUM restituisce un valore nullo come spazio vuoto, mentre TOTAL restituisce 0.

Raggruppa per

La clausola GROUP BY viene utilizzata per specificare una o piรน colonne che verranno utilizzate per raggruppare le righe in gruppi. Le righe con gli stessi valori verranno raccolte (organizzate) insieme in gruppi.

Per qualsiasi altra colonna non inclusa nel raggruppamento di colonne, รจ possibile utilizzare una funzione di aggregazione.

Esempio:

La seguente query ti fornirร  il numero totale di studenti presenti in ciascun dipartimento.

SELECT d.DepartmentName, COUNT(s.StudentId) AS StudentsCount
FROM Students AS s 
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId
GROUP BY d. DepartmentName;

Questo ti darร :

Gruppo BY:HAVING

La clausola GROUPBY DepartmentName raggrupperร  tutti gli studenti in gruppi, uno per ciascun nome di dipartimento. Per ogni gruppo di โ€œdipartimentoโ€, conterร  gli studenti presenti.

Clausola AVENTE

Se desideri filtrare i gruppi restituiti dalla clausola GROUP BY, puoi specificare una clausola "HAVING" con l'espressione dopo la clausola GROUP BY. L'espressione verrร  utilizzata per filtrare questi gruppi.

Esempio

Nella seguente query selezioneremo i dipartimenti che hanno solo due studenti:

SELECT d.DepartmentName, COUNT(s.StudentId) AS StudentsCount
FROM Students AS s 
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId
GROUP BY d. DepartmentName
HAVING COUNT(s.StudentId) = 2;

Questo ti darร :

Raggruppa per

La clausola HAVING COUNT(S.StudentId) = 2 filtrerร  i gruppi restituiti e restituirร  solo quei gruppi che contengono esattamente due studenti. Nel nostro caso, il dipartimento artistico ha 2 studenti, quindi viene visualizzato nell'output.

SQLite Query e sottoquery

All'interno di qualsiasi query, puoi utilizzare un'altra query in SELECT, INSERT, DELETE, UPDATE o all'interno di un'altra sottoquery.

Questa query nidificata รจ chiamata sottoquery. Vedremo ora alcuni esempi di utilizzo delle sottoquery nella clausola SELECT. Tuttavia, nel tutorial sulla modifica dei dati, vedremo come utilizzare le sottoquery con le istruzioni INSERT, DELETE e UPDATE.

Utilizzo della sottoquery nell'esempio della clausola FROM

Nella query seguente includeremo una sottoquery all'interno della clausola FROM:

SELECT
  s.StudentName, t.Mark
FROM Students AS s 
INNER JOIN
(
   SELECT StudentId, Mark
   FROM Tests AS t
   INNER JOIN Marks AS m ON t.TestId = m.TestId
)  ON s.StudentId = t.StudentId;

La domanda:

   SELECT StudentId, Mark
   FROM Tests AS t
   INNER JOIN Marks AS m ON t.TestId = m.TestId

La query precedente รจ chiamata qui sottoquery perchรฉ รจ nidificata all'interno della clausola FROM. Si noti che gli abbiamo assegnato un nome alias "t" in modo da poter fare riferimento alle colonne restituite da esso nella query.

Questa query ti darร :

SQLite Query e sottoquery: utilizzo di sottoquery nella clausola FROM

Quindi nel nostro caso,

  • s.StudentName viene selezionato dalla query principale che fornisce il nome degli studenti e
  • t.Mark รจ selezionato dalla sottoquery; che dร  i voti ottenuti da ciascuno di questi studenti

Utilizzo della sottoquery nell'esempio della clausola WHERE

Nella seguente query includeremo una sottoquery nella clausola WHERE:

SELECT DepartmentName
FROM Departments AS d
WHERE NOT EXISTS (SELECT DepartmentId 
                  FROM Students AS s 
                  WHERE d.DepartmentId = s.DepartmentId);

La domanda:

SELECT DepartmentId 
FROM Students AS s 
WHERE d.DepartmentId = s.DepartmentId

La query precedente รจ chiamata qui sottoquery perchรฉ รจ nidificata nella clausola WHERE. La sottoquery restituirร  i valori DepartmentId che verranno utilizzati dall'operatore NOT EXISTS.

Questa query ti darร :

SQLite Query e sottoquery: utilizzo della sottoquery nella clausola WHERE

Nella query precedente, abbiamo selezionato il dipartimento in cui non sono iscritti studenti. Che รจ il dipartimento di "Matematica" qui.

Impostato Operazioni โ€“ UNIONE,Intersezione

SQLite supporta le seguenti operazioni SET:

UNIONE E UNIONE TUTTI

Combina uno o piรน set di risultati (un gruppo di righe) restituiti da piรน istruzioni SELECT in un unico set di risultati.

UNION restituirร  valori distinti. Tuttavia, UNION ALL non includerร  e includerร  duplicati.

Tieni presente che il nome della colonna sarร  il nome della colonna specificato nella prima istruzione SELECT.

UNIONE Esempio

Nell'esempio seguente, otterremo l'elenco di DepartmentId dalla tabella studenti e l'elenco di DepartmentId dalla tabella dipartimenti nella stessa colonna:

SELECT DepartmentId AS DepartmentIdUnioned FROM Students
UNION
SELECT DepartmentId FROM Departments;

Questo ti darร :

Impostato Operazioni - UNIONE Esempio

La query restituisce solo 5 righe che rappresentano i valori ID del dipartimento distinti. Notare il primo valore che รจ il valore null.

SQLite UNIONE TUTTI Esempio

Nell'esempio seguente, otterremo l'elenco di DepartmentId dalla tabella studenti e l'elenco di DepartmentId dalla tabella dipartimenti nella stessa colonna:

SELECT DepartmentId AS DepartmentIdUnioned FROM Students
UNION ALL
SELECT DepartmentId FROM Departments;

Questo ti darร :

Impostato Operazioni - UNIONE Esempio

La query restituirร  14 righe, 10 righe dalla tabella studenti e 4 dalla tabella dipartimenti. Tieni presente che sono presenti duplicati nei valori restituiti. Inoltre, tieni presente che il nome della colonna era quello specificato nella prima istruzione SELECT.

Ora vediamo come UNION all darร  risultati diversi se sostituiamo UNION ALL con UNION:

SQLite INTERSEZIONE

Restituisce i valori presenti in entrambi i set di risultati combinati. I valori presenti in uno dei set di risultati combinati verranno ignorati.

Esempio

Nella query seguente selezioneremo i valori DepartmentId presenti in entrambe le tabelle Students e Departments nella colonna DepartmentId:

SELECT DepartmentId FROM Students
Intersect
SELECT DepartmentId FROM Departments;

Questo ti darร :

Impostato Operazioni - INTERSEZIONE

La query restituisce solo tre valori 1, 2 e 3. Quali sono i valori presenti in entrambe le tabelle.

Tuttavia, i valori null e 4 non sono stati inclusi perchรฉ il valore null esiste solo nella tabella degli studenti e non nella tabella dei dipartimenti. E il valore 4 esiste nella tabella dei dipartimenti e non nella tabella degli studenti.

Ecco perchรฉ entrambi i valori NULL e 4 sono stati ignorati e non inclusi nei valori restituiti.

SALVO

Supponiamo di avere due elenchi di righe, list1 e list2, e di volere solo le righe di list1 che non esistono in list2, puoi usare la clausola "EXCEPT". La clausola EXCEPT confronta i due elenchi e restituisce quelle righe che esistono in list1 e non esistono in list2.

Esempio

Nella query seguente selezioneremo i valori DepartmentId presenti nella tabella departments e non presenti nella tabella students:

SELECT DepartmentId FROM Departments
EXCEPT
SELECT DepartmentId FROM Students;

Questo ti darร :

Impostato Operazioni - TRANNE

La query restituisce solo il valore 4. Che รจ l'unico valore esistente nella tabella dei dipartimenti e non esiste nella tabella degli studenti.

Gestione NULL

Il "NULL" Il valore รจ un valore speciale in SQLite. Viene utilizzato per rappresentare un valore sconosciuto o mancante. Tieni presente che il valore null รจ totalmente diverso da "0" o un valore "" vuoto. Poichรฉ 0 e il valore vuoto sono valori noti, tuttavia, il valore null รจ sconosciuto.

I valori NULL richiedono una gestione speciale in SQLite, vedremo ora come gestire i valori NULL.

Cerca valori NULL

Non puoi usare il normale operatore di uguaglianza (=) per cercare i valori nulli. Ad esempio, la query seguente cerca gli studenti che hanno un valore DepartmentId nullo:

SELECT * FROM Students WHERE DepartmentId = NULL;

Questa query non darร  alcun risultato:

Gestione NULL

Poichรฉ il valore NULL non รจ uguale a nessun altro valore incluso un valore null stesso, ecco perchรฉ non ha restituito alcun risultato.

  • Tuttavia, per far funzionare la query, รจ necessario utilizzare il file "รˆ ZERO" operatore per cercare valori nulli come segue:
SELECT * FROM Students WHERE DepartmentId IS NULL;

Questo ti darร :

Gestione NULL

La query restituirร  gli studenti che hanno un valore DepartmentId null.

  • Se vuoi ottenere quei valori che non sono nulli, allora devi usare il comando "NON รˆ NULLโ€ operatore in questo modo:
SELECT * FROM Students WHERE DepartmentId IS NOT NULL;

Questo ti darร :

Gestione NULL

La query restituirร  gli studenti che non hanno un valore DepartmentId NULL.

Risultati condizionali

Se disponi di un elenco di valori e desideri selezionarne uno in base ad alcune condizioni. Per questo, la condizione per quel particolare valore dovrebbe essere vera per essere selezionata.

L'espressione CASE valuterร  questo elenco di condizioni per tutti i valori. Se la condizione รจ vera, restituirร  quel valore.

Ad esempio, se hai una colonna "Voto" e vuoi selezionare un valore di testo in base al valore del voto come segue:

โ€“ โ€œEccellenteโ€ se il voto รจ superiore a 85.

โ€“ โ€œMolto buonoโ€ se il voto รจ compreso tra 70 e 85.

โ€“ โ€œBuonoโ€ se il voto รจ compreso tra 60 e 70.

Quindi puoi usare l'espressione CASE per farlo.

Questo puรฒ essere utilizzato per definire una logica nella clausola SELECT in modo da poter selezionare determinati risultati in base a determinate condizioni, come ad esempio l'istruzione if.

L'operatore CASE puรฒ essere definito con diverse sintassi come segue:

  1. Puoi utilizzare diverse condizioni:
CASE 
  WHEN condition1 THEN result1
  WHEN condition2 THEN result2
  WHEN condition3 THEN result3
  โ€ฆ
  ELSE resultn
END
  1. Oppure puoi utilizzare una sola espressione e inserire diversi valori possibili tra cui scegliere:
CASE expression
  WHEN value1 THEN result1
  WHEN value2 THEN result2
  WHEN value3 THEN result3
  โ€ฆ
  ELSE restuln 
END

Tieni presente che la clausola ELSE รจ facoltativa.

Esempio

Nell'esempio seguente, utilizzeremo il CASI espressione con NULL valore nella colonna ID dipartimento nella tabella Studenti per visualizzare il testo 'Nessun dipartimento' come segue:

SELECT 
  StudentName,
  CASE 
    WHEN DepartmentId IS NULL THEN 'No Department'
    ELSE DepartmentId 
  END AS DepartmentId
FROM Students;
  • L'operatore CASE controllerร  il valore di DepartmentId se รจ nullo o meno.
  • Se รจ un valore NULL, selezionerร  il valore letterale "No Department" invece del valore DepartmentId.
  • Se non รจ un valore null, selezionerร  il valore della colonna DepartmentId.

Questo ti darร  l'output come mostrato di seguito:

Risultati condizionali

Espressione di tabella comune

Le espressioni di tabella comuni (CTE) sono sottoquery definite all'interno dell'istruzione SQL con un determinato nome.

Ha un vantaggio rispetto alle sottoquery perchรฉ รจ definita dalle istruzioni SQL e renderร  le query piรน facili da leggere, gestire e comprendere.

Un'espressione di tabella comune puรฒ essere definita inserendo la clausola WITH davanti alle istruzioni SELECT come segue:

WITH CTEname
AS
(
   SELECT statement
)
SELECT, UPDATE, INSERT, or update statement here FROM CTE

Il "Nome CTE" รจ qualsiasi nome tu possa dare al CTE, puoi usarlo per farvi riferimento in seguito. Nota che puoi definire istruzioni SELECT, UPDATE, INSERT o DELETE sui CTE

Vediamo ora un esempio di come utilizzare CTE nella clausola SELECT.

Esempio

Nell'esempio seguente, definiremo un CTE da un'istruzione SELECT e lo utilizzeremo in seguito in un'altra query:

WITH AllDepartments
AS
(
  SELECT DepartmentId, DepartmentName
  FROM Departments
)
SELECT 
  s.StudentId,
  s.StudentName,
  a.DepartmentName
FROM Students AS s
INNER JOIN AllDepartments AS a ON s.DepartmentId = a.DepartmentId;

In questa query, abbiamo definito un CTE e gli abbiamo dato il nome โ€œTutti i dipartimentiโ€œ. Questo CTE รจ stato definito da una query SELECT:

SELECT DepartmentId, DepartmentName
  FROM Departments

Quindi, dopo aver definito il CTE, lo abbiamo utilizzato nella query SELECT che segue.

Tieni presente che le espressioni di tabella comuni non influiscono sull'output della query. รˆ un modo per definire una vista logica o una sottoquery per riutilizzarle nella stessa query. Le espressioni di tabella comuni sono come una variabile che dichiari e la riutilizzi come sottoquery. Solo l'istruzione SELECT influisce sull'output della query.

Questa query ti darร :

Espressione di tabella comune

Query avanzate

Le query avanzate sono quelle query che contengono join complessi, sottoquery e alcuni aggregati. Nella sezione seguente vedremo un esempio di query avanzata:

Dove otteniamo il,

  • Nomi dei dipartimenti con tutti gli studenti per ciascun dipartimento
  • Nomi degli studenti separati da virgola e
  • Mostrare che il dipartimento ha almeno tre studenti al suo interno
SELECT 
  d.DepartmentName,
  COUNT(s.StudentId) StudentsCount,
  GROUP_CONCAT(StudentName) AS Students
FROM Departments AS d 
INNER JOIN Students AS s ON s.DepartmentId = d.DepartmentId
GROUP BY d.DepartmentName
HAVING COUNT(s.StudentId) >= 3;

Abbiamo aggiunto a ISCRIVITI clausola per ottenere DepartmentName dalla tabella Departments. Successivamente abbiamo aggiunto una clausola GROUP BY con due funzioni aggregate:

  • โ€œCOUNTโ€ per contare gli studenti per ogni gruppo di dipartimento.
  • GROUP_CONCAT per concatenare gli studenti per ciascun gruppo con virgole separate in un'unica stringa.
  • Dopo il GRUPPO BY, abbiamo utilizzato la clausola HAVING per filtrare i dipartimenti e selezionare solo quelli che hanno almeno 3 studenti.

Il risultato sarร  il seguente:

Query avanzate

Sintesi

Questa รจ stata un'introduzione alla scrittura SQLite query e nozioni di base sull'esecuzione di query sul database e su come filtrare i dati restituiti. Ora puoi scrivere il tuo SQLite interrogazioni.

Riassumi questo post con: