Scopri come UPDATE con JOIN in SQL semplifica gli aggiornamenti tra tabelle in SQL Server. Capisci come INNER JOIN e LEFT JOIN differiscono per casi d’uso specifici ed esplora le alternative con sottoquery o l’istruzione MERGE.
Dati coerenti sono fondamentali per l’affidabilità e l’integrità nei database relazionali. Quando modifichi dati esistenti tra tabelle correlate, usiamo l’istruzione UPDATE con la clausola JOIN per ottenere coerenza dei dati. L’operazione UPDATE con JOIN è supportata in SQL Server ed è utile per garantire una sincronizzazione accurata dei dati tra le tabelle.
L’operazione JOIN in SQL consente aggiornamenti più complessi oltre le operazioni su singola tabella tramite chiavi esterne condivise tra tabelle diverse. L’UPDATE con JOIN è utile per sviluppatori e amministratori di database perché migliora l’efficienza e riduce il rischio di inconsistenze nei dati.
Prima di iniziare, ti consiglio il corso di DataCamp Introduction to SQL Server per familiarizzare con il funzionamento dei database SQL Server. Questo tutorial è scritto specificamente pensando a SQL Server. Dai anche un’occhiata al nostro tutorial, Introduction to SQL Joins, per imparare a usare i JOIN quando lavori con più tabelle in SQL.
Come usare SQL UPDATE con JOIN
In SQL Server, l’operazione UPDATE con JOIN ti permette di aggiornare i record in una tabella in base ai dati corrispondenti presenti in un’altra. Questa tecnica è particolarmente utile quando sincronizzi dati tra più tabelle.
Usare SQL UPDATE con INNER JOIN
L’INNER JOIN in SQL recupera le righe/record con dati corrispondenti in entrambe le tabelle. Usato con l’istruzione UPDATE, un INNER JOIN garantisce che vengano aggiornati solo i record nella tabella di destinazione che hanno corrispondenze nella tabella unita.
La struttura tipica di UPDATE con INNER JOIN prevede di specificare la tabella di destinazione da aggiornare e definire le colonne da modificare. La struttura include anche l’uso di INNER JOIN per collegarla a un’altra tabella in base a una colonna comune, in modo da aggiornare solo i record necessari.
Esempio di INNER JOIN
Supponi di gestire un database retail in cui devi aggiornare la tabella Sales per sincronizzarla con le modifiche nella tabella Customer. Un cliente ha recentemente cambiato il metodo di contatto preferito e vuoi che queste modifiche si riflettano in entrambe le tabelle. Userai UPDATE con INNER JOIN per assicurarti che vengano modificati solo i record di vendita relativi ai clienti che hanno aggiornato le informazioni di contatto, senza influenzare le altre righe nei dati.
-- Update the Sales table based on the new preferred contact methods in the Customers tableUPDATE s
SET s.ContactMethod = c.PreferredContactMethod
FROM Sales s
INNERJOIN Customers c ON s.CustomerID = c.CustomerID
WHERE c.CustomerID IN(3,7,9);Offerto da
Best practice per UPDATE con INNER JOIN
Quando usi UPDATE con INNER JOIN, considera le seguenti best practice per query efficienti.
Usa indici sulle colonne di join: assicurati che le colonne usate nella condizione di JOIN siano indicizzate per ottimizzare le prestazioni e velocizzare l’esecuzione della query.
Limita l’ambito dell’update: usa la clausola WHERE per assicurarti che vengano aggiornate solo le righe rilevanti e per migliorare le prestazioni della query.
Usare SQL UPDATE con LEFT JOIN
Un LEFT JOIN viene usato per recuperare tutti i record dalla tabella di sinistra (prima) e i record corrispondenti dalla tabella di destra (seconda). Una query con LEFT JOIN restituirà risultati NULL dalla tabella di destra se non ci sono corrispondenze. Usato con l’istruzione UPDATE, il LEFT JOIN può aggiornare i record anche quando non ci sono dati corrispondenti nella seconda tabella, utile per colmare dati mancanti. Dai un’occhiata al nostro SQL Joins Cheat Sheet se vuoi ripassare i join in SQL.
Esempio di LEFT JOIN
Considera lo scenario in cui gestisci un database per un negozio online. La tabella Customers contiene l’elenco di tutti i clienti, mentre la tabella Orders contiene i dettagli degli ordini effettuati da alcuni di questi clienti. Userai il LEFT JOIN per recuperare e aggiornare i dettagli degli ordini per tutti i clienti, compresi quelli che non hanno ancora effettuato ordini. Questo metodo riempirà i dati mancanti per i clienti senza ordini con un valore NULL o con un valore specificato.
Il nostro esempio con LEFT JOIN sarà un po’ diverso perché LEFT JOIN restituisce valori NULL se non vengono trovati record corrispondenti nella tabella di destra. Per questo è importante capire come gestire questi valori NULL. Puoi gestire i valori NULL impostando un valore predefinito nelle colonne da aggiornare. Usando la funzione COALESCE(), il LEFT JOIN includerà una condizione per un valore di default per i dati mancanti. La query seguente mostra come impostare un valore di default per i valori NULL.
-- Update all customers to set default values where OrderStatus and OrderDate are NULLUPDATE c
SET
c.OrderStatus =COALESCE(o.OrderStatus,'No Orders'),
c.OrderDate =COALESCE(o.OrderDate,'2023-01-01')FROM Customers c
LEFTJOIN Orders o ON c.CustomerID = o.CustomerID;-- Select from the updated Customers tableSELECT*FROM Customers;Offerto da
Puoi anche usare le funzioni COALESCE() o IFNULL() per gestire i valori NULL che coinvolgono calcoli prima di aggiornare le colonne. Dai un’occhiata al nostro tutorial COALESCE() SQL Function per saperne di più.
Best practice per UPDATE con LEFT JOIN
Quando usi UPDATE con LEFT JOIN, considera le seguenti best practice per query efficienti.
Usa riferimenti espliciti alle colonne: invece di usare SELECT *, specifica esplicitamente le colonne che vuoi aggiornare per rendere la query più chiara ed evitare aggiornamenti indesiderati.
Usa indici sulle colonne di join: assicurati che le colonne usate nella condizione di JOIN siano indicizzate per migliorare le prestazioni del JOIN e il tempo complessivo di esecuzione della query.
Considerazioni sulle prestazioni di SQL UPDATE con JOIN
Capire le implicazioni sulle prestazioni quando si usa UPDATE con JOIN in SQL è importante per assicurare che le query vengano eseguite in modo efficiente. Le prestazioni di queste operazioni possono essere influenzate da diversi fattori, tra cui la dimensione delle tabelle, il tipo di join utilizzato e la presenza di indici appropriati.
Indici e velocità delle query
Indicizzare le colonne coinvolte nella condizione di join è importante per velocizzare il processo di aggiornamento. Quando indicizzi correttamente le colonne, l’operazione individua solo le righe corrispondenti durante il join, riducendo il tempo necessario per la scansione della tabella.
Impatto di dataset di grandi dimensioni
Quando lavori con dataset di grandi dimensioni, l’esecuzione delle query può essere più lenta a causa di operazioni ad alta intensità di risorse. Considera le seguenti best practice per mitigare i problemi di prestazioni con dataset grandi. Prova anche lo skill track SQL Server for Database Administrators se progetterai o manterrai database regolarmente come parte del tuo lavoro.
Aggiornamenti a batch: suddividi gli aggiornamenti in batch più piccoli per ridurre il carico sul database e aggiornare i record in modo efficiente.
Limita l’ambito dell’update: quando usi la clausola WHERE, specifichi le righe da aggiornare, riducendo il tempo di elaborazione delle query.
Errori comuni e come evitarli
Ci sono alcuni errori comuni che potresti incontrare quando usi UPDATE con JOIN in SQL Server. Questi errori possono portare a problemi di prestazioni o ad aggiornare dati non intenzionali. Di seguito alcuni di questi errori e come evitarli.
Aggiornamenti non intenzionali
Se non specifichi correttamente la condizione di join, l’UPDATE con JOIN aggiornerà più record del previsto. Questo errore può aggiornare un’intera tabella invece del sottoinsieme richiesto. Per evitarlo, assicurati sempre di usare una condizione di JOIN precisa per aggiornare le righe necessarie.
Prodotti cartesiani
Un prodotto cartesiano si verifica quando la condizione di join è errata o mancante, causando l’abbinamento di ogni riga della tabella di sinistra con ogni riga della tabella di destra. Questo problema può rallentare l’operazione della query e produrre risultati inaccurati. Per evitarlo, assicurati sempre di definire correttamente la condizione di JOIN. Inoltre, indica le colonne corrette su cui applicare la condizione di join.
Alternative a SQL UPDATE con JOIN
Sebbene l’UPDATE con JOIN sia un metodo potente per aggiornare record tra tabelle correlate, esistono metodi alternativi per ottenere lo stesso risultato. Ecco alcune opzioni.
Sottoquery
Le sottoquery sono un’alternativa importante al JOIN quando vuoi eseguire aggiornamenti basati su una condizione semplice. Con le sottoquery eviti tabelle multiple complesse specificando la condizione nella sottoquery.
L’esempio seguente mostra come usare una sottoquery per aggiornare la tabella Sales con il CustomerStatus più recente dalla tabella Customers.
-- Update the CustomerStatus in the Sales tableUPDATE Sales
-- Set the CustomerStatus in Sales to corresponding value from the Customers tableSET CustomerStatus =(-- Fetch CustomerStatus from the Customers table for the matching CustomerIDSELECT CustomerStatus
FROM Customers
WHERE Customers.CustomerID = Sales.CustomerID
)-- Update rows in Sales where a matching CustomerID exists in the Customers tableWHEREEXISTS(-- Subquery to check if a matching CustomerID exists in the Customers tableSELECT1FROM Customers
WHERE Customers.CustomerID = Sales.CustomerID
);Offerto da
Istruzione MERGE
L’istruzione MERGE è un comando SQL versatile che consente di eseguire operazioni di UPDATE, INSERT o DELETE in un’unica query confrontando due tabelle. L’istruzione MERGE è utile quando devi sincronizzare dati tra due tabelle, gestendo righe corrispondenti e non corrispondenti.
Usare l’istruzione MERGE è utile perché offre un metodo conciso per eseguire più operazioni in un’unica query. La sintassi dell’istruzione MERGE è la seguente.
-- Merge data from the source table into the target tableMERGEINTO target_table AS target
USING source_table AS source
-- Define the common key between the source and target tablesON target.common_column = source.common_column
-- When a match is found in both tables based on the common keyWHENMATCHEDTHEN-- Update the target table's column with the corresponding value from the source tableUPDATESET target.column= source.column-- When a row exists in the source table but not in the target tableWHENNOTMATCHEDTHEN-- Insert the new data into the target tableINSERT(column1, column2)VALUES(source.column1, source.column2)-- When a row exists in the target table but not in the source tableWHENNOTMATCHEDBY SOURCE THEN-- Delete the row from the target tableDELETE;Offerto da
Conclusione
Capire come usare UPDATE con JOIN in SQL Server è importante per aggiornamenti di dati tra tabelle efficienti nei database relazionali. Questa tecnica ti permette di aggiornare i record in una tabella in base ai dati corrispondenti in un’altra, garantendo coerenza e sincronizzazione dei dati tra tabelle correlate. Applicare queste tecniche e best practice può migliorare le operazioni sui database, assicurando una gestione dei dati accurata, efficiente e affidabile.
Se vuoi far progredire le tue competenze SQL, ti consiglio lo skill track di DataCamp SQL Server Fundamentals per migliorare le tue capacità di analisi dei dati. Il corso Writing Functions and Stored Procedures in SQL Server ti aiuterà anche a imparare una manipolazione efficiente dei dati in SQL Server. Se ti stai preparando per un colloquio SQL, ti consiglio di leggere il nostro post sul blog, 20 Top SQL Joins Interview Questions, per aiutarti a prepararti. Infine, se vuoi applicare le tue competenze SQL in una carriera come data engineer, considera anche il nostro career track Data Engineer in Python, completo di certificazione finale.
Technical writer di Data Science con esperienza pratica in data analytics, business intelligence e data science. Scrivo contenuti pratici e orientati al settore su SQL, Python, Power BI, Databricks e data engineering, basati su lavoro di analytics reale. La mia scrittura unisce profondità tecnica e impatto sul business, aiutando i professionisti a trasformare i dati in decisioni sicure.
Domande frequenti su SQL
Qual è lo scopo di usare UPDATE con JOIN in SQL?⌄
UPDATE con JOIN ti permette di aggiornare i record in una tabella in base ai dati corrispondenti presenti in un’altra tabella.
In che cosa differisce un INNER JOIN da un LEFT JOIN quando si usa in un’istruzione UPDATE?⌄
Un INNER JOIN aggiorna solo i record che hanno righe corrispondenti in entrambe le tabelle, mentre un LEFT JOIN aggiorna tutti i record nella tabella di destinazione, inclusi quelli che non hanno una riga corrispondente nella tabella unita, colmando i dati mancanti o gestendo i valori NULL.
Quali sono i problemi di prestazioni di UPDATE con JOIN in SQL?⌄
Tabelle/dataset di grandi dimensioni possono influenzare le prestazioni della query di UPDATE con JOIN poiché richiedono maggiore potenza di elaborazione.
Quali database supportano UPDATE con JOIN in SQL?⌄
Il concetto di UPDATE con JOIN funziona in SQL Server, MySQL e PostgreSQL, anche se la sintassi varia a seconda del database. Oracle non supporta direttamente UPDATE con JOIN e richiede un approccio diverso usando sottoquery o l’istruzione MERGE.
Quali sono le alternative a UPDATE con JOIN in SQL?⌄
L’uso di sottoquery o dell’istruzione MERGE sono alternative appropriate a UPDATE con JOIN.
Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Dati coerenti sono fondamentali per l’affidabilità e l’integrità nei database relazionali. Quando modifichi dati esistenti tra tabelle correlate, usiamo l’istruzione
UPDATEcon la clausolaJOINper ottenere coerenza dei dati. L’operazioneUPDATEconJOINè supportata in SQL Server ed è utile per garantire una sincronizzazione accurata dei dati tra le tabelle.L’operazione
JOINin SQL consente aggiornamenti più complessi oltre le operazioni su singola tabella tramite chiavi esterne condivise tra tabelle diverse. L’UPDATEconJOINè utile per sviluppatori e amministratori di database perché migliora l’efficienza e riduce il rischio di inconsistenze nei dati.Prima di iniziare, ti consiglio il corso di DataCamp Introduction to SQL Server per familiarizzare con il funzionamento dei database SQL Server. Questo tutorial è scritto specificamente pensando a SQL Server. Dai anche un’occhiata al nostro tutorial, Introduction to SQL Joins, per imparare a usare i
JOINquando lavori con più tabelle in SQL.Come usare SQL UPDATE con JOIN
In SQL Server, l’operazione
UPDATEconJOINti permette di aggiornare i record in una tabella in base ai dati corrispondenti presenti in un’altra. Questa tecnica è particolarmente utile quando sincronizzi dati tra più tabelle.Usare SQL UPDATE con INNER JOIN
L’
INNER JOINin SQL recupera le righe/record con dati corrispondenti in entrambe le tabelle. Usato con l’istruzioneUPDATE, unINNER JOINgarantisce che vengano aggiornati solo i record nella tabella di destinazione che hanno corrispondenze nella tabella unita.La struttura tipica di
UPDATEconINNER JOINprevede di specificare la tabella di destinazione da aggiornare e definire le colonne da modificare. La struttura include anche l’uso diINNER JOINper collegarla a un’altra tabella in base a una colonna comune, in modo da aggiornare solo i record necessari.Esempio di INNER JOIN
Supponi di gestire un database retail in cui devi aggiornare la tabella
Salesper sincronizzarla con le modifiche nella tabellaCustomer. Un cliente ha recentemente cambiato il metodo di contatto preferito e vuoi che queste modifiche si riflettano in entrambe le tabelle. UseraiUPDATEconINNER JOINper assicurarti che vengano modificati solo i record di vendita relativi ai clienti che hanno aggiornato le informazioni di contatto, senza influenzare le altre righe nei dati.Best practice per UPDATE con INNER JOIN
Quando usi
UPDATEconINNER JOIN, considera le seguenti best practice per query efficienti.Usa indici sulle colonne di join: assicurati che le colonne usate nella condizione di
JOINsiano indicizzate per ottimizzare le prestazioni e velocizzare l’esecuzione della query.Limita l’ambito dell’update: usa la clausola
WHEREper assicurarti che vengano aggiornate solo le righe rilevanti e per migliorare le prestazioni della query.Usare SQL UPDATE con LEFT JOIN
Un
LEFT JOINviene usato per recuperare tutti i record dalla tabella di sinistra (prima) e i record corrispondenti dalla tabella di destra (seconda). Una query conLEFT JOINrestituirà risultatiNULLdalla tabella di destra se non ci sono corrispondenze. Usato con l’istruzioneUPDATE, ilLEFT JOINpuò aggiornare i record anche quando non ci sono dati corrispondenti nella seconda tabella, utile per colmare dati mancanti. Dai un’occhiata al nostro SQL Joins Cheat Sheet se vuoi ripassare i join in SQL.Esempio di LEFT JOIN
Considera lo scenario in cui gestisci un database per un negozio online. La tabella
Customerscontiene l’elenco di tutti i clienti, mentre la tabellaOrderscontiene i dettagli degli ordini effettuati da alcuni di questi clienti. Userai ilLEFT JOINper recuperare e aggiornare i dettagli degli ordini per tutti i clienti, compresi quelli che non hanno ancora effettuato ordini. Questo metodo riempirà i dati mancanti per i clienti senza ordini con un valoreNULLo con un valore specificato.Il nostro esempio con
LEFT JOINsarà un po’ diverso perchéLEFT JOINrestituisce valoriNULLse non vengono trovati record corrispondenti nella tabella di destra. Per questo è importante capire come gestire questi valoriNULL. Puoi gestire i valoriNULLimpostando un valore predefinito nelle colonne da aggiornare. Usando la funzioneCOALESCE(), ilLEFT JOINincluderà una condizione per un valore di default per i dati mancanti. La query seguente mostra come impostare un valore di default per i valoriNULL.Puoi anche usare le funzioni
COALESCE()oIFNULL()per gestire i valoriNULLche coinvolgono calcoli prima di aggiornare le colonne. Dai un’occhiata al nostro tutorial COALESCE() SQL Function per saperne di più.Best practice per UPDATE con LEFT JOIN
Quando usi
UPDATEconLEFT JOIN, considera le seguenti best practice per query efficienti.Usa riferimenti espliciti alle colonne: invece di usare
SELECT *, specifica esplicitamente le colonne che vuoi aggiornare per rendere la query più chiara ed evitare aggiornamenti indesiderati.Usa indici sulle colonne di join: assicurati che le colonne usate nella condizione di
JOINsiano indicizzate per migliorare le prestazioni delJOINe il tempo complessivo di esecuzione della query.Considerazioni sulle prestazioni di SQL UPDATE con JOIN
Capire le implicazioni sulle prestazioni quando si usa
UPDATEconJOINin SQL è importante per assicurare che le query vengano eseguite in modo efficiente. Le prestazioni di queste operazioni possono essere influenzate da diversi fattori, tra cui la dimensione delle tabelle, il tipo di join utilizzato e la presenza di indici appropriati.Indici e velocità delle query
Indicizzare le colonne coinvolte nella condizione di join è importante per velocizzare il processo di aggiornamento. Quando indicizzi correttamente le colonne, l’operazione individua solo le righe corrispondenti durante il join, riducendo il tempo necessario per la scansione della tabella.
Impatto di dataset di grandi dimensioni
Quando lavori con dataset di grandi dimensioni, l’esecuzione delle query può essere più lenta a causa di operazioni ad alta intensità di risorse. Considera le seguenti best practice per mitigare i problemi di prestazioni con dataset grandi. Prova anche lo skill track SQL Server for Database Administrators se progetterai o manterrai database regolarmente come parte del tuo lavoro.
Aggiornamenti a batch: suddividi gli aggiornamenti in batch più piccoli per ridurre il carico sul database e aggiornare i record in modo efficiente.
Limita l’ambito dell’update: quando usi la clausola
WHERE, specifichi le righe da aggiornare, riducendo il tempo di elaborazione delle query.Errori comuni e come evitarli
Ci sono alcuni errori comuni che potresti incontrare quando usi
UPDATEconJOINin SQL Server. Questi errori possono portare a problemi di prestazioni o ad aggiornare dati non intenzionali. Di seguito alcuni di questi errori e come evitarli.Aggiornamenti non intenzionali
Se non specifichi correttamente la condizione di join, l’
UPDATEconJOINaggiornerà più record del previsto. Questo errore può aggiornare un’intera tabella invece del sottoinsieme richiesto. Per evitarlo, assicurati sempre di usare una condizione diJOINprecisa per aggiornare le righe necessarie.Prodotti cartesiani
Un prodotto cartesiano si verifica quando la condizione di join è errata o mancante, causando l’abbinamento di ogni riga della tabella di sinistra con ogni riga della tabella di destra. Questo problema può rallentare l’operazione della query e produrre risultati inaccurati. Per evitarlo, assicurati sempre di definire correttamente la condizione di
JOIN. Inoltre, indica le colonne corrette su cui applicare la condizione di join.Alternative a SQL UPDATE con JOIN
Sebbene l’
UPDATEconJOINsia un metodo potente per aggiornare record tra tabelle correlate, esistono metodi alternativi per ottenere lo stesso risultato. Ecco alcune opzioni.Sottoquery
Le sottoquery sono un’alternativa importante al
JOINquando vuoi eseguire aggiornamenti basati su una condizione semplice. Con le sottoquery eviti tabelle multiple complesse specificando la condizione nella sottoquery.L’esempio seguente mostra come usare una sottoquery per aggiornare la tabella
Salescon ilCustomerStatuspiù recente dalla tabellaCustomers.Istruzione MERGE
L’istruzione
MERGEè un comando SQL versatile che consente di eseguire operazioni diUPDATE,INSERToDELETEin un’unica query confrontando due tabelle. L’istruzioneMERGEè utile quando devi sincronizzare dati tra due tabelle, gestendo righe corrispondenti e non corrispondenti.Usare l’istruzione
MERGEè utile perché offre un metodo conciso per eseguire più operazioni in un’unica query. La sintassi dell’istruzioneMERGEè la seguente.Conclusione
Capire come usare
UPDATEconJOINin SQL Server è importante per aggiornamenti di dati tra tabelle efficienti nei database relazionali. Questa tecnica ti permette di aggiornare i record in una tabella in base ai dati corrispondenti in un’altra, garantendo coerenza e sincronizzazione dei dati tra tabelle correlate. Applicare queste tecniche e best practice può migliorare le operazioni sui database, assicurando una gestione dei dati accurata, efficiente e affidabile.Se vuoi far progredire le tue competenze SQL, ti consiglio lo skill track di DataCamp SQL Server Fundamentals per migliorare le tue capacità di analisi dei dati. Il corso Writing Functions and Stored Procedures in SQL Server ti aiuterà anche a imparare una manipolazione efficiente dei dati in SQL Server. Se ti stai preparando per un colloquio SQL, ti consiglio di leggere il nostro post sul blog, 20 Top SQL Joins Interview Questions, per aiutarti a prepararti. Infine, se vuoi applicare le tue competenze SQL in una carriera come data engineer, considera anche il nostro career track Data Engineer in Python, completo di certificazione finale.