21st Sep 2023 Tempo di lettura: 22 minuti 20 esempi di query SQL di base per principianti: Una panoramica completa Tihomir Babic sql query sql Indice Che cos'è l'SQL? Set di dati 1. Selezione di tutte le colonne di una tabella Query Spiegazione L'output 2. Selezione di una colonna da una tabella Query Spiegazione L'output 3. Selezione di due colonne da una tabella Query Spiegazione Uscita 4. Selezione di due (o più) colonne da una tabella e filtraggio tramite confronto numerico in WHERE Query Spiegazione Risultato 5. Selezione di due colonne e filtraggio mediante una condizione di uguaglianza in WHERE Query Spiegazione L'output 6. Selezione di due colonne e ordinamento in base a una colonna Query Spiegazione L'output 7. Selezione di due colonne e ordinamento discendente per una colonna Query Spiegazione L'output 8. Selezione di due colonne da una tabella e ordinamento discendente per due colonne Query Spiegazione Risultato 9. Selezione di due colonne con una condizione logica complessa in WHERE Query Spiegazione Risultato 10. Semplici calcoli sulle colonne Query Spiegazione L'output 11. Utilizzo di SUM() e GROUP BY Query Spiegazione L'output 12. Utilizzo di COUNT() e GROUP BY Query Spiegazione Uscita 13. Uso di AVG() e GROUP BY Query Spiegazione L'output 14. Utilizzo di MIN() e GROUP BY Query Spiegazione L'output 15. Utilizzo di MAX() e GROUP BY Query Spiegazione L'output 16. Uso di SUM(), WHERE e GROUP BY Query Spiegazione Risultato 17. Uso di COUNT(), WHERE e GROUP BY Query Spiegazione L'output 18. Accesso ai dati di due tabelle mediante INNER JOIN Query Spiegazione L'output 19. Accesso ai dati di due tabelle mediante INNER JOIN e filtro con WHERE Query Spiegazione L'output 20. Accesso ai dati di due tabelle mediante INNER JOIN, filtro con WHERE e ordinamento con ORDER BY Query Spiegazione L'output Dalle query SQL di base a SQL Master 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! Tags: sql query sql