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

โšก Riepilogo intelligente

SQLite Le query recuperano e filtrano i dati utilizzando le clausole SELECT, FROM, WHERE, GROUP BY, ORDER BY e LIMIT. La combinazione di queste clausole con operatori, aggregazioni, subquery e operazioni sugli insiemi consente di leggere, modellare e riepilogare i record da qualsiasi SQLite Banca dati.

  • ๐Ÿ” SELEZIONA E DA: La clausola SELECT seleziona colonne, valori letterali o alias; la clausola FROM specifica le tabelle o le subquery che forniscono i dati.
  • ๐Ÿงฎ DOVE e Operatori: La clausola WHERE filtra le righe utilizzando gli operatori di concatenazione, CAST, aritmetici, di confronto, LIKE, GLOB, BETWEEN, IN ed EXISTS.
  • ๐Ÿ“Š Aggregati e gruppiping: AVGLe funzioni COUNT, GROUP_CONCAT, MAX, MIN, SUM e TOTAL si combinano con GROUP BY e HAVING per riepilogare le righe raggruppate.
  • ๐Ÿ”— Sottoquery e insiemi: Le subquery, le espressioni di tabella comuni e le clausole UNION, INTERSECT ed EXCEPT combinano i risultati di diverse istruzioni SELECT.
  • ๐Ÿงฉ Ordinamento e valori NULL: Le istruzioni ORDER BY, LIMIT, OFFSET, DISTINCT, CASE e IS NULL controllano l'ordine delle righe, la dimensione dell'output e i valori mancanti.
  • ๐Ÿค– Assistenza AI: Gli assistenti AI text-to-SQL e GitHub Copilot generano SQLite Eseguire query SELECT, JOIN e GROUP BY a partire da prompt in linguaggio naturale.

SQLite domanda

Le sezioni seguenti illustrano la lettura dei dati con SELECT e FROM, il filtraggio delle righe con WHERE e i relativi operatori, l'ordinamento e la limitazione dei risultati, le funzioni di aggregazione, GROUP BY e HAVING, le subquery, le operazioni sugli insiemi, la gestione dei valori NULL, le espressioni CASE e le espressioni di tabella comuni.

Scrivere query SQL Organizza una 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,

Apri Risorse del computer e vai alla seguente directory "C:\sqlite", quindi apri "sqlite3.exe":

Lettura dei dati con Select in SQLite

Passo 2) Aprire il database โ€œTutorialsSampleDB.dbโ€ con il seguente comando:

Lettura dei dati con Select in SQLite

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 Select in SQLite

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 Select in SQLite

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 Select in SQLite

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:

SQLite Nomi e alias

Si noti che il nome della colonna rimane "StudentName"; la colonna StudentName รจ sempre la stessa e non cambia a causa dell'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:

SQLite 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:

SQLite 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":

SQLite 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 usare il nome completo della tabella, abbiamo usato i loro alias per farvi riferimento. INNER JOIN unisce due o piรน tabelle utilizzando una condizione. Nel nostro esempio, abbiamo unito la tabella Studenti con la tabella Dipartimenti tramite la colonna DepartmentId. C'รจ anche una spiegazione approfondita per INNER JOIN nel "SQLite Entra a far partetutorial.

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

SQLite 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 dalla 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 verrร  concatenato in un nuovo alias "StudentIdWithName":

  • Il valore letterale della stringa "ID con nome: "
  • con il valore della colonna โ€œStudentIdโ€ e
  • con il valore della colonna โ€œStudentNameโ€

SQLite Clausola WHERE e operatori

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 si dispone di un valore numerico memorizzato come stringa, ad esempio "12.5", e si desidera convertirlo in un valore numerico, รจ possibile utilizzare l'operatore CAST in questo modo: "CAST('12.5' โ€‹โ€‹AS REAL)". Oppure, se si dispone di un valore decimale come 12.5 e si desidera ottenere solo la parte intera, รจ possibile effettuare un cast a intero in questo modo: "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 Clausola WHERE e operatori

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:

  • L'addizione โ€œ+โ€ restituisce la somma dei due operandi.
  • Subtraczione โ€œโ€“โ€ โ€“ subtraccalcola i due operandi e il risultato รจ la differenza.
  • Moltiplicazione โ€œ*โ€ โ€“ il prodotto dei due operandi.
  • Resto (modulo) โ€œ%โ€ โ€“ indica il resto della 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 nella stessa clausola select:

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

Questo ti darร :

SQLite Clausola WHERE e operatori

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 sinistro รจ minore dellโ€™operando destro.
  • โ€œ<=โ€ โ€“ restituisce vero se lโ€™operando sinistro รจ minore o uguale allโ€™operando destro.
  • โ€œ>โ€ โ€“ restituisce true se lโ€™operando sinistro รจ maggiore dellโ€™operando destro.
  • โ€œ>=โ€ โ€“ restituisce true se lโ€™operando sinistro รจ maggiore o uguale allโ€™operando destro.
  • โ€œ=โ€ e โ€œ==โ€ โ€“ restituiscono true se i due operandi sono uguali. Si noti che entrambi gli operatori sono identici e non c'รจ alcuna differenza tra di loro.
  • โ€œ!=โ€ e โ€œ<>โ€ โ€“ restituiscono true se i due operandi non sono uguali. Si noti che entrambi gli operatori sono equivalenti e non presentano alcuna differenza.

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 Clausola WHERE e operatori

SQLite Operatori di corrispondenza di pattern

โ€œLIKEโ€ viene utilizzato per la corrispondenza di modelli. Utilizzando โ€œLIKEโ€, รจ possibile cercare valori che corrispondono a un modello specificato tramite 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 un pattern. Ad esempio, StudentName LIKE '%a%' โ€“ questo cercherร  i nomi degli studenti che contengono la lettera "a" in qualsiasi posizione nella colonna StudentName.
  • Si parte dallo schema. Ad esempio, "NomeStudente COME 'a%'" โ€“ cerca i nomi degli studenti che iniziano con la lettera "a".
  • Termina con il modello. Ad esempio, "NomeStudente COME '%a'" - Cerca i nomi degli studenti che terminano con la lettera "a".
  • Corrispondenza di un singolo carattere in una stringa utilizzando il carattere di sottolineatura "_". Ad esempio, "NomeStudente COME 'J___'" - Cerca i nomi degli studenti che hanno una lunghezza di 4 caratteri. Devono iniziare con la lettera "J" e possono avere altri tre caratteri qualsiasi dopo la "J".

Esempi di corrispondenza dei modelli:

Ottieni nomi di studenti che iniziano con la lettera "j":

SELECT StudentName FROM Students WHERE StudentName LIKE 'j%';

Risultato:

SQLite Clausola WHERE e operatori

Ottieni che i nomi degli studenti finiscano con la lettera "y":

SELECT StudentName FROM Students WHERE StudentName LIKE '%y';

Risultato:

SQLite Clausola WHERE e operatori

Ottieni i nomi degli studenti che contengono la lettera "n":

SELECT StudentName FROM Students WHERE StudentName LIKE '%n%';

Risultato:

SQLite Clausola WHERE e operatori

โ€œGLOBโ€ รจ equivalente allโ€™operatore LIKE, ma GLOB fa distinzione tra maiuscole e 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 Clausola WHERE e operatori

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%');

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

SQLite Clausola WHERE e operatori

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 Clausola WHERE e operatori

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

L'operatore BETWEEN viene utilizzato per selezionare i valori compresi tra due valori. Ad esempio, "X BETWEEN Y AND Z" restituirร  vero (1) se il valore X รจ compreso tra i due valori Y e Z. Altrimenti, restituirร  falso (0). "X BETWEEN Y AND Z" รจ equivalente a "X >= Y AND X <= Z", dove 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 Clausola WHERE e operatori

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).

In questo modo: โ€œcol IN(x, y, z)โ€. Questo 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 Clausola WHERE e operatori

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 all'utilizzo di piรน operatori OR. La clausola "WHERE StudentId IN(2, 4, 6, 8)" รจ equivalente a "WHERE (StudentId = 2) OR (StudentId = 4) OR (StudentId = 6) OR (StudentId = 8);"

Mi Piace

SQLite Clausola WHERE e operatori

SQLite NON IN

L'operatore โ€œNOT INโ€ รจ l'opposto dell'operatore IN. Ha la stessa sintassi: accetta un operando e un elenco di operandi. Restituisce true se il valore del primo operando non รจ uguale a uno degli operandi presenti nell'elenco. In altre parole, restituisce true (0) se l'elenco di operandi non contiene il primo operando. Ad esempio: โ€œcol NOT IN(x, y, z)โ€. Questo รจ equivalente 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 Clausola WHERE e operatori

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 Clausola WHERE e operatori

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 Clausola WHERE e operatori

Verranno restituiti solo i tre dipartimenti "IT, Fisica e Arte". Il dipartimento "Matematica" non verrร  restituito perchรฉ non ci sono studenti iscritti a quel dipartimento, quindi l'ID del dipartimento non esiste nella tabella degli studenti. Ecco perchรฉ l'operatore EXISTS ha ignorato il dipartimento "Matematica".

SQLite NON

Reverses รจ il risultato dell'operatore precedente che lo segue. 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);

Produzione:

SQLite Clausola WHERE e operatori

Verrร  restituito solo il dipartimento "Matematica". Questo perchรฉ il dipartimento "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ร :

SQLite 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. Ad esempio, "LIMIT 4 OFFSET 4" ignorerร  le prime 4 righe e restituirร  4 righe a partire dalla quinta, quindi si otterranno le righe 5, 6, 7 e 8.

Tieni presente che la clausola OFFSET รจ facoltativa; puoi scriverla come "LIMIT 4, 4" e otterrai comunque 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:

SQLite Limitare e ordinare

Rimozione dei duplicati

Se la query SQL restituisce valori duplicati, รจ possibile utilizzare la parola chiave "DISTINCT" per rimuovere i duplicati e restituire solo valori distinti. รˆ possibile specificare piรน di una colonna dopo l'operatore 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 dei duplicati in SQLite

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 dei duplicati in SQLite

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โ€:

SQLite Funzioni aggregate

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ร :

SQLite Funzioni aggregate

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ร :

SQLite Funzioni aggregate

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ร :

SQLite Funzioni aggregate

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ร :

SQLite Funzioni aggregate

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 voto piรน alto e il voto piรน basso dalla tabella "Voti":

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

Questo ti darร :

SQLite Funzioni aggregate

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 seguente query utilizzeremo SUM e TOTAL per ottenere la somma di tutti i voti presenti nella tabella "Voti":

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

Questo ti darร :

SQLite Funzioni aggregate

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ร :

SQLite Funzioni aggregate

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ร :

SQLite Raggruppa per e AVENDO

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ร :

SQLite Raggruppa per e AVENDO

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 subquery

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 subquery

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ร :

SQLite Impostato Operazioni

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ร :

SQLite Impostato Operazioni

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ร :

SQLite Impostato Operazioni

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ร :

SQLite Impostato Operazioni

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 valore โ€œNULLโ€ รจ un valore speciale in SQLiteViene utilizzato per rappresentare un valore sconosciuto o mancante. Si noti che il valore nullo รจ completamente diverso da "0" o da un valore vuoto. Mentre 0 e il valore vuoto sono valori noti, il valore nullo รจ 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:

SQLite 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, affinchรฉ la query funzioni, รจ necessario utilizzare l'operatore "IS NULL" per cercare i valori nulli come segue:

SELECT * FROM Students WHERE DepartmentId IS NULL;

Questo ti darร :

SQLite Gestione NULL

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

Se si desidera ottenere i valori non nulli, รจ necessario utilizzare l'operatore "IS NOT NULL" in questo modo:

SELECT * FROM Students WHERE DepartmentId IS NOT NULL;

Questo ti darร :

SQLite 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:

Puoi utilizzare diverse condizioni:

CASE
  WHEN condition1 THEN result1
  WHEN condition2 THEN result2
  WHEN condition3 THEN result3
  โ€ฆ
  ELSE resultn
END

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 l'espressione CASE con valore NULL nella colonna ID dipartimento della 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:

SQLite risultati condizionali CASO

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 campo "CTEname" รจ un nome qualsiasi che puoi assegnare alla CTE e che potrai utilizzare in seguito per farvi riferimento. Tieni presente che puoi definire istruzioni SELECT, UPDATE, INSERT o DELETE sulle 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 una CTE e le abbiamo assegnato il nome "AllDepartments". Questa CTE รจ stata definita 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ร :

SQLite 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 una clausola JOIN per ottenere il nome del dipartimento dalla tabella Departments. Dopodichรฉ abbiamo aggiunto una clausola GROUP BY con due funzioni di aggregazione:

  • โ€œ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:

SQLite Query avanzate

DOMANDE FREQUENTI

WHERE filtra le singole righe prima di qualsiasi gruppoping e non puรฒ utilizzare funzioni di aggregazione. HAVING filtra interi gruppi dopo GROUP BY e puรฒ testare funzioni di aggregazione come COUNT o SUM. In una query, WHERE viene scritto prima di GROUP BY e HAVING dopo.

Le parole chiave SQL come SELECT e WHERE non fanno distinzione tra maiuscole e minuscole. L'operatore LIKE non fa distinzione tra maiuscole e minuscole per i caratteri ASCII, mentre GLOB sรฌ. Il testo memorizzato nelle colonne mantiene la sua maiuscola/minuscola originale, quindi i confronti di valori con l'operatore equals rispettano i caratteri esatti.

Aggiungi ORDER BY RANDOM() e LIMIT 1 a una query SELECT, ad esempio SELECT * FROM Students ORDER BY RANDOM() LIMIT 1. RANDOM() mescola le righe e LIMIT restituisce un solo elemento. Aumenta il valore di LIMIT per recuperare piรน righe casuali.

L'operazione JOIN combina le colonne di due tabelle affiancandole in base a una condizione di corrispondenza, espandendo ciascuna riga. L'operazione UNION, invece, sovrappone le righe dei risultati di due query SELECT in un unico elenco, pertanto entrambe le query devono restituire lo stesso numero di colonne.

No. Senza una clausola ORDER BY SQLite L'operatore LIMIT puรฒ restituire righe in qualsiasi ordine, quindi LIMIT potrebbe selezionare righe diverse a ogni esecuzione. Abbina sempre LIMIT a ORDER BY quando hai bisogno di risultati prevedibili, ad esempio ORDER BY StudentId LIMIT 10.

Crea un indice sulle colonne utilizzate nelle clausole WHERE, JOIN e ORDER BY in modo SQLite รˆ possibile individuare le righe senza dover scansionare l'intera tabella. Selezionare solo le colonne necessarie ed eseguire ANALYZE per aggiornare le statistiche migliora anche la velocitร  delle query.

Sรฌ. Gli assistenti AI text-to-SQL trasformano le richieste in linguaggio naturale in SQLite Istruzioni SELECT, WHERE, JOIN e GROUP BY. Fornire i nomi di tabelle e colonne migliora la precisione, e ogni query generata dovrebbe essere rivista e testata prima di essere eseguita su dati reali.

Sรฌ. Le serrature scorrevoli portatili e i catenacci a superficie possono essere usati per mettere in sicurezza una porta a scomparsa dall'esterno. Alcuni kit con catena di sicurezza consentono anche il bloccaggio esterno con chiave o manopola girevole. Copilota GitHub suggerisce SQLite query in linea in editor come VS CodeCompleta le clausole SELECT, JOIN, aggregate e GROUP BY. Legge lo schema e i commenti nelle vicinanze, quindi i suoi suggerimenti riutilizzano i nomi reali di tabelle e colonne.

Riassumi questo post con: