Questo articolo mira ad aiutare i principianti a comprendere le basi della funzione T-SQL COALESCE e la sua applicazione per la gestione dei valori NULL. Inoltre, i lettori acquisiranno un'esperienza pratica implementando alcuni semplici esempi di questa funzione.
Sottolineeremo anche l'importanza delle funzioni T-SQL nella risoluzione dei problemi analitici del database.
Informazioni sulla funzione SQL COALESCE
Per prima cosa, proviamo a capire questa funzione dal punto di vista di un principiante SQL.
Cos'è la funzione SQL COALESCE?
È una funzione T-SQL che accetta molti input ma restituisce il primo valore di input che NON è NULL .
Qual è l'input?
Un input (chiamato anche argomento) può essere qualsiasi cosa fornita a una funzione richiesta da quella funzione per svolgere il suo lavoro.
ad esempio, abbiamo una funzione chiamata SOMMA() , che aggiunge due numeri qualsiasi X e S . Questi numeri sono input o argomenti della funzione.
Un input o un argomento può essere un'espressione.
Cos'è un'espressione?
Un'espressione può essere una costante, una variabile o una colonna che alla fine restituisce un singolo valore di dati.
Tuttavia, siamo particolarmente concentrati sulle colonne dal punto di vista del database, che possono contenere o meno valori.
Che cos'è un valore nullo?
Qualsiasi valore ancora da assegnare alla colonna di una tabella è NULL valore. In altre parole, NULL indica un valore non inizializzato di una colonna nella tabella .
Che cos'è un valore NOT NULL?
È l'opposto del valore NULL. Se il valore NULL è un valore di colonna non assegnato o non inizializzato, il valore NON NULL è un valore di colonna assegnato o inizializzato .
ad esempio, abbiamo due colonne, ExamId e Risultato dell'esame , in una tabella.
Un utente imposta ExamId=1 , ma non fornisce alcun valore a ExamResult colonna. Quindi Risultato dell'esame avrà NULL in esso. In alternativa, ExamId ha NON NULL valore perché è 1.
Come funziona la funzione COALESCE?
È una funzione che mostra il primo valore NOT NULL della colonna nell'elenco delle colonne passate a questa funzione. Tuttavia, possiamo passare a questa funzione qualsiasi insieme di espressioni, che può essere un elenco delle colonne della tabella o un semplice insieme di numeri (costanti) o variabili.
Sintassi
La sintassi SQL della funzione COALESCE (come da documentazione Microsoft) è la seguente:
COALESCE ( expression [ ,...n ] )
Abbiamo già definito un'espressione in modo che possa accettare qualsiasi numero di espressioni dello stesso tipo.
Compatibilità
Secondo la documentazione Microsoft, questa funzione è compatibile con molte tecnologie Microsoft SQL, incluse le seguenti:
- Tutte le versioni supportate di SQL Server.
- Database SQL di Azure (versione cloud di SQL Server).
Nota che ho deliberatamente escluso alcune altre tecnologie di SQL Server per mantenere il contesto semplice.
Semplici esempi della funzione COALESCE
Impostiamo un database di esempio in cui possiamo eseguire i nostri esempi. Crea un nuovo database chiamato "CoalesceDB" per eseguire i tuoi esempi su di esso. Usa il seguente codice:
-- Create sample database
Create DATABASE CoalesceDB;
GO
Esempio "Numero con NULL"
Se passiamo un numero e un valore NULL alla funzione COALESCE in qualsiasi ordine, restituirà il numero perché è il primo valore NOT NULL .
Utilizzare lo script T-SQL sul database di esempio come segue:
-- Use the sample database
USE CoalesceDB
-- Simple COALESCE example with number and NULL inputs (arguments)
SELECT COALESCE(NULL,1) as COALESCE_Result
Dovresti ottenere i seguenti risultati:
Se invertiamo l'ordine degli argomenti in modo tale che il numero 1 venga prima e NULL diventa il secondo argomento, otteniamo comunque lo stesso risultato:
-- Simple COALESCE example with Number and NULL while number being first input (arguments)
SELECT COALESCE(1,NULL) as COALESCE_Result_Number_First
Esempio "Stringa con NULL"
Qui passeremo una stringa (dati di tipo carattere) e un NULL a questa funzione per vedere i risultati. Esegui il seguente script:
-- Simple COALESCE example with string and NULL inputs (arguments)
SELECT COALESCE(NULL,'Second input') as COALESCE_Result
I risultati sono di seguito:
Allo stesso modo, invertendo l'ordine otterremo gli stessi risultati dell'esempio precedente.
Esempio "Due numeri e un NULL"
Vediamo il comportamento della funzione COALESCE se forniamo i tre input (argomenti), inclusi due numeri e un valore NULL, a questa funzione.
Eseguire lo script seguente per l'esempio con due numeri e un valore NULL:
-- Simple COALESCE example with two numbers and NULL inputs (arguments)
SELECT COALESCE(NULL,2,3) as COALESCE_Result
L'output è il seguente:
Dal primo Il valore NOT Null è 2 , la funzione COALESCE lo ha restituito, ignorando il valore successivo.
Invertiamo ora l'ordine dei numeri nell'elenco degli argomenti con il seguente script:
-- Simple COALESCE example with two numbers reversed and NULL inputs (arguments)
SELECT COALESCE(NULL,3,2) as COALESCE_Result
Il set di risultati è il seguente:
Esempio "Numero, stringa e NULL"
Qui mescoliamo i tipi di argomento inserendo un numero, una stringa e un valore NULL. Digita il seguente codice:
-- Simple COALESCE example with one number one string and NULL inputs (arguments)
SELECT COALESCE(NULL,1,'Home') as COALESCE_Result
I risultati sono i seguenti:
Sebbene la funzione COALESCE mostri i risultati corretti, prelevando il primo valore NOT NULL, che è 1, non è un buon esempio. Dovremmo fornire lo stesso tipo di argomenti. Sono numeri o caratteri o qualsiasi altro tipo di espressione.
Se forniamo la stringa 'Home' come primo argomento e il numero 1 come secondo argomento, si verificherà un errore. Ecco perché le espressioni dovrebbero essere dello stesso tipo.
Proviamo questo scambiando i due argomenti NOT NULL:
-- Simple COALESCE example with one number one string first and NULL inputs (arguments)
SELECT COALESCE(NULL,'Home',1) as COALESCE_Result
L'output è il seguente:
Esempio "Due stringhe con un NULL"
Se inseriamo un valore NULL seguito da due valori stringa, restituirà la prima stringa perché NON è NULL. Lascerà fuori il secondo. Esegui il seguente script per vederlo in azione:
-- Simple COALESCE example with two strings and NULL inputs (arguments)
SELECT COALESCE(NULL,'Home','Office') as COALESCE_Result
Il set di risultati è il seguente:
L'esempio precedente dimostra che risultati accurati richiedono di fornire lo stesso tipo di argomenti alla funzione COALESCE. Un argomento stesso può essere un numero, una stringa, una variabile o una colonna della tabella.
Esempi di casi reali
Ora prendiamo un semplice scenario reale della funzione COALESCE che gestisce efficacemente i valori NULL.
Un'azienda fornitrice di servizi IT archivia i dettagli dei propri clienti, che rientrano nelle due categorie seguenti:
- Clienti commerciali.
- Clienti individuali.
Un cliente business è un cliente che rappresenta un'azienda. Effettuano ordini per conto dell'azienda (business). Un singolo cliente è una persona che ordina i servizi personalmente e per uso personale.
I contatti dei clienti aziendali si trovano nella tabella Cliente nella colonna Work_Email. Gli indirizzi email dei clienti personali si trovano nella colonna Personal_Email della tabella.
Pertanto, compila la colonna Work_Email o Personal_Email per ciascun cliente, a seconda del tipo.
Crea la tabella clienti
Creeremo una tabella chiamata "Cliente" nel database di esempio CoalesceDB. Digita il seguente script:
-- Using the sample database
Use CoalesceDB
-- Create Customer table
CREATE TABLE Customer
(CustomerId INT IDENTITY(1,1),
Work_Email VARCHAR(250) NULL,
Personal_Email VARCHAR(250) NULL,
CONSTRAINT [PK_Customer] PRIMARY KEY ([CustomerId])
)
Popolare la tabella dei clienti
Popoliamo la tabella dei clienti utilizzando il seguente script:
-- Using the sample database
Use CoalesceDB
-- Populate Customer table
INSERT INTO Customer
(Work_Email,Personal_Email)
values
('[email protected]',NULL),
(NULL,'[email protected]'),
(NULL,'[email protected]'),
('[email protected]',NULL),
('[email protected]',NULL),
(NULL,'[email protected]')
-- Important: Please note the above email addresses are for demo purposes only
Visualizza la tabella dei clienti
Esegui il seguente script:
-- View customer table
SELECT [CustomerId], [Work_Email], [Personal_Email] FROM dbo.Customer
L'output è il seguente:
Visualizzazione di tutti i contatti disponibili utilizzando COALESCE
Ora, se vorremmo vedere tutti i contatti disponibili di tutti i clienti, ignorando i NULL, possiamo ottenere ciò utilizzando la funzione COALESCE come segue:
--Viewing all available contacts using COALESCE
SELECT C.CustomerId,COALESCE(Work_Email,Personal_Email) AS Email
FROM dbo.Customer C
I risultati sono:
Cose da fare
Congratulazioni! Hai le basi della funzione COALESCE e ne comprendi l'uso nella gestione efficace dei valori NULL.
Ora potresti voler addestrare ulteriormente le nuove abilità:
- Prova a creare e popolare altre due colonne, Telefono_lavoro e Telefono_personale, nella tabella Cliente. Verifica se riesci a gestire i valori NULL in queste colonne usando l'esempio di casi reali.
- Prova a creare una vista SQL per mostrarti tutti i contatti email disponibili dei clienti.
- Prova a trasferire tutte e quattro le colonne (Work_Email, Personal_Email, Work_Phone e Personal_Phone) nella funzione. Ovviamente, devi assicurarti che abbiano tutti lo stesso tipo di dati. Guarda tu stesso i risultati.
Leggi anche
Un uso pratico della funzione SQL COALESCE
Le migliori risposte a 5 domande scottanti sulla funzione SQL COALESCE