Test di accettazione da parte dell’utente (UAT): processo, lista di controllo ed esempi reali

  1. Home
  2. Blog
  3. Test del software

Test del software

Test di accettazione da parte dell’utente (UAT): Processo, lista di controllo ed esempi reali

Il software può superare ogni test e tuttavia fallire le persone che ne hanno bisogno. L’UAT è il controllo finale che risolve il vero problema aziendale. Scopri chi dovrebbe gestirlo, come pianificarlo e quando approvarlo.

9 min di lettura
Test di accettazione dell'utente (UAT): processo, checklist ed esempi reali

Punti chiave

  • Test di accettazione da parte dell’utente verifica che il software soddisfi le reali esigenze aziendali, utilizzando scenari reali.
  • È gestito da utenti aziendali o clienti, non dal team che ha creato il software.
  • Il QA chiede “funziona come specificato?”, mentre l’UAT chiede “risolve il problema?”.
  • Concordare i criteri di ingresso, i criteri di uscita e chi approva prima dell’inizio dell’UAT.

Un team una volta fornisce un sistema di spesa che supera tutti i test tecnici. Il primo giorno, il team finanziario scopre di non essere in grado di gestire sinistri multivaluta, che costituiscono gran parte del loro lavoro. Non c’era nulla di “rotto”, ma non era utilizzabile. I test di accettazione da parte degli utenti esistono per individuare esattamente questo tipo di lacuna prima del lancio.

Questa guida spiega in che modo UAT differisce da altri test, come eseguirlo passo dopo passo e come decidere quando sei pronto per il rilascio. Lo scenario riportato sopra e gli esempi riportati di seguito sono illustrativi e il processo dovrebbe essere adattato al tuo progetto.

Cos’è l’UAT?

L’UAT è solitamente la fase di test finale prima del rilascio, in cui gli utenti previsti confermano che il software può svolgere il proprio lavoro in condizioni realistiche. Viene anche chiamato test dell’utente finale o test di accettazione. Viene dopo lo sviluppo e il test del sistema, quando ci si aspetta che il prodotto sia stabile.

Il suo scopo non è trovare tutti i bug. A questo punto, la maggior parte di questi dovrebbe già essere sparita. Lo scopo è la validazione: abbiamo costruito la cosa giusta? I tester verificano che il prodotto corrisponda alle specifiche. L’UAT verifica che le specifiche e il prodotto soddisfino effettivamente l’esigenza.

Test UAT e QA

Aspetto QA o test di sistema UAT
Domanda principale Funziona come specificato? Soddisfa le esigenze aziendali?
Eseguito da Tester e ingegneri del controllo qualità Utenti o clienti aziendali
Tempistica Durante e dopo lo sviluppo Poco prima del rilascio
Basato su Requisiti e progetti Flussi di lavoro aziendali reali
Concentrarsi Difetti, casi limite, integrazioni Usabilità e idoneità allo scopo
Conoscenza tecnica Spesso alto Non necessario
Risultato Segnalazioni di bug Accettazione o rifiuto

L’UAT non sostituisce altri test. Se gli utenti continuano a riscontrare bug di base, la build non era pronta e stai sprecando il loro tempo limitato. Questi problemi appartengono ai livelli di test precedenti e ai test di regressione.

Chi gestisce l’UAT?

Ruolo Responsabilità
Utenti finali Esegui scenari e fornisci feedback
Proprietario del prodotto o analista aziendale Definisce l’ambito e scrive o esamina gli scenari
Coordinatore UAT o responsabile del QA Pianifica le sessioni, supporta i tester, tiene traccia dei problemi
Sviluppatori Risolvi i problemi e rispondi a domande tecniche
Sponsor aziendale Prende la decisione finale di approvazione

Scegli i tester che svolgono davvero il lavoro oggi. Un gestore esperto dei sinistri individuerà i problemi che un manager o un delegato non vedrebbero mai. Includere una vasta gamma di esperienze, perché un nuovo dipendente spesso rivela passaggi confusi che un esperto aggira senza accorgersene. E assicurati che i loro manager abbiano tempo a disposizione per questo, poiché l’UAT non può avere successo con un carico di lavoro completo.

Tipi di UAT

Digitare Cosa controlla Esempio
Accettazione aziendale Soddisfa gli obiettivi aziendali Il personale completa un reclamo reale dall’inizio alla fine
Test alfa Test interni in un ambiente controllato Il personale prova una nuova app prima degli utenti esterni
Beta test Clienti reali in condizioni reali Un’anteprima pubblica limitata
Accettazione del contratto Rispetta i termini contrattuali concordati Un cliente verifica un sistema consegnato
Accettazione normativa Soddisfa le norme legali o di conformità Controlla le regole sanitarie o bancarie
Accettazione operativa Pronto per entrare in produzione Backup, monitoraggio e processi di supporto

Il processo UAT in sette fasi

1. Definire ambito e obiettivi

Decidi cosa viene accettato, cosa non rientra nell’ambito e quali risultati aziendali contano. Ad esempio: “Il personale finanziario può inviare, approvare e pagare una richiesta di spesa, in qualsiasi valuta supportata.”

2. Concordare i criteri di accettazione

Scrivi in un linguaggio semplice come si presenta il successo, idealmente all’inizio del progetto piuttosto che una settimana prima del lancio. Criteri vaghi portano poi a discussioni.

3. Scegli e istruisci i tester

Seleziona gli utenti reali, spiega lo scopo, mostra loro come registrare il feedback e chiarisci che stanno testando il software anziché essere testati da soli. Molte persone temono di sbagliare qualcosa.

4. Preparare l’ambiente e i dati

L’ambiente UAT dovrebbe assomigliare alla produzione il più fedelmente possibile. Utilizza dati realistici, imposta i ruoli utente corretti e controlla le integrazioni come la posta elettronica. Se copi i dati di produzione, maschera prima le informazioni personali. Esegui un rapido test del fumo, in modo che i tester non arrivino e trovino una build rotta.

5. Scrivi scenari

Basateli su flussi di lavoro reali piuttosto che su singoli pulsanti. Dovrebbero essere letti come il lavoro, non come il software. La nostra guida al caso di test e scenario di test spiega quanti dettagli ti servono.

6. Esegui i test e raccogli feedback

Esegui sessioni con qualcuno disponibile ad aiutarti. Raccogli i problemi in un unico posto, con screenshot. Lascia anche un po’ di tempo per l’esplorazione libera, poiché le persone provano cose che gli script non prevedono mai. I test esplorativi offrono tecniche utili a questo scopo.

7. Correggere, ripetere il test e approvare

Valuta il feedback, risolvi ciò che conta e chiedi agli stessi utenti di confermare le correzioni. Quindi registrare una decisione formale.

Un caso di prova UAT

Un caso di test UAT dovrebbe essere facile da seguire per qualcuno non tecnico. Ecco un esempio di sistema di spesa:

ID:        UAT-012
Scenario:  Submit a foreign currency expense claim
User role: Sales employee
Before:    Logged in, with a USD receipt ready

Steps:
  1. Create a new expense claim
  2. Enter a client dinner of 80 USD and attach the receipt
  3. Submit the claim for approval

Expected:  The amount is converted to INR at the current rate
           The manager receives an approval request
           The claim shows as "Awaiting approval"

Result:    Pass / Fail
Comments:
Tester / Date:

Tieni presente che descrive un compito reale, non dettagli tecnici, e che lascia spazio a commenti. Questi commenti spesso si rivelano la parte più preziosa, come “funziona, ma non troverei mai quel pulsante”.

Suggerimento: guarda almeno un utente mentre esegue questa operazione di persona o durante una chiamata. Le persone spesso aggirano software confusi e non lo segnalano mai. Vederli esitare ti dice più di quanto potrà mai fare un “Promosso”.

Criteri di entrata e di uscita

Criteri di ammissione (pronti per iniziare) Criteri di uscita (pronti per finire)
Il test del sistema è completo Tutti gli scenari critici sono stati eseguiti
Nessun bug critico o elevato aperto Nessun bug critico aperto
L’ambiente e i dati sono pronti Il tasso di successo concordato è stato raggiunto
Si esaminano gli scenari Le restanti questioni hanno un piano concordato
I tester sono informati e disponibili Lo sponsor aziendale ha firmato

Questi si inseriscono nel più ampio ciclo di vita dei test del software. Stabilisci in anticipo i numeri con i tuoi stakeholder. “Decideremo quando lo riterremo opportuno” tende a portare a un sì affrettato, spinto dalla scadenza.

Gestire il feedback

Il feedback UAT è un misto di cose e non tutto è un bug. Ordinalo in categorie:

Digitare Esempio Azione abituale
Difetto Il totale è calcolato in modo errato Correzione, in base alla gravità
Requisito mancato La multivaluta non è supportata Risolvilo prima del lancio o riprogrammalo
Problema di usabilità Gli utenti non riescono a trovare il pulsante di invio Spesso vale la pena aggiustarlo
Richiesta di modifica “Potrebbe anche esportare in PDF?” Aggiungi all’arretrato
Questione di formazione La funzionalità funziona, ma è stata fraintesa Guide di aggiornamento

Utilizza regole chiare per ciò che blocca un rilascio, come descritto in gravità e priorità. E rispondi a ogni articolo, compresi quelli che rifiuti. Le persone smettono di dare feedback se sembra scomparire. La nostra guida su come scrivere una segnalazione di bug può aiutare i tester a descrivere chiaramente i problemi.

Lista di controllo UAT

Prima dell’UAT

  • La portata e i criteri di accettazione vengono concordati per iscritto
  • I test di sistema e di regressione sono terminati
  • I tester vengono scelti, informati e hanno tempo
  • Ambiente, conti e dati realistici sono pronti
  • I dati personali nelle copie sono stati mascherati
  • Gli scenari vengono esaminati dall’azienda
  • È impostato un luogo in cui registrare i problemi
  • Viene nominato il proprietario dell’autorizzazione

Durante l’UAT

  • È disponibile un contatto di supporto
  • I problemi vengono valutati ogni giorno
  • I progressi sono condivisi con le parti interessate
  • Le correzioni vengono implementate e testate nuovamente in modo controllato

Dopo l’UAT

  • I criteri di uscita sono stati controllati
  • I problemi noti sono documentati con i proprietari
  • Viene registrata la firma formale
  • Le note sulla formazione e sulla versione vengono aggiornate
  • Si è tenuta una breve retrospettiva

UAT nei team Agile

L’UAT tradizionale si presenta come una grande fase finale, in cui una sorpresa è costosa. I team agili accorciano questo ciclo. I proprietari del prodotto esaminano ogni storia rispetto ai criteri di accettazione durante lo sprint e gli utenti vedono il software funzionante durante le revisioni dello sprint. Molti team eseguono ancora una UAT mirata prima di una versione importante, in particolare quando diverse funzionalità si combinano in un unico flusso di lavoro.

Con rilasci frequenti, tecniche come i flag di funzionalità e le distribuzioni canary consentono agli utenti reali di provare gradualmente il nuovo lavoro. Si noti che questi completano i test di accettazione, ma non li sostituiscono automaticamente, soprattutto nei settori regolamentati che necessitano di una registrazione formale.

Errori comuni

  • Trattandolo come una formalità. Un’approvazione senza utilità reale non protegge nessuno.
  • Utilizzare i tester sbagliati. Gli sviluppatori e il QA hanno troppa conoscenza del sistema per rappresentare gli utenti.
  • Iniziare con una build instabile. I tester perdono fiducia e interesse rapidamente.
  • Lasciarlo fino all’ultimo minuto. Quindi non c’è tempo per correggere ciò che impari.
  • Utilizzo di dati non realistici. I dati dei test raramente presentano i casi disordinati tipici del lavoro reale.
  • Lasciare che la portata cresca. Tratta le nuove idee come richieste di modifica, a meno che non siano veri e propri ostacoli.

Considerazioni finali

L’UAT è la tua ultima possibilità per sapere, prima del rilascio, se il software aiuta davvero le persone che lo utilizzeranno. Pianificalo dall’inizio di un progetto, recluta utenti reali e concorda come sarà il successo. Per la tua prossima versione, prova un semplice cambiamento: siediti con un utente durante uno scenario reale e non dire nulla mentre lavora.

Domande frequenti

Cos’è il test di accettazione degli utenti in parole semplici?

È il controllo finale in cui gli utenti reali provano il software con compiti realistici per verificare che soddisfi le loro esigenze, prima che venga rilasciato.

Chi è responsabile dell’UAT?

Gli utenti aziendali o i clienti eseguono i test. Un proprietario del prodotto o un responsabile del QA di solito coordina e uno sponsor aziendale in genere prende la decisione finale di approvazione.

Qual è la differenza tra UAT e test di sistema?

Il test del sistema verifica che il software funzioni come specificato e viene eseguito dai tester. L’UAT verifica che soddisfi le esigenze aziendali e venga eseguito dagli utenti.

Quando avviene l’UAT?

Di solito dopo il test del sistema e prima del rilascio in produzione, una volta che il software è stabile. I team agili possono anche eseguire controlli di accettazione più piccoli in ogni sprint.

L’UAT può essere automatizzato?

Parti di esso, come controlli ripetuti dei flussi di lavoro aziendali. Tuttavia, per giudicare se il software sia utile e adatto allo scopo sono ancora necessarie persone reali.

Continua a imparare

Lavora con Stack Quora

Hai bisogno di aiuto con test, WordPress o SEO?

Aiutiamo i team a fornire software migliore e a far crescere i loro siti. Raccontaci a cosa stai lavorando e ti suggeriremo chiaramente il prossimo passo.

Continua a leggere

Altre guide su test, intelligenza artificiale e sviluppo moderno

Ti è piaciuto questo articolo? Scegli un argomento e passa direttamente ai nostri tutorial più recenti.

Intelligenza artificiale

Spiegazione delle allucinazioni dell'intelligenza artificiale: perché i modelli linguistici inventano le cose e come ridurle

Spiegazione delle allucinazioni dell'intelligenza artificiale: cosa sono, perché i modelli linguistici le producono, tipi comuni, come ridurle con b…

Leggi l'articolo →
DevOps

Spiegazione delle variabili d'ambiente: file .env, segreti e configurazione eseguiti correttamente

Variabili d'ambiente spiegate con esempi Python che abbiamo eseguito: lettura e impostazione, perché ogni valore è una stringa, file .env, ereditari…

Leggi l'articolo →
Sviluppo software

Spiegazione della limitazione della velocità API: algoritmi, intestazioni e gestione degli errori 429

La limitazione della velocità dell'API spiegata con una simulazione che abbiamo eseguito: bucket di token, finestra fissa, finestra scorrevole, risp…

Leggi l'articolo →
Automazione dei test

Derisione in Python: unittest.mock, patch e gli errori che fanno mentire i test

Mocking in Python con unittest.mock, testato: Mock e return_value, side_effect, patch dove viene utilizzato un nome, specifiche e autospec, date moc…

Leggi l'articolo →
Test del software

Spiegazione della copertura del codice: copertura di linea o di filiale e cosa significa realmente il 100%.

Copertura del codice spiegata con una vera esecuzione di cover.py: copertura di linea, ramo e condizione, lettura di un rapporto, perché la copertur…

Leggi l'articolo →
Database e SQL

DELETE vs TRUNCATE vs DROP in SQL: differenze, rollback e quando utilizzarli

DELETE vs TRUNCATE vs DROP spiegato con SQL testato: cosa rimuove, rollback, trigger, reimpostazione dell'identità, velocità e come differiscono Pos…

Leggi l'articolo →
Database e SQL

Spiegazione delle visualizzazioni SQL: crea, utilizza ed evita le insidie, con esempi

Viste SQL spiegate con le query che abbiamo eseguito: creazione di una vista, risultati in tempo reale, nascondere colonne, prestazioni, viste aggio…

Leggi l'articolo →
Sviluppo software

Interfaccia TypeScript e tipo: differenze reali, testate con il compilatore

Interfaccia TypeScript vs tipo, verificata con il vero compilatore: cosa possono fare entrambi, cosa può fare solo uno, fusione delle dichiarazioni,…

Leggi l'articolo →
Sviluppo software

Spiegazione di Python *args e **kwargs: funzioni flessibili con esempi chiari

Python *args e **kwargs spiegati con il codice che abbiamo eseguito: compressione e decompressione, ordine dei parametri, argomenti solo per parole …

Leggi l'articolo →
Sviluppo software

Funzioni Lambda Python: sintassi, usi reali e quando non usarli

Funzioni lambda Python spiegate con il codice che abbiamo eseguito: sintassi, ordinamento con chiave, mappa e filtro, chiusure, trap dell'associazio…

Leggi l'articolo →
Intelligenza artificiale

Cosa sono gli agenti AI? Come funzionano, con un semplice ciclo di agenti che puoi eseguire

Cosa sono gli agenti IA? Una semplice guida al ciclo dell'agente, agli strumenti, alla memoria e ai guardrail, con un piccolo ciclo Python che abbia…

Leggi l'articolo →
DevOps

Monitoraggio vs osservabilità: la vera differenza, con log, metriche e tracce

Spiegazione del monitoraggio e dell'osservabilità: errori noti e sconosciuti, log, metriche e tracce, una procedura dettagliata sugli incidenti di p…

Leggi l'articolo →
DevOps

Volumi Docker e montaggi di associazione: mantenere i dati del contenitore nel modo giusto

Volumi Docker e montaggi di collegamento spiegati: perché i dati del contenitore scompaiono, volumi denominati, montaggi di collegamento, tmpfs, ese…

Leggi l'articolo →
Automazione dei test

TDD vs BDD: differenze chiave, una caratteristica costruita in entrambi i modi e quando utilizzarli ciascuno

TDD vs BDD spiegato con una funzione di sconto costruita in entrambi i modi: refactoring rosso-verde con il codice che abbiamo eseguito, scenari "Da…

Leggi l'articolo →
Test del software

Test di accettazione da parte dell'utente (UAT): processo, lista di controllo ed esempi reali

Spiegazione del test di accettazione dell'utente: chi lo esegue, in cosa differisce dal QA, un processo in sette fasi, un modello di test case UAT, …

Leggi l'articolo →
Database e SQL

Spiegazione dei valori SQL NULL: IS NULL, COALESCE, NULLIF e le trappole da evitare

Valori SQL NULL spiegati con le query che abbiamo eseguito: logica a tre valori, IS NULL, COALESCE, NULLIF, come aggregazioni, join e ordinamento tr…

Leggi l'articolo →
Database e SQL

Istruzione SQL CASE WHEN: sintassi, esempi reali ed errori comuni

SQL CASE WHEN spiegato con le query che abbiamo eseguito: moduli semplici e cercati, ordine delle condizioni, pivot con SUM, trucchi COUNT, ordiname…

Leggi l'articolo →
Sviluppo software

Cos'è il JWT? Token Web JSON spiegati con un esempio funzionante

Cos'è il JWT? Spiegazione dei token Web JSON: le tre parti, un token creato e manomesso nel codice che abbiamo eseguito, JWT e sessioni, archiviazio…

Leggi l'articolo →
Sviluppo software

Spiegazione del loop di eventi JavaScript: stack di chiamate, microtask e timer con esempi

Il ciclo di eventi JavaScript spiegato con il codice che abbiamo eseguito: stack di chiamate, code di attività e microtask, perché setTimeout 0 non …

Leggi l'articolo →
Sviluppo software

Spiegazione dei generatori Python e del rendimento: risparmia memoria con esempi reali

Generatori Python e rendimento spiegati con il codice che abbiamo eseguito: come vengono messi in pausa e ripresi, misurato il risparmio di memoria,…

Leggi l'articolo →
Intelligenza artificiale

Cosa sono gli incorporamenti? I vettori e la somiglianza del coseno spiegati semplicemente

Cosa sono gli incorporamenti? Una guida in linguaggio semplice ai vettori, alla similarità del coseno e alla ricerca semantica, con un piccolo esemp…

Leggi l'articolo →
DevOps

Distribuzione blu-verde rispetto a quella canaria: differenze, compromessi e come scegliere

Spiegazione della distribuzione blu-verde e canary: come funziona ciascuna, costi, rischi e rollback, bucket utente stabile che abbiamo testato, mig…

Leggi l'articolo →
Automazione dei test

Test instabili: quali sono le cause e come risolverli definitivamente

Test instabili spiegati con demo che abbiamo eseguito: le cause principali, come confermarne e diagnosticarne uno, soluzioni adeguate per tempistich…

Leggi l'articolo →
Test del software

Test di carico e test di stress: differenze, metriche ed esempi k6

Spiegazione del test di carico e dello stress test: cosa dimostra ciascuno, test di picco e di assorbimento, le metriche che contano, perché le medi…

Leggi l'articolo →
Test del software

Caso di test e scenario di test: differenze chiave, esempi e quando utilizzarli

Spiegazione del caso di test e dello scenario di test: definizioni chiare, una tabella affiancata, una funzione di reimpostazione della password pre…

Leggi l'articolo →
Database e SQL

Ottimizzazione delle query SQL: leggi i piani di esecuzione e correggi query lente, con tempistiche

Ottimizzazione delle query SQL testata su un milione di righe: leggi i piani di esecuzione, aggiungi gli indici corretti, correggi filtri non aggior…

Leggi l'articolo →
Database e SQL

SQL UNION vs UNION ALL: differenze, esempi e prestazioni testate

SQL UNION vs UNION ALL spiegati con le query che abbiamo eseguito: duplicati, regole seguite da entrambi, un vero bug di dati, prestazioni misurate,…

Leggi l'articolo →
Sviluppo software

Tutorial sull'API di recupero JavaScript: GET, POST, gestione degli errori e timeout

Un tutorial sull'API JavaScript Fetch testato su un server locale: GET e POST, perché 404 non genera eccezioni, un helper riutilizzabile, stringhe d…

Leggi l'articolo →
Sviluppo software

Gestione dei file Python: lettura, scrittura, CSV, JSON e pathlib con esempi

Gestione dei file Python spiegata con il codice che abbiamo eseguito: modalità aperte, con, lettura di file di grandi dimensioni, CSV, JSON, pathlib…

Leggi l'articolo →
Sviluppo software

Classi e oggetti Python: tutorial OOP con esempi reali

Classi e oggetti Python spiegati con il codice che abbiamo eseguito: __init__, metodi, attributi di classe e istanza, ereditarietà, proprietà, metod…

Leggi l'articolo →
Intelligenza artificiale

Che cos'è un modello linguistico di grandi dimensioni? Come funzionano i LLM, spiegato senza esagerazioni

Cos’è un modello linguistico ampio? LLM spiegati in un linguaggio semplice: token, incorporamenti, attenzione, formazione, finestre di temperatura e…

Leggi l'articolo →
DevOps

Comandi Linux per principianti: la guida essenziale del terminale con esempi

Comandi Linux per principianti, raggruppati per attività: navigazione, file, visualizzazione log, grep, pipe, permessi, processi e archivi, con un e…

Leggi l'articolo →
Automazione dei test

Selenio vs drammaturgo: differenze chiave, codice a confronto e quale scegliere

Selenium vs Playwright a confronto: architettura, attesa, supporto per browser e linguaggio, debug, lo stesso test in entrambi gli strumenti, consig…

Leggi l'articolo →
Test del software

Partizionamento di equivalenza: tecnica di progettazione dei test spiegata con esempi pratici

Spiegazione del partizionamento di equivalenza: come trovare partizioni valide e non valide, esempi funzionanti per età, password e coupon, test che…

Leggi l'articolo →
Test del software

Gravità vs priorità nel test del software: differenze, matrice ed esempi reali

Spiegazione della gravità e della priorità nei test del software: definizioni chiare, una matrice a quattro vie con esempi, scale di livello, chi im…

Leggi l'articolo →
Database e SQL

Esercitazione sulle sottoquery SQL: tipi, sottoquery correlate ed EXISTS con esempi

Un tutorial sulle sottoquery SQL con le query che abbiamo eseguito: sottoquery scalari, IN, FROM e SELECT, sottoquery correlate, EXISTS, trap NOT IN…

Leggi l'articolo →
Database e SQL

Spiegazione di transazioni SQL e ACID: COMMIT, ROLLBACK e livelli di isolamento

Transazioni SQL e ACID spiegate con un bonifico bancario eseguito: COMMIT, ROLLBACK, punti di salvataggio, blocchi, livelli di isolamento, letture s…

Leggi l'articolo →
Sviluppo software

Git merge vs rebase: differenze, esempi e quando usare ciascuno

Git merge vs rebase spiegato con output reale del log, una tabella di confronto, la regola d'oro del rebase e un flusso di lavoro sicuro per i team.

Leggi l'articolo →
Sviluppo software

List comprehension in Python: sintassi, esempi e quando evitarla

List comprehension in Python spiegata: sintassi, filtri, if-else, cicli annidati, tempi misurati e i casi in cui un normale ciclo for è meglio.

Leggi l'articolo →
Database e SQL

SQL JOIN spiegati con esempi (Inner, Left, Right, Full)

Capisci i JOIN SQL passo dopo passo con tabelle e query di esempio: INNER, LEFT, RIGHT, FULL, CROSS e SELF, con errori comuni e consigli sulle prest…

Leggi l'articolo →