Database
 sql >> Baza danych >  >> RDS >> Database

Skuteczna obsługa wartości NULL za pomocą funkcji SQL COALESCE dla początkujących

Ten artykuł ma na celu pomóc początkującym zrozumieć podstawy funkcji T-SQL COALESCE i jej zastosowania do obsługi wartości NULL. Dodatkowo czytelnicy zdobędą praktyczne doświadczenie, implementując kilka prostych przykładów tej funkcji.

Podkreślimy również znaczenie funkcji T-SQL w rozwiązywaniu problemów analitycznych z bazami danych.

Informacje o funkcji SQL COALESCE

Najpierw spróbujmy zrozumieć tę funkcję z punktu widzenia początkującego użytkownika SQL.

Co to jest funkcja SQL COALESCE?

Jest to funkcja T-SQL, która akceptuje wiele danych wejściowych, ale zwraca pierwszą wartość wejściową, która NIE JEST NULL .

Co to jest dane wejściowe?

Wejściem (zwanym również argumentem) może być wszystko, co zostało dostarczone do funkcji wymaganej przez tę funkcję do wykonania jej zadania.

np. Mamy funkcję o nazwie SUM() , który dodaje dowolne dwie liczby X i T . Te liczby są danymi wejściowymi lub argumentami funkcji.

Wejście lub argument może być wyrażeniem.

Co to jest wyrażenie?

Wyrażenie może być stałą, zmienną lub kolumną, która ostatecznie zwraca pojedynczą wartość danych.

Jednak jesteśmy szczególnie skoncentrowani na kolumnach z perspektywy bazy danych, które mogą zawierać wartości lub nie.

Co to jest wartość Null?

Każda wartość, która ma zostać przypisana do kolumny tabeli, to NULL wartość. Innymi słowy, NULL oznacza niezainicjowaną wartość kolumny w tabeli .

Co to jest wartość NIEZEROWA?

Jest to przeciwieństwo wartości NULL. Jeśli wartość NULL jest nieprzypisaną lub niezainicjowaną wartością kolumny, wartość NOT NULL jest przypisaną lub zainicjowaną wartością kolumny .

np. mamy dwie kolumny, Id egzaminu i Wynik egzaminu , w tabeli.

Użytkownik ustawia ExamId=1 , ale nie dostarcza żadnej wartości do ExamResult kolumna. Następnie Wynik egzaminu będzie miał w nim NULL. Alternatywnie Id egzaminu ma NIE NULL wartość, ponieważ wynosi 1.

Jak działa funkcja COALESCE?

Jest to funkcja, która pokazuje pierwszą wartość NIE NULL w kolumnie na liście kolumn przekazanych do tej funkcji. Jednak do tej funkcji możemy przekazać dowolny zestaw wyrażeń, który może być listą kolumn tabeli lub prostym zbiorem liczb (stałych) lub zmiennych.

Składnia

Składnia SQL funkcji COALESCE (zgodnie z dokumentacją Microsoft) jest następująca:

COALESCE ( expression [ ,...n ] )   

Zdefiniowaliśmy już wyrażenie, aby mogło akceptować dowolną liczbę wyrażeń tego samego typu.

Kompatybilność

Zgodnie z dokumentacją Microsoft ta funkcja jest kompatybilna z wieloma technologiami Microsoft SQL, w tym z następującymi:

  1. Wszystkie obsługiwane wersje SQL Server.
  2. Azure SQL Database (wersja w chmurze SQL Server).

Zwróć uwagę, że celowo wykluczyłem kilka innych technologii SQL Server, aby zachować prostotę kontekstu.

Proste przykłady funkcji COALESCE

Skonfigurujmy przykładową bazę danych, w której będziemy mogli uruchomić nasze przykłady. Utwórz nową bazę danych o nazwie „CoalesceDB”, aby uruchomić na niej swoje przykłady. Użyj następującego kodu:

-- Create sample database
Create DATABASE CoalesceDB;
GO

Przykład „Liczby z NULL”

Jeśli przekażemy liczbę i wartość NULL do funkcji COALESCE w dowolnej kolejności, zwróci ona liczbę, ponieważ jest to pierwsza wartość NIEZEROWA .

Użyj skryptu T-SQL względem przykładowej bazy danych w następujący sposób:

-- Use the sample database
USE CoalesceDB

-- Simple COALESCE example with number and NULL inputs (arguments) 
SELECT COALESCE(NULL,1) as COALESCE_Result

Powinieneś otrzymać następujące wyniki:

Jeśli odwrócimy kolejność argumentów w taki sposób, że liczba 1 jest pierwsza, a NULL staje się drugim argumentem, nadal otrzymujemy ten sam wynik:

-- Simple COALESCE example with Number and NULL while number being first input (arguments) 
SELECT COALESCE(1,NULL) as COALESCE_Result_Number_First

Przykład „ciągu z wartością NULL”

Tutaj przekażemy ciąg (dane typu znakowego) i NULL do tej funkcji, aby zobaczyć wyniki. Uruchom następujący skrypt:

-- Simple COALESCE example with string and NULL inputs (arguments) 
SELECT COALESCE(NULL,'Second input') as COALESCE_Result

Wyniki są poniżej:

Podobnie, odwrócenie kolejności da nam takie same wyniki, jak w poprzednim przykładzie.

Przykład „Dwie liczby i NULL”

Zobaczmy zachowanie funkcji COALESCE, jeśli dostarczymy tej funkcji trzy dane wejściowe (argumenty), w tym dwie liczby i wartość NULL.

Uruchom następujący skrypt dla przykładu z dwiema liczbami i jedną wartością NULL:

-- Simple COALESCE example with two numbers and NULL inputs (arguments) 
SELECT COALESCE(NULL,2,3) as COALESCE_Result

Dane wyjściowe są następujące:

Od pierwszego Wartość NOT Null wynosi 2 , funkcja COALESCE zwróciła go, ignorując wartość po nim.

Odwróćmy teraz kolejność liczb na liście argumentów za pomocą następującego skryptu:

-- Simple COALESCE example with two numbers reversed and NULL inputs (arguments) 
SELECT COALESCE(NULL,3,2) as COALESCE_Result 

Zestaw wyników znajduje się poniżej:

Przykład „Liczby, ciągu i NULL”

Tutaj mieszamy typy argumentów, wprowadzając liczbę, ciąg i wartość NULL. Wpisz następujący kod:

-- Simple COALESCE example with one number one string and NULL inputs (arguments) 
SELECT COALESCE(NULL,1,'Home') as COALESCE_Result

Wyniki są następujące:

Chociaż funkcja COALESCE pokazuje poprawne wyniki, pobierając pierwszą wartość NOT NULL, która wynosi 1, nie jest to dobry przykład. Powinniśmy podać ten sam rodzaj argumentów. Są to liczby, znaki lub dowolny inny rodzaj wyrażenia.

Jeśli jako pierwszy argument podamy ciąg „Home”, a jako drugi liczbę 1, spowoduje to błąd. Dlatego wyrażenia powinny być tego samego typu.

Spróbujmy tego, zamieniając dwa argumenty NOT NULL:

-- Simple COALESCE example with one number one string first and NULL inputs (arguments) 
SELECT COALESCE(NULL,'Home',1) as COALESCE_Result

Dane wyjściowe znajdują się poniżej:

Przykład „dwa ciągi znaków z wartością NULL”

Jeśli wprowadzimy wartość NULL, po której następują dwie wartości ciągu, zwróci pierwszy ciąg, ponieważ NIE JEST NULL. Drugie opuści. Uruchom następujący skrypt, aby zobaczyć, jak działa:

-- Simple COALESCE example with two strings and NULL inputs (arguments) 
SELECT COALESCE(NULL,'Home','Office') as COALESCE_Result

Zestaw wyników znajduje się poniżej:

Powyższy przykład udowadnia, że ​​dokładne wyniki wymagają podania tego samego typu argumentów do funkcji COALESCE. Sam argument może być liczbą, łańcuchem, zmienną lub kolumną tabeli.

Przykłady rzeczywistych przypadków

Teraz przyjrzymy się prostemu, rzeczywistemu scenariuszowi, w którym funkcja COALESCE efektywnie obsługuje wartości NULL.

Firma dostarczająca usługi IT przechowuje dane swoich klientów w następujących dwóch kategoriach:

  1. Klienci biznesowi.
  2. Klienci indywidualni.

Klient biznesowy to klient reprezentujący firmę. Składają zamówienia w imieniu firmy (biznesu). Klient indywidualny to osoba zamawiająca usługi osobiście i na własny użytek.

Kontakty klientów biznesowych znajdują się w tabeli Customer w kolumnie Work_Email. Adresy e-mail klientów osobistych znajdują się w kolumnie Personal_Email tabeli.

Dlatego wypełnia kolumnę Work_Email lub Personal_Email dla każdego klienta, w zależności od typu.

Utwórz tabelę klientów

Stworzymy tabelę o nazwie „Klient” w przykładowej bazie danych CoalesceDB. Wpisz następujący skrypt:

-- 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]) 
)

Wypełnij tabelę klientów

Wypełnijmy tabelę klientów za pomocą następującego skryptu:

-- 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

Wyświetl tabelę klientów

Uruchom następujący skrypt:

-- View customer table
SELECT [CustomerId], [Work_Email], [Personal_Email] FROM dbo.Customer

Dane wyjściowe są następujące:

Wyświetlanie wszystkich dostępnych kontaktów za pomocą COALESCE

Teraz, jeśli chcielibyśmy zobaczyć wszystkie dostępne kontakty wszystkich klientów, ignorując NULL, możemy to osiągnąć za pomocą funkcji COALESCE w następujący sposób:

--Viewing all available contacts using COALESCE 
SELECT C.CustomerId,COALESCE(Work_Email,Personal_Email) AS Email
FROM dbo.Customer C

Wyniki to:

Rzeczy do zrobienia

Gratulacje! Znasz podstawy funkcji COALESCE i rozumiesz jej zastosowanie w efektywnym posługiwaniu się wartościami NULL.

Teraz możesz chcieć dalej szkolić nowe umiejętności:

  1. Spróbuj utworzyć i wypełnić dwie dodatkowe kolumny, Work_Phone i Personal_Phone, w tabeli Customer. Sprawdź, czy możesz obsłużyć wartości NULL w tych kolumnach, korzystając z rzeczywistego przykładu.
  2. Spróbuj utworzyć widok SQL, aby pokazać wszystkie dostępne kontakty e-mail klientów.
  3. Spróbuj przekazać wszystkie cztery kolumny (Work_Email, Personal_Email, Work_Phone i Personal_Phone) do funkcji. Oczywiście musisz upewnić się, że wszystkie mają ten sam typ danych. Zobacz wyniki samodzielnie.

Przeczytaj również

Praktyczne zastosowanie funkcji SQL COALESCE

Najlepsze odpowiedzi na 5 palących pytań dotyczących funkcji SQL COALESCE


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Statystyka szarpnięcia kolanem:PAGEIOLATCH_SH

  2. Wprowadzenie do bibliotek Pythona SQL

  3. Prosta parametryzacja i trywialne plany — część 3

  4. Łączenie IBM DB2 z oprogramowaniem IRI

  5. Jak skopiować dane z jednej tabeli do drugiej w SQL?