Cum se utilizează funcția COALESCE în SQL Server

Ați întâlnit vreodată o situație în care trebuie să gestionați valorile NULL în interogările dvs.? De exemplu, este posibil să doriți să afișați o valoare implicită atunci când o coloană este NULL sau să combinați mai multe coloane într-una singură și să alegeți prima valoare non-NULL. În această postare pe blog, vă vom arăta cum să utilizați funcția COALESCE în SQL Server pentru a realiza aceste sarcini și multe altele.

Ce este funcția COALESCE?

Funcția COALESCE este o funcție încorporată în SQL Server care evaluează o listă de expresii și returnează prima care nu este NULL. Dacă toate expresiile sunt NULL, atunci funcția returnează NULL.

Sintaxa funcției COALESCE este:

COALESCE (expression1, expression2, ..., expressionN)

Expresiile pot fi de orice tip, dar trebuie să fie compatibile între ele. Tipul de date al rezultatului este determinat de expresia cu cea mai mare prioritate.

Cum se utilizează funcția COALESCE

Să vedem câteva exemple de utilizare a funcției COALESCE în SQL Server.

Exemplul 1: Afișați o valoare implicită când o coloană este NULL

Să presupunem că avem un tabel numit Products care stochează informații despre unele produse, cum ar fi numele, prețul și categoria acestora. Unele produse nu au o categorie atribuită, așa că coloana Category este NULL pentru ele.

Dacă dorim să afișăm produsele cu categoriile lor, dar înlocuim valorile NULL cu o valoare implicită, cum ar fi „Necunoscut”, putem folosi funcția COALESCE după cum urmează:

SELECT Name, Price, COALESCE(Category, 'Unknown') AS Category
FROM Products;

Rezultatul este:

După cum puteți vedea, funcția COALESCE returnează valoarea Category dacă nu este NULL, în caz contrar returnează „Necunoscut”.

Exemplul 2: combinați mai multe coloane într-una singură și alegeți prima valoare non-NULL

Să presupunem că avem un alt tabel numit Contacts care stochează informații despre anumite contacte, cum ar fi numele, e-mailul, telefonul și adresa lor. Unele persoane de contact nu au toate aceste detalii completate, așa că unele coloane sunt NULL pentru ele.

Dacă dorim să afișăm contactele cu metoda lor de contact preferată, care este prima valoare non-NULL dintre e-mail, telefon și adresă, putem folosi funcția COALESCE după cum urmează:

SELECT Name, COALESCE(Email, Phone, Address) AS PreferredContact
FROM Contacts;

Rezultatul este:

După cum puteți vedea, funcția COALESCE returnează prima valoare non-NULL dintre e-mail, telefon și adresă pentru fiecare contact.

Cum să gestionezi asta în mod vechi și ce oferă COALESCE

Înainte ca funcția COALESCE să fie introdusă în SQL Server, a trebuit să folosim alte metode pentru a gestiona valorile NULL în interogările noastre. De exemplu, am putea folosi funcția ISNULL sau expresia CASE.

Funcția ISNULL preia două argumente și returnează primul dacă nu este NULL, în caz contrar îl returnează pe al doilea. De exemplu:

SELECT Name, ISNULL(Category, 'Unknown') AS Category
FROM Products;

Această interogare produce același rezultat ca și utilizarea COALESCE cu două argumente. Cu toate acestea, există unele diferențe între ISNULL și COALESCE:

  • ISNULL acceptă doar două argumente, în timp ce COALESCE poate accepta orice număr de argumente.
  • ISNULL folosește tipul de date al primului argument pentru rezultat, în timp ce COALESCE urmează regulile expresiei CASE și returnează tipul de date al valorii cu cea mai mare prioritate.
  • ISNULL este evaluat o singură dată, în timp ce COALESCE poate fi evaluat de mai multe ori. Acest lucru poate afecta performanța și consistența rezultatelor, în special atunci când se utilizează subinterogări sau funcții nedeterministe.

Expresia CASE este o expresie condiționată care ne permite să efectuăm diferite acțiuni bazate pe diferite condiții. De exemplu:

SELECT Name, CASE WHEN Category IS NOT NULL THEN Category ELSE 'Unknown' END AS Category
FROM Products;w

Această interogare produce același rezultat ca și utilizarea COALESCE cu două argumente. Cu toate acestea, există câteva diferențe între CASE și COALESCE:

  • CASE este mai verbos și mai complex decât COALESCE, mai ales atunci când se ocupă cu mai multe expresii.
  • CASE poate gestiona logica și condiții mai complexe decât COALESCE, care verifică doar valorile NULL.
  • CASE și COALESCE pot avea implicații de performanță diferite în funcție de optimizatorul de interogări și de planul de execuție.

După cum puteți vedea, funcția COALESCE oferă o modalitate mai simplă și mai consistentă de a gestiona valorile NULL în SQL Server. De asemenea, este mai flexibil și compatibil decât funcția ISNULL sau expresia CASE.

Concluzie

În această postare pe blog, am învățat cum să folosim funcția COALESCE în SQL Server pentru a gestiona valorile NULL în interogările noastre. Am văzut câteva exemple despre cum să afișați o valoare implicită atunci când o coloană este NULL sau să combinați mai multe coloane într-una singură și să alegeți prima valoare non-NULL. De asemenea, am comparat funcția COALESCE cu alte metode precum ISNULL și CASE și am discutat despre avantajele și dezavantajele acestora.