Torna all'elenco degli articoli Articoli
Tempo di lettura: 22 minuti

20 esempi di query SQL di base per principianti: Una panoramica completa

Queste 20 query di base non possono mancare in uno starter pack per ogni principiante di SQL. Questi esempi vi permetteranno di iniziare il vostro viaggio verso la padronanza di SQL.

Avete deciso di imparare l'SQL, avete cercato su Google "esempi di query sql di base" o qualcosa di simile, ed eccovi davanti a questo articolo. E adesso? Tutto l'apprendimento inizia con le basi, quindi iniziamo con la domanda più elementare:

Che cos'è l'SQL?

La prima cosa da fare è sapere cos'è l'SQL. SQL, o Structured Query Language, è un linguaggio di programmazione. Come ogni linguaggio - di programmazione o naturale - viene utilizzato per comunicare, per parlare. L'SQL è stato progettato per parlare con un database. Lo facciamo usando frasi che chiamiamo query, ovvero comandi SQL per recuperare i dati dal database.

Tra poco vi mostreremo 20 esempi di query SQL di base per iniziare a parlare con il database. Tutte queste query vengono insegnate nel nostro SQL per principianti questo corso vi darà ancora più struttura, esempi e sfide da risolvere. Contiene 129 esercizi interattivi sull'interrogazione di una o più tabelle, l'aggregazione e il raggruppamento di dati, le JOIN, le subquery e le operazioni di set. Anche con i 20 esempi in arrivo, non riusciremo a mostrare tutti i dettagli e nemmeno tutte le query di livello base. Per questo motivo, consigliamo di utilizzare il corso come piattaforma per esercitarsi sulle nozioni fondamentali che tratteremo qui.

Inoltre, la maggior parte degli esempi è ben presentata nel nostro SQL per principianti Cheat Sheet. Tenetelo pure a portata di mano: potrebbe aiutarvi a capire meglio ciò che segue.

Non perdiamo tempo! Introduciamo il set di dati e poi iniziamo a scrivere e spiegare le query SQL di base.

Set di dati

Il dataset è composto da due tabelle. La prima è mostrata qui sotto; è possibile creare questa tabella copiando ed eseguendo questa query da GitHub.

idfirst_namelast_namedepartmentsalary
1PaulGarrixCorporate3,547.25
2AstridFoxPrivate Individuals2,845.56
3MatthiasJohnsonPrivate Individuals3,009.41
4LucyPattersonPrivate Individuals3,547.25
5TomPageCorporate5,974.41
6ClaudiaConteCorporate4,714.12
7WalterDeerPrivate Individuals3,547.25
8StephanieMarxCorporate2,894.51
9LucaPavarottiPrivate Individuals4,123.45
10VictoriaPollockCorporate4,789.53

Come ogni tabella, ha un nome: employees. Ogni tabella ha delle colonne che hanno anch'esse un nome. Essi descrivono i dati contenuti in ciascuna colonna.

Le colonne e i dati della tabella precedente sono:

  • id - L'ID univoco del dipendente e la chiave primaria della tabella.
  • first_name - Il nome del dipendente.
  • last_name - Il cognome del dipendente.
  • department - Il reparto del dipendente.
  • salary - Lo stipendio mensile del dipendente, in dollari.

Tutto ciò ci dice che questa tabella è un elenco dei dipendenti di un'azienda e dei loro stipendi. Sono presenti anche i dati relativi ai reparti dei dipendenti. Tutti i dipendenti lavorano nella divisione vendite, dove il reparto può essere aziendale o privato Individuals. In altre parole, i dipendenti vendono i prodotti dell'azienda ad aziende e privati.

L'altra tabella del dataset è denominata quarterly_sales. È mostrata qui sotto e la query per crearla è qui.

employee_idq1_2022q2_2022q3_2022q4_2022
83,471.4114,789.253,478.341,254.23
45,417.8112,846.238,741.543,589.99
101,547.521,269.661,478.652,474.33
18,715.558,465.6524,747.823,514.36
312,774.5124,784.3112,223.348,451.51
24,989.235,103.224,897.985,322.05
718,415.6615,279.3714,634.4414,445.12
62,498.638,741.453,997.652,497.21
56,349.747,555.556,944.357,788.01
94,485.364,101.508,787.457,648.90

Le colonne sono:

  • employee_id - L'ID univoco del dipendente. Inoltre, una chiave esterna che fa riferimento alla colonna id della tabella employees.
  • q1_2022 - Le vendite realizzate dal dipendente nel primo trimestre del 2022.
  • q2_2022 - Le vendite realizzate dal dipendente nel secondo trimestre del 2022.
  • q3_2022 - Le vendite realizzate da quel dipendente nel terzo trimestre del 2022.
  • q4_2022 - Le vendite realizzate da quel dipendente nel quarto trimestre del 2022.

In generale, questa tabella è un elenco delle vendite di ogni trimestre realizzate da ogni dipendente indicato nella prima tabella.

Ora iniziamo a scrivere le query SQL.

1. Selezione di tutte le colonne di una tabella

Questa query è utile quando si desidera ottenere rapidamente tutte le colonne di una tabella senza scrivere ogni colonna nell'istruzione SELECT.

Query

SELECT *
FROM employees;

Spiegazione

Ogni volta che si desidera selezionare un numero qualsiasi di colonne da una tabella, è necessario utilizzare l'istruzione SELECT. Per scriverla, ovviamente, si usa la parola chiave SELECT.

Dopo la parola chiave viene inserito un asterisco (*), che sta per "tutte le colonne della tabella".

Per specificare la tabella, utilizzare la clausola FROM e scrivere il nome della tabella dopo.

L'output

L'output della query è l'intera tabella employeescome mostrato di seguito.

idfirst_namelast_namedepartmentsalary
1PaulGarrixCorporate3,547.25
2AstridFoxPrivate Individuals2,845.56
3MatthiasJohnsonPrivate Individuals3,009.41
4LucyPattersonPrivate Individuals3,547.25
5TomPageCorporate5,974.41
6ClaudiaConteCorporate4,714.12
7WalterDeerPrivate Individuals3,547.25
8StephanieMarxCorporate2,894.51
9LucaPavarottiPrivate Individuals4,123.45
10VictoriaPollockCorporate4,789.53

2. Selezione di una colonna da una tabella

È possibile utilizzare questa query quando si ha bisogno di una sola colonna della tabella.

Query

SELECT first_name
FROM employees;

Spiegazione

L'approccio è simile alla query precedente. Tuttavia, questa volta, al posto dell'asterisco, si scrive il nome della colonna specifica in SELECT. In questo caso, si tratta della colonna first_name.

La seconda riga della query è la stessa: fa riferimento alla tabella nella clausola FROM.

L'output

La query restituisce l'elenco dei nomi dei dipendenti.

first_name
Paul
Astrid
Matthias
Lucy
Tom
Claudia
Walter
Stephanie
Luca
Victoria

3. Selezione di due colonne da una tabella

Questa query è utile per selezionare due (o più) colonne da una tabella.

Query

SELECT first_name,
	 last_name
FROM employees;

Spiegazione

Anche in questo caso, l'approccio è simile agli esempi precedenti. Per selezionare due colonne, è necessario scrivere i loro nomi in SELECT. L'importante è che le colonne siano separate da una virgola. Nell'esempio si può notare che c'è una virgola tra le colonne first_name e last_name.

Quindi, come di consueto, fare riferimento alla tabella employees in FROM.

Uscita

Ora la query mostra i nomi completi dei dipendenti.

first_namelast_name
PaulGarrix
AstridFox
MatthiasJohnson
LucyPatterson
TomPage
ClaudiaConte
WalterDeer
StephanieMarx
LucaPavarotti
VictoriaPollock

4. Selezione di due (o più) colonne da una tabella e filtraggio tramite confronto numerico in WHERE

La conoscenza di questa query SQL consente di filtrare i dati in base ai valori numerici. È possibile farlo utilizzando gli operatori di confronto nella clausola WHERE.

Ecco una panoramica degli operatori di confronto SQL.

Comparison OperatorDescription
=Is equal to
>Is greater than
<Is less than
>=Is greater than or equal to
<=Is less than or equal to
<>Is not equal to

Query

SELECT 
  first_name, 
  last_name,
  salary
FROM employees
WHERE salary > 3800;

Spiegazione

La query in realtà seleziona tre colonne, non due. È come con due colonne: basta scriverle in SELECT e separarle con le virgole.

Poi si fa riferimento alla tabella in FROM.

Ora dobbiamo mostrare solo i dipendenti con uno stipendio superiore a 3.800 euro. Per farlo, è necessario utilizzare WHERE. Si tratta di una clausola che accetta condizioni e viene utilizzata per filtrare l'output. Esamina la tabella e restituisce solo i dati che soddisfano la condizione.

Nel nostro caso, stiamo cercando i salari "maggiori di" un certo numero. In altre parole, una condizione che utilizza l'operatore di confronto >.

Per impostare la condizione, scriviamo il nome della colonna in WHERE. Poi viene l'operatore di confronto e, successivamente, il valore che i dati devono essere maggiori di. Questa condizione restituirà tutti gli stipendi superiori a 3.800.

Risultato

La query restituisce quattro dipendenti e i loro stipendi. Come si può vedere, tutti hanno uno stipendio superiore a 3.800 euro.

first_namelast_namesalary
TomPage5,974.41
ClaudiaConte4,714.12
LucaPavarotti4,123.45
VictoriaPollock4,789.53

5. Selezione di due colonne e filtraggio mediante una condizione di uguaglianza in WHERE

Ancora una volta, questo esempio di query SQL di base è utile quando si desidera selezionare diverse colonne ma non tutte le righe della tabella. Ora si vogliono trovare i valori che sono uguali al valore della condizione. Per questo, è necessaria la condizione di uguaglianza (=).

Query

SELECT 
  first_name,
  last_name
FROM employees
WHERE first_name = 'Luca';

Spiegazione

La query seleziona il nome e il cognome dei dipendenti.

Tuttavia, vogliamo mostrare solo i dipendenti il cui nome è Luca. Per questo, si utilizza nuovamente WHERE. L'approccio è simile a quello dell'esempio precedente: si usa WHERE, si scrive il nome della colonna e si usa l'operatore di confronto. Questa volta, la nostra condizione utilizza il segno di uguale (=).

In altre parole, i valori della colonna first_name devono essere uguali a Luca. Inoltre, quando la condizione non è un numero ma un testo o una data/ora, deve essere scritta tra apici singoli (''). Ecco perché la nostra condizione è scritta come 'Luca' e non semplicemente Luca.

L'output

L'output mostra che esiste un solo dipendente di nome Luca, il cui nome completo è Luca Pavarotti.

first_namelast_name
LucaPavarotti

6. Selezione di due colonne e ordinamento in base a una colonna

Ecco un altro esempio di query SQL di base che vi sarà utile. Può essere utilizzato ogni volta che si deve ordinare l'output in un certo modo per renderlo più leggibile.

L'ordinamento viene effettuato utilizzando la clausola ORDER BY. Per impostazione predefinita, ordina l'output in ordine crescente, in ordine alfabetico (per i dati di testo), dal numero più basso al più alto (per i dati numerici) o dalla data o ora più vecchia a quella più recente (per le date e gli orari).

Query

SELECT 
  first_name,
  last_name
FROM employees
ORDER BY last_name;

Spiegazione

Selezioniamo nuovamente il nome e il cognome dei dipendenti. Ma ora vogliamo ordinare il risultato in un modo specifico. In questo esempio, per cognome dei dipendenti. Per farlo, utilizziamo ORDER BY. In esso si scrive semplicemente il nome della colonna.

Si può aggiungere la parola chiave ASC per ordinare l'output in modo ascendente. Tuttavia, non è obbligatorio, poiché l'ordinamento ascendente è predefinito in SQL.

L'output

La query restituisce un elenco di dipendenti ordinati alfabeticamente per cognome.

first_namelast_name
ClaudiaConte
WalterDeer
AstridFox
PaulGarrix
MatthiasJohnson
StephanieMarx
TomPage
LucyPatterson
LucaPavarotti
VictoriaPollock

7. Selezione di due colonne e ordinamento discendente per una colonna

Questo esempio è simile al precedente e ha lo stesso scopo: ordinare l'output della query SQL. In questo caso, però, i dati sono ordinati in modo decrescente (da Z ad A, da 10 a 1).

Query

SELECT 
  first_name,
  last_name
FROM employees
ORDER BY last_name DESC;

Spiegazione

La query è quasi esattamente la stessa dell'esempio precedente. L'unica differenza è che ordiniamo l'output in base al nome del dipendente in modo decrescente.

Per farlo, inserire la parola chiave DESC dopo la colonna last_name nella clausola ORDER BY.

L'output

first_namelast_name
VictoriaPollock
LucaPavarotti
LucyPatterson
TomPage
StephanieMarx
MatthiasJohnson
PaulGarrix
AstridFox
WalterDeer
ClaudiaConte

Si può notare che l'output è ordinato nel modo desiderato.

8. Selezione di due colonne da una tabella e ordinamento discendente per due colonne

L'ordinamento di una query SQL può essere più sofisticato. È comune ordinare i dati in base a due o più colonne, cosa che probabilmente conoscete già come utenti di Excel o Google Sheets. Lo stesso può essere fatto in SQL.

Query

SELECT 
  first_name,
  last_name,
  salary
FROM employees
ORDER BY salary DESC, last_name ASC;

Spiegazione

Con questa query ci basiamo sull'esempio precedente: vogliamo ordinare i dati in base allo stipendio e al cognome dei dipendenti. Questa volta, l'ordinamento avviene per stipendio in senso decrescente e poi per cognome in senso ascendente.

Facciamo riferimento alla colonna stipendio in ORDER BY e la facciamo seguire dalla parola chiave DESC. La parola chiave DESC indica l'ordine discendente. Prima del secondo criterio di ordinamento, dobbiamo inserire una virgola. Dopo di essa viene il secondo criterio/colonna, che in questo caso è last_name. È possibile aggiungere o omettere la parola chiave ASC per ordinare il risultato in ordine crescente.

Nota: l'ordine delle colonne in ORDER BY è importante! La query scritta come sopra ordinerà prima per stipendio in modo decrescente e poi per cognome in modo crescente. Se si scrive ORDER BY last_name ASC, salary DESC, l'ordinamento avverrà prima per cognome e poi per stipendio in ordine decrescente.

Risultato

first_namelast_namesalary
TomPage5,974.41
VictoriaPollock4,789.53
ClaudiaConte4,714.12
LucaPavarotti4,123.45
WalterDeer3,547.25
PaulGarrix3,547.25
LucyPatterson3,547.25
MatthiasJohnson3,009.41
StephanieMarx2,894.51
AstridFox2,845.56

L'output è ordinato per stipendio. Quando lo stipendio è lo stesso (righe verdi), i dati sono ordinati alfabeticamente per cognome.

9. Selezione di due colonne con una condizione logica complessa in WHERE

Questo esempio dimostra ancora una volta come filtrare l'output utilizzando WHERE. Questa volta sarà un po' più avanzato, poiché utilizzeremo un operatore logico. In SQL, gli operatori logici consentono di verificare se la condizione di filtraggio è vera o meno. Consentono inoltre di impostare condizioni multiple.

I tre operatori logici di base in SQL sono AND, OR e NOT. Nella query seguente, utilizzeremo OR per ottenere stipendi inferiori a 3.000 o superiori a 5.000.

Query

SELECT 
  first_name,
  last_name,
  salary
FROM employees
WHERE salary > 5000 OR salary < 3000;

Spiegazione

Utilizziamo questa query per selezionare il nome, il cognome e lo stipendio del dipendente dalla tabella employees.

Tuttavia, vogliamo mostrare solo i dipendenti il cui stipendio è superiore a 5.000 dollari o inferiore a 3.000 dollari. Per farlo, utilizziamo l'operatore logico OR e gli operatori di confronto in WHERE.

Scriviamo la prima condizione in WHERE, dove facciamo riferimento alla colonna salary e impostiamo la condizione che i valori devono essere superiori a 5.000 dollari. Quindi utilizziamo l'operatore OR, seguito dalla seconda condizione. La seconda condizione fa di nuovo riferimento alla colonna stipendio e utilizza l'operatore "meno di" per restituire i valori inferiori a 3.000.

Risultato

first_namelast_namesalary
AstridFox2,845.56
TomPage5,974.41
StephanieMarx2,894.51

La query restituisce solo tre dipendenti e i loro stipendi, in quanto sono gli unici a soddisfare le condizioni.

10. Semplici calcoli sulle colonne

In questo esempio mostreremo come è possibile eseguire semplici operazioni matematiche sulle colonne della tabella.

Utilizzeremo uno degli operatori aritmetici di SQL.

Arithmetic OperatorDescription
+Addition
-Subtraction
*Multiplication
/Division
%Modulo, i.e. returns the remainder of the integer division.

Query

SELECT 
  employee_id,
  q1_2022 + q2_2022 AS h1_2022
FROM quarterly_sales;

Spiegazione

Nella query precedente, vogliamo trovare le vendite del primo semestre del 2022 per ogni dipendente.

Per farlo, selezioniamo innanzitutto la colonna employee_id dalla tabella quarterly_sales.

Quindi selezioniamo la colonna q1_2022 e utilizziamo l'operatore aritmetico di addizione per aggiungere la colonna q2_2022. A questa nuova colonna calcolata viene assegnato l'alias h1_2022 utilizzando la parola chiave AS.

L'output

employee_idh1_2022
818,260.66
418,264.04
102,817.18
117,181.20
337,558.82
210,092.45
733,695.03
611,240.08
513,905.29
98,586.86

L'output mostra tutti gli ID dei dipendenti e le rispettive vendite nella prima metà del 2022.

11. Utilizzo di SUM() e GROUP BY

Questa query utilizza la funzione aggregata SUM() con GROUP BY. In SQL, le funzioni aggregate lavorano su gruppi di dati; ad esempio, SUM(sales) mostra il totale di tutti i valori della colonna sales. È utile conoscere questa funzione quando si desidera raggruppare i dati e mostrare il totale di ciascun gruppo.

Query

SELECT 
  department,
  SUM(salary) AS total_salaries
FROM employees
GROUP BY department;

Spiegazione

Lo scopo della query precedente è quello di trovare il totale degli stipendi per ogni reparto. Il risultato si ottiene nel modo seguente.

Innanzitutto, selezionare la colonna reparto dalla tabella employees. Quindi, si utilizza la funzione SUM(). Poiché vogliamo sommare i valori degli stipendi, specifichiamo la colonna stipendio nella funzione. Inoltre, si assegna a questa colonna calcolata l'alias total_salaries.

Infine, l'output viene raggruppato in base alla colonna reparto.

Nota: qualsiasi colonna non aggregata che compare in SELECT deve comparire anche in GROUP BY. Ma questo è logico: l'intero scopo è quello di raggruppare i dati per reparto, quindi ovviamente la metteremo in GROUP BY.

L'output

departmenttotal_salaries
Corporate21,919.82
Private Individuals17,072.92

L'output mostra tutti i reparti e la somma dei costi salariali totali mensili per reparto.

12. Utilizzo di COUNT() e GROUP BY

Ecco un'altra query SQL di base che utilizza una funzione aggregata. Questa volta si tratta di COUNT(). È possibile utilizzarla se si desidera raggruppare i dati e mostrare il numero di occorrenze in ciascun gruppo.

Query

SELECT 
  department,
  COUNT(*) AS employees_by_department
FROM employees
GROUP BY department; 

Spiegazione

Vogliamo mostrare il numero di dipendenti per reparto.

Selezionare il reparto dalla tabella employees. Quindi, utilizzare la funzione aggregata COUNT(). In questo caso, utilizziamo la versione COUNT(*), che conta tutte le righe. Alla colonna viene assegnato l'alias employees_by_department.

Come ultimo passo, raggruppiamo l'output in base al reparto.

Nota: COUNT(*) conta tutte le righe, comprese quelle con i valori NULL valori. Se non si desidera includere i possibili valori NULL nell'output, utilizzare la versione COUNT(column_name) della funzione. Possiamo usare COUNT(*) in questo caso perché sappiamo che non ci sono valori NULL nella tabella.

Uscita

departmentemployees_by_department
Corporate5
Private Individuals5

Ci sono due dipartimenti, ciascuno con cinque dipendenti.

13. Uso di AVG() e GROUP BY

La funzione AVG() calcola il valore medio. È possibile utilizzare questa query ogni volta che si desidera raggruppare i dati e mostrare il valore medio per ciascun gruppo.

Query

SELECT 
  department,
  AVG(salary) AS average_salary
FROM employees
GROUP BY department; 

Spiegazione

La query è identica alla precedente, solo che questa volta utilizziamo la funzione AVG(), poiché vogliamo calcolare il salario medio per reparto.

Selezioniamo il reparto, utilizziamo AVG() con la colonna salary e raggruppiamo l'output per reparto.

L'output

departmentaverage_salary
Corporate4,383.96
Private Individuals3,414.58

L'output mostra due reparti e i loro stipendi medi.

14. Utilizzo di MIN() e GROUP BY

Questa è un'altra query che combina una funzione aggregata con GROUP BY. Si può usare ogni volta che si vogliono trovare i valori minimi per ogni gruppo.

Query

SELECT 
  department,
  MIN(salary) AS minimum_salary
FROM employees
GROUP BY department;

Spiegazione

Anche in questo caso, utilizziamo la stessa query e cambiamo solo la funzione aggregata.

La query calcola il salario minimo per reparto.

L'output

departmentminimum_salary
Corporate2,894.51
Private Individuals2,845.56

L'output mostra i reparti e lo stipendio più basso in ogni reparto.

15. Utilizzo di MAX() e GROUP BY

Questo esempio mostra come utilizzare la funzione aggregata MAX() per mostrare il valore più alto all'interno di ciascun gruppo.

Query

SELECT 
  department,
  MAX(salary) AS maximum_salary
FROM employees
GROUP BY department;

Spiegazione

La query mostra lo stipendio più alto di ogni reparto, insieme al nome del reparto.

Si sa già come funziona. La query è la stessa dell'esempio precedente, ma ora utilizza la funzione MAX().

L'output

departmentmaximum_salary
Corporate5,974.41
Private Individuals4,123.45

L'output mostra gli stipendi più alti nel reparto Corporate and Private Individuals.

16. Uso di SUM(), WHERE e GROUP BY

Questa potrebbe sembrare più complicata, ma si tratta comunque di una query SQL di base. Si usa quando si vuole mostrare il totale dei valori per ogni gruppo, ma si vuole includere nella somma solo righe specifiche.

Query

SELECT 
  department,
  SUM(salary) AS total_salary
FROM employees
WHERE salary > 3500
GROUP BY department;

Spiegazione

La query mostrerà il totale degli stipendi per reparto, ma includerà nella somma solo gli stipendi individuali superiori a 3.500 dollari. Ecco come funziona.

Per prima cosa, naturalmente, si selezionano i reparti e si utilizza SUM() con la colonna stipendio della tabella employees. L'avete già imparato.

Quindi utilizzare la clausola WHERE per specificare i valori che si desidera includere nella somma. In questo caso, si tratta di quelli in cui la colonna stipendio è superiore a 3.500. In altre parole, la query ora sommerà solo i valori superiori a 3.500.

Infine, raggruppare per reparto.

Risultato

departmenttotal_salary
Private Individuals11,217.95
Corporate19,025.31

Questi totali ora includono solo gli stipendi superiori a 3.500 dollari. Se si confronta questo risultato con quello dell'undicesimo esempio (mostrato sotto; si noti il diverso ordinamento), si noterà che i totali sono più bassi. È logico, perché l'output sottostante include anche gli stipendi pari o inferiori a 3.500 dollari.

departmenttotal_salaries
Corporate21,919.82
Private Individuals17,072.92

17. Uso di COUNT(), WHERE e GROUP BY

Anche questa è una delle query che vi consigliamo di includere nella vostra cassetta degli attrezzi SQL. È simile alla precedente, in quanto utilizza una funzione aggregata. Questo tipo di query può essere utilizzato quando si vuole mostrare il numero di occorrenze per ogni gruppo.

Query

SELECT 
  department,
  COUNT(*) AS number_of_employees
FROM employees
WHERE salary > 3500
GROUP BY department;

Spiegazione

Questa query è simile a quella precedente, solo che utilizza la funzione aggregata COUNT(). L'obiettivo è mostrare il nome del reparto e il numero di dipendenti in quel reparto, ma conta solo i dipendenti con uno stipendio superiore a 3.500 dollari.

Per ottenere questo risultato, occorre innanzitutto selezionare il reparto. Quindi utilizzare COUNT(*) per contare tutte le righe all'interno di ciascun reparto. Ogni riga equivale a un dipendente. Siamo liberi di utilizzare questa versione della funzione COUNT() perché sappiamo che non ci sono righe NULL.

Ora, utilizzare WHERE per includere nel conteggio solo i dipendenti con stipendio superiore a 3500 dollari.

Alla fine, è sufficiente raggruppare i dati per reparto.

L'output

departmentnumber_of_employees
Private Individuals3
Corporate4

L'output mostra che ci sono tre dipendenti nel dipartimento Privato Individualcon stipendio superiore a 3.500 dollari e quattro dipendenti di questo tipo nel dipartimento Aziendale.

Ovviamente mancano alcuni dipendenti, come è giusto che sia. In uno degli esempi precedenti abbiamo appreso che ci sono cinque dipendenti in ogni reparto.

18. Accesso ai dati di due tabelle mediante INNER JOIN

Questo tipo di query viene utilizzato quando si vuole accedere ai dati di due o più tabelle. Mostreremo l'INNER JOIN, ma non è l'unico tipo di join che si può usare.

Ecco una breve panoramica dei tipi di join in SQL. Questi sono i nomi completi delle join. Ciò che è indicato tra le parentesi può essere omesso nella query e la join funzionerà anche senza.

SQL Join TypeDescription
(INNER) JOINReturns the matching values from both tables.
LEFT (OUTER) JOINReturns all the values from the left table and only the matching values from the right table.
RIGHT (OUTER) JOINReturns all the values from the right table and only the matching values from the left table.
FULL (OUTER) JOINReturns all the rows from both tables.
CROSS JOINReturns all combinations of all rows from the first and second table, i.e. the Cartesian product.

Query

SELECT 
  e.id,
  e.first_name,
  e.last_name,
  qs.q1_2022 + qs.q2_2022 + qs.q3_2022 + qs.q4_2022 AS total_sales_2022
FROM employees e 
JOIN quarterly_sales qs
ON e.id = qs.employee_id;

Spiegazione

Questa query vuole mostrare l'ID e il nome di ciascun dipendente, insieme al totale delle vendite nel 2022.

A tale scopo, utilizza JOIN, poiché i dati richiesti sono presenti in entrambe le tabelle del nostro set di dati.

Cominciamo a spiegare la query con la clausola FROM. Questa è familiare: per utilizzare i dati della tabella employeesè necessario fare riferimento ad essa in FROM. Inoltre, diamo a questa tabella un alias ('e'), in modo da non dover scrivere il nome completo della tabella in seguito.

Successivamente, si usa la parola chiave JOIN per unire la seconda tabella. Lo facciamo facendo riferimento alla tabella quarterly_sales in JOIN e dandole l'alias 'qs'.

Ora viene la condizione ON. Viene utilizzata per specificare le colonne su cui le due tabelle verranno unite. Di solito, si tratta di colonne che memorizzano gli stessi dati in entrambe le tabelle. In altre parole, si uniscono le tabelle sulle chiavi primarie e sulle chiavi esterne. Una chiave primaria è una colonna (o più colonne) che definisce in modo univoco ogni riga della tabella. Una chiave esterna è una colonna della seconda tabella che fa riferimento alla prima tabella. Nel nostro esempio, la colonna id della tabella employees è la sua chiave primaria. La colonna employee_id della tabella quarterly_sales è la chiave esterna, poiché contiene il valore della colonna id della prima tabella.

Utilizzeremo quindi queste colonne in ON, ma dobbiamo anche specificare da quale tabella proviene ciascuna colonna. Ricordiamo che abbiamo dato alle nostre tabelle degli alias. Questo ci tornerà utile in questo caso, perché non dovremo scrivere i nomi completi delle tabelle, ma solo una lettera per ogni tabella. Scriviamo l'alias della prima tabella (invece del nome completo), separandoli con un punto, e poi il nome della colonna. Mettiamo il segno di uguale, l'alias della seconda tabella e il nome della colonna.

Ora che abbiamo due tabelle unite, siamo liberi di selezionare qualsiasi colonna da entrambe le tabelle. Selezioniamo id, first_name e last_name da employees. Quindi aggiungiamo ogni colonna della tabella vendite trimestrali che mostra le vendite trimestrali e la chiamiamo total_sales_2022. Ogni colonna di SELECT è preceduta dall'alias della tabella, con l'alias e il nome della colonna separati da un punto.

Nota: Quando si uniscono le tabelle, è consigliabile utilizzare i nomi delle tabelle prima dei nomi delle colonne in SELECT è consigliabile. In questo modo sarà più facile determinare quale colonna proviene da quale tabella. Inoltre, le tabelle possono avere colonne con lo stesso nome. Tuttavia, i nomi delle tabelle possono diventare prolissi, quindi si consiglia di assegnare loro degli alias in JOIN. In questo modo, si possono usare alias molto più brevi (invece dei nomi completi delle tabelle) davanti ai nomi delle colonne.

L'output

idfirst_namelast_nametotal_sales_2022
8StephanieMarx22,993.23
4LucyPatterson30,595.57
10VictoriaPollock6,770.16
1PaulGarrix45,443.38
3MatthiasJohnson58,233.67
2AstridFox20,312.48
7WalterDeer62,774.59
6ClaudiaConte17,734.94
5TomPage28,637.65
9LucaPavarotti25,023.21

L'output elenca ogni dipendente e mostra le sue vendite totali nel 2022.

19. Accesso ai dati di due tabelle mediante INNER JOIN e filtro con WHERE

Naturalmente, è possibile filtrare i dati nelle tabelle unite nello stesso modo in cui si può fare con una sola tabella. Anche in questo caso è necessaria la clausola WHERE.

Query

SELECT
  e.id,
  e.first_name,
  e.last_name,
  qs.q4_2022-qs.q3_2022 AS sales_change
FROM employees e 
JOIN quarterly_sales qs
ON e.id = qs.employee_id
WHERE qs.q4_2022-qs.q3_2022 < 0;

Spiegazione

Abbiamo modificato la query precedente per mostrare la diminuzione delle vendite tra il terzo e il quarto trimestre.

Ecco come fare. Come in precedenza, abbiamo selezionato l'ID e il nome del dipendente.

Abbiamo sottratto un trimestre dall'altro per calcolare la variazione tra i trimestri. In questo caso, si tratta della colonna con le vendite del quarto trimestre meno quelle del terzo. Questa nuova colonna si chiama sales_change.

Le tabelle vengono unite esattamente come nell'esempio precedente.

Per mostrare solo la diminuzione delle vendite, utilizziamo la clausola WHERE. In essa, sottraiamo ancora una volta il terzo trimestre dal quarto e impostiamo la condizione che il risultato sia inferiore a zero, cioè una diminuzione. Come si è notato, WHERE viene inserita dopo l'unione delle tabelle.

L'output

idfirst_namelast_namesales_change
8StephanieMarx-2,224.11
4LucyPatterson-5,151.55
1PaulGarrix-21,233.46
3MatthiasJohnson-3,771.83
7WalterDeer-189.32
6ClaudiaConte-1,500.44
9LucaPavarotti-1,138.55

L'output mostra tutti i dipendenti che hanno registrato una diminuzione delle vendite nell'ultimo trimestre e l'importo di tale diminuzione.

20. Accesso ai dati di due tabelle mediante INNER JOIN, filtro con WHERE e ordinamento con ORDER BY

Probabilmente avrete notato che gli output degli ultimi due esempi sono ordinati in modo un po' casuale. Questo non è un problema da sopportare: è possibile ordinare i dati con ORDER BY anche quando si utilizzano due tabelle.

Query

SELECT 
  e.id,
  e.first_name,
  e.last_name,
  qs.q4_2022
FROM employees e 
JOIN quarterly_sales qs
ON e.id = qs.employee_id
WHERE qs.q4_2022 > 5000
ORDER BY qs.q4_2022 DESC;

Spiegazione

La query non è molto diversa dalla precedente. Selezioniamo nuovamente l'ID e il nome del dipendente. Aggiungiamo anche le vendite dell'ultimo trimestre dell'anno. Le tabelle vengono poi unite nello stesso modo in cui sono state unite in precedenza. Utilizziamo la clausola WHERE per mostrare solo le vendite trimestrali superiori a 5.000 dollari.

Inoltre, vogliamo ordinare l'output. Questo non è diverso da quello che abbiamo imparato in precedenza: basta scrivere il nome della colonna in ORDER BY e ordinarla nel modo desiderato. Nel nostro esempio, l'ordinamento va dalle vendite trimestrali più alte a quelle più basse.

L'output

idfirst_namelast_nameq4_2022
7WalterDeer14,445.12
3MatthiasJohnson8,451.51
5TomPage7,788.01
9LucaPavarotti7,648.90
2AstridFox5,322.05

L'output mostra tutti i cinque dipendenti le cui vendite sono state superiori a 5.000 dollari negli ultimi tre mesi del 2022.

Dalle query SQL di base a SQL Master

Se volete diventare maestri di SQL, dovete essere a vostro agio nell'uso di queste 20 query SQL di base. Queste sono le basi che vi permetteranno di costruire una solida conoscenza di SQL.

Questo tipo di conoscenza si ottiene con molta pratica ed esperienza. In altre parole, dovete semplicemente scrivere le query da soli. In questo modo, potrete consolidare tutti i concetti appresi qui. Lungo il percorso, probabilmente si commetteranno molti errori. Questo è auspicabile, perché non c'è modo migliore di imparare che cercare di correggere i propri errori.

Per questo avrete bisogno di molti esempi di query. Non è necessario creare esempi personalizzati, come abbiamo fatto qui. Se volete, potete farlo. Ma lo abbiamo già fatto nel nostro SQL per principianti corso.

È pieno di esempi di query SQL di base! Provatelo e siamo sicuri che non ve ne pentirete!