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

Come aggiornare solo le prime 10 righe in SQL

I database del mondo reale richiedono un aggiornamento continuo. Spesso è necessario aggiornare record specifici; si può anche voler aggiornare solo la prima riga, o le prime 10, 100 o 1000 righe. Vediamo come aggiornare in SQL le righe per una quantità specifica partendo dall'alto.

Che cos'è l'istruzione SQL UPDATE?

In SQL, un'istruzione UPDATE modifica i record esistenti di una tabella. Si può scegliere di aggiornare intere colonne o di aggiornare righe filtrate con un'istruzione WHERE. Come vedremo in questo articolo, è anche possibile aggiornare le righe per una quantità specifica dall'inizio della tabella.

Mantenere aggiornati i database è una delle principali responsabilità dei data engineer, degli amministratori di dati e di tutti coloro che lavorano con i database. In questa guida dettagliata troverete spiegazioni ed esempi di SQL UPDATE adatti ai principianti.

Per apprendere tutte le nozioni di base sulla modifica dei database, consultate il nostro corso interattivo How to INSERT, UPDATE, and DELETE Data in SQL. Con 52 esercizi interattivi di SQL, imparerete a recuperare, memorizzare, modificare, cancellare, inserire e aggiornare i dati con il linguaggio di manipolazione dei dati SQL (DML). Se siete alle prime armi con l'SQL, vi consiglio di frequentare il corso SQL Basics corso interattivo prima di passare al linguaggio di manipolazione dei dati.

Come aggiornare una sola riga in SQL

Il modo migliore per capire come funziona l'SQL UPDATE è vederlo in azione. Cominciamo quindi con un esempio.

Abbiamo una tabella dei nostri fornitori, con l'ID dell'azienda, il nome dell'azienda, il nome del referente e il volume di prodotti e servizi forniti nel 2021 (in USD).

suppliers
idcompany_namecontact_namevolume_2021
1Dunder MifflinMichael Scott456388.40
2Eco FocusRobert California203459.30
3Max EnergyRoy Anderson1403958.80
4Apples and OrangesTodd Packer2303479.50
5Top SecurityJo Bennett105000.10
6InnovatorsAndy Bernard567980.00
7Big Data CorpOscar Martinez345678.90
8Miami and partnersStanley Hudson1205978.80
9Lots of FunPhyllis Vance490345.40
10Repair IncDarryl Philbin53673.30
11Best AccountantsKevin Malone534512.20
12Time & MoneyMeredith Palmer78905.20
13Two BossesJim Halpert250350.10
14Epic AdventureRyan Howard87078.00
15Schrute MarketingDwight Schrute3450250.50

Per essere semplici, iniziamo con l'aggiornamento di una sola riga della tabella. In particolare, diciamo che abbiamo appena saputo che la persona di contatto di "Lots of Fun" è cambiata da Phyllis Vance a Pam Beesly. Vogliamo aggiornare il nome del contatto per l'azienda con ID 9. Ecco una query da utilizzare:

UPDATE suppliers
SET contact_name = 'Pam Beesly'
WHERE id = 9;

La sintassi è semplice. Dopo la parola chiave UPDATE, si specifica il nome della tabella che si desidera aggiornare. Quindi, con la parola chiave SET, si definisce quale colonna (ad esempio, contact_name) deve essere aggiornata con quale valore (ad esempio, Pam Beesley). Infine, si utilizza la parola chiave WHERE per specificare che solo il record con l'ID azienda 9 deve essere aggiornato.

Ecco la tabella aggiornata. Come si vede, ora abbiamo un nuovo contatto per "Lots of Fun":

idcompany_namecontact_namevolume_2021
1Dunder MifflinMichael Scott456388.40
2Eco FocusRobert California203459.30
3Max EnergyRoy Anderson1403958.80
4Apples and OrangesTodd Packer2303479.50
5Top SecurityJo Bennett105000.10
6InnovatorsAndy Bernard567980.00
7Big Data CorpOscar Martinez345678.90
8Miami and partnersStanley Hudson1205978.80
9Lots of FunPam Beesley490345.40
10Repair IncDarryl Philbin53673.30
11Best AccountantsKevin Malone534512.20
12Time & MoneyMeredith Palmer78905.20
13Two BossesJim Halpert250350.10
14Epic AdventureRyan Howard87078.00
15Schrute MarketingDwight Schrute3450250.50

Passiamo ora a un caso più complesso in cui si aggiornano più righe.

Come aggiornare un numero specifico di righe

Esistono diversi scenari in cui è necessario aggiornare più righe. Nella maggior parte dei casi, si selezionano le righe che si desidera aggiornare utilizzando le condizioni di filtro in un'istruzione WHERE.

In questa sede, tuttavia, ci concentreremo sul caso in cui si desideri aggiornare le righe per una quantità specifica a partire dall'inizio, ad esempio i primi 10 record.

Continuiamo con il nostro primo esempio, ma con alcuni aggiornamenti. Supponiamo di voler aggiungere un'altra colonna, top_supplier, alla nostra tabella. suppliers tabella. In questa colonna vogliamo vedere:

  • "Sì" se il fornitore è uno dei primi 10 in base all'importo pagato all'azienda l'anno scorso, oppure "No" per tutti gli altri fornitori.
  • "No" per tutti gli altri fornitori.

Suggerisco di procedere in tre fasi:

  1. Aggiungere una nuova colonna top_supplier.
  2. Impostare il valore di questa colonna su "No" per tutti i record.
  3. Aggiornare il valore di questa colonna a "Sì" per i primi 10 fornitori.

Ecco come realizzare i primi due passaggi:

ALTER TABLE suppliers
ADD top_supplier varchar(32);

UPDATE suppliers
SET top_supplier = 'No';

Ed ecco la tabella risultante:

<
suppliers
idcompany_namecontact_namevolume_2021top_supplier
1Dunder MifflinMichael Scott456388.40No
2Eco FocusRobert California203459.30No
3Max EnergyRoy Anderson1403958.80No
4Apples and OrangesTodd Packer2303479.50No
5Top SecurityJo Bennett105000.10No
6InnovatorsAndy Bernard567980.00No
7Big Data CorpOscar Martinez345678.90No
8Miami and partnersStanley Hudson1205978.80No
9Lots of FunPhyllis Vance490345.40No
10Repair IncDarryl Philbin53673.30No
11Best AccountantsKevin Malone534512.20No
12Time & MoneyMeredith Palmer78905.20No
13Two BossesJim Halpert250350.10No
14Epic AdventureRyan Howard87078.00No
15Schrute MarketingDwight Schrute3450250.50No

Ora viene la parte più interessante: aggiornare la colonna top_supplier per le prime 10 righe dopo aver ordinato la tabella in base alla colonna volume_2021. La sintassi della query per eseguire questo terzo passo dipende dal sistema di gestione del database (ad esempio, MySQL, SQL Server, Oracle o PostgreSQL). Per ora vi mostrerò delle query funzionanti per alcuni dei sistemi di gestione di database più diffusi.

MySQL

In MySQL, possiamo sfruttare la parola chiave LIMIT che limita il numero di record da produrre o aggiornare:

UPDATE suppliers
SET top_supplier = 'Yes'
ORDER BY volume_2021 DESC
LIMIT 10;

Con questa query, aggiorniamo la tabella suppliers impostando il valore della colonna top_supplier su "Sì". Tuttavia, vogliamo che gli aggiornamenti riguardino solo i primi 10 fornitori. Quindi, ordiniamo la tabella in base alla colonna volume_2021 (in ordine decrescente) e limitiamo a 10 il numero di righe da aggiornare. Se avete bisogno di rinfrescare le vostre conoscenze su ORDER BY, consultate questo articolo dettagliato.

Ecco la tabella aggiornata ordinata per volume_2021. Come si vede, solo i primi 10 fornitori hanno "Sì" nell'ultima colonna. Utilizzate la stessa sintassi per aggiornare solo la prima riga, oppure le prime 5, 20, 100 o un numero qualsiasi di righe, semplicemente cambiando il numero dopo la parola chiave LIMIT.

idcompany_namecontact_namevolume_2021top_supplier
15Schrute MarketingDwight Schrute3450250.50Yes
4Apples and OrangesTodd Packer2303479.50Yes
3Max EnergyRoy Anderson1403958.80Yes
8Miami and partnersStanley Hudson1205978.80Yes
6InnovatorsAndy Bernard567980.00Yes
11Best AccountantsKevin Malone534512.20Yes
9Lots of FunPhyllis Vance490345.40Yes
1Dunder MifflinMichael Scott456388.40Yes
7Big Data CorpOscar Martinez345678.90Yes
13Two BossesJim Halpert250350.10Yes
2Eco FocusRobert California203459.30No
5Top SecurityJo Bennett105000.10No
14Epic AdventureRyan Howard87078.00No
12Time & MoneyMeredith Palmer78905.20No
10Repair IncDarryl Philbin53673.30No

SQL Server

A differenza di MySQL, SQL Server non ha la parola chiave LIMIT. Al suo posto c'è TOP. Utilizziamo questa parola chiave in una sottoquery per ottenere gli ID dei primi 10 fornitori:

UPDATE suppliers
SET top_supplier = 'Yes'
WHERE id IN(
        SELECT TOP (10) id
        FROM suppliers
        ORDER BY volume_2021 DESC);

Quindi, si aggiorna la colonna top_supplier per i record i cui ID corrispondenti si trovano nell'elenco creato dalla subquery.

PostgreSQL e Oracle

Infine, PostgreSQL e Oracle offrono un modo diverso per limitare il numero di righe da aggiornare. Come per la query precedente, si utilizza una sottoquery. Con questa sottoquery, ordiniamo la tabella suppliers in base all'importo pagato e poi limitiamo l'output a 10 record utilizzando le parole chiave FETCH FIRST 10 ROWS ONLY:

UPDATE suppliers
SET top_supplier = 'Yes'
WHERE id IN(
        SELECT id
        FROM suppliers
        ORDER BY volume_2021 DESC
        FETCH FIRST 10 ROWS ONLY);

Come si vede, aggiorniamo solo i record corrispondenti nella query principale.

Altri esempi di sottoquery per l'istruzione UPDATE sono disponibili in questo articolo dettagliato. Inoltre, potete vedere altri esempi con INSERT, UPDATE e DELETE qui.

È ora di fare pratica con i corsi SQL online!

L'SQL è un potente strumento analitico che di solito supera Excel in efficacia ed efficienza. È anche uno dei linguaggi di programmazione moderni che sono qui per rimanere. L'SQL non è difficile da imparare, ma spesso esistono diversi modi per svolgere lo stesso compito. Inoltre, esistono alcune differenze di sintassi tra i vari sistemi di gestione di database.

L'approccio più efficace per ottenere una comprensione completa di SQL è quello di seguire corsi online di SQL. Se non si ha esperienza con SQL, si consiglia di iniziare con il corso SQL Basics . Include 129 esercizi interattivi di SQL che coprono tutte le basi necessarie per recuperare i dati da un database.

Se volete anche sapere come modificare il vostro database, consultate il corso How to INSERT, UPDATE, and DELETE Data in SQL. Questo corso interattivo copre le basi del linguaggio di manipolazione dei dati per aiutarvi a estendere e aggiornare il vostro database secondo le necessità.

Quando siete pronti ad andare oltre i singoli corsi e ad acquisire una conoscenza completa delle funzionalità di SQL, andate a seguire i nostri percorsi di apprendimento:

  • SQL from A to Z per acquisire familiarità con i concetti di base e avanzati dell'SQL, come le funzioni finestra, le query ricorsive e i GROUP BY.
  • Creazione di strutture di database per imparare a creare e gestire tabelle, viste e indici nei più diffusi sistemi di gestione di database relazionali come MySQL, SQL Server, Oracle e PostgreSQL.

Grazie per aver letto e buon apprendimento!