sql >> Databáze >  >> RDS >> Database

Efektivní zpracování hodnot NULL pomocí funkce SQL COALESCE pro začátečníky

Tento článek si klade za cíl pomoci začátečníkům pochopit základy funkce T-SQL COALESCE a její aplikace pro zpracování hodnot NULL. Čtenáři navíc získají praktické zkušenosti implementací několika jednoduchých příkladů této funkce.

Zdůrazníme také důležitost funkcí T-SQL při řešení analytických problémů databáze.

O funkci SQL COALESCE

Nejprve se pokusme porozumět této funkci z pohledu začátečníka SQL.

Co je funkce SQL COALESCE?

Je to funkce T-SQL, která přijímá mnoho vstupů, ale vrací první vstupní hodnotu, která NENÍ NULL .

Jaký je vstup?

Vstupem (také nazývaným argument) může být cokoli dodané funkci, kterou tato funkce vyžaduje ke své práci.

např. máme funkci nazvanou SUM() , která sečte libovolná dvě čísla X a Y . Tato čísla jsou vstupy nebo argumenty funkce.

Vstupem nebo argumentem může být výraz.

Co je výraz?

Výraz může být konstanta, proměnná nebo sloupec, který nakonec vrátí jednu datovou hodnotu.

Zaměřujeme se však zejména na sloupce z pohledu databáze, které mohou, ale nemusí obsahovat hodnoty.

Co je to nulová hodnota?

Jakákoli hodnota, která má být ještě přiřazena ke sloupci tabulky, je NULL hodnota. Jinými slovy NULL znamená neinicializovanou hodnotu sloupce v tabulce .

Co je hodnota NOT NULL?

Je opakem hodnoty NULL. Pokud je hodnota NULL nepřiřazená nebo neinicializovaná hodnota sloupce, hodnota NOT NULL je přiřazená nebo inicializovaná hodnota sloupce .

např. Máme dva sloupce, Id zkoušky a Výsledek zkoušky , v tabulce.

Uživatel nastaví ExamId=1 , ale nezadá žádnou hodnotu do ExamResult sloupec. Poté Výsledek zkoušky bude mít v sobě NULL. Případně ExamIdNENÍ NULL hodnotu, protože je 1.

Jak funguje funkce COALESCE?

Je to funkce, která zobrazuje první NOT NULL hodnotu sloupce v seznamu sloupců předávaných této funkci. Této funkci však můžeme předat libovolnou sadu výrazů, což může být seznam sloupců tabulky nebo jednoduchá sada čísel (konstant) či proměnných.

Syntaxe

Syntaxe SQL funkce COALESCE (podle dokumentace společnosti Microsoft) je následující:

COALESCE ( expression [ ,...n ] )   

Již jsme definovali výraz, takže může přijmout libovolný počet výrazů stejného typu.

Kompatibilita

Podle dokumentace společnosti Microsoft je tato funkce kompatibilní s mnoha technologiemi Microsoft SQL, včetně následujících:

  1. Všechny podporované verze SQL Server.
  2. Azure SQL Database (cloudová verze SQL Server).

Všimněte si, že jsem záměrně vyloučil několik dalších technologií SQL Server, aby byl kontext jednoduchý.

Jednoduché příklady funkce COALESCE

Vytvořme vzorovou databázi, kde můžeme spouštět naše příklady. Vytvořte novou databázi nazvanou „CoalesceDB“, abyste s ní spouštěli své příklady. Použijte následující kód:

-- Create sample database
Create DATABASE CoalesceDB;
GO

Příklad ‚Číslo s NULL‘

Pokud funkci COALESCE předáme číslo a hodnotu NULL v libovolném pořadí, vrátí číslo, protože se jedná o první hodnotu NOT NULL .

Použijte skript T-SQL proti ukázkové databázi takto:

-- Use the sample database
USE CoalesceDB

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

Měli byste získat následující výsledky:

Pokud obrátíme pořadí argumentů tak, že číslo 1 je na prvním místě a NULL se stane druhým argumentem, dostaneme stále stejný výsledek:

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

Příklad ‚řetězec s NULL‘

Zde této funkci předáme řetězec (data typu znaků) a NULL, abychom viděli výsledky. Spusťte následující skript:

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

Výsledky jsou níže:

Podobně obrácením pořadí získáme stejné výsledky jako v předchozím příkladu.

Příklad „Dvě čísla a NULL“

Podívejme se na chování funkce COALESCE, pokud do této funkce dodáme tři vstupy (argumenty), včetně dvou čísel a hodnoty NULL.

Spusťte následující skript pro příklad se dvěma čísly a jednou hodnotou NULL:

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

Výstup je následující:

Od prvního Hodnota NOT Null je 2 , funkce COALESCE jej vrátila, přičemž hodnotu za ním ignoruje.

Pojďme nyní obrátit pořadí čísel v seznamu argumentů pomocí následujícího skriptu:

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

Sada výsledků je níže:

Příklad ‚Číslo, řetězec a NULL‘

Zde zamícháme typy argumentů zadáním čísla, řetězce a hodnoty NULL. Zadejte následující kód:

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

Výsledky jsou následující:

Přestože funkce COALESCE ukazuje správné výsledky a vybírá první hodnotu NOT NULL, což je 1, není to dobrý příklad. Měli bychom poskytnout stejný typ argumentů. Jsou to buď čísla, znaky nebo jakýkoli jiný typ výrazu.

Pokud zadáme řetězec ‚Home‘ jako první argument a číslo 1 jako druhý argument, způsobí to chybu. Proto by výrazy měly být stejného typu.

Zkusme to záměnou dvou argumentů NOT NULL:

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

Výstup je níže:

Příklad „Dva řetězce s NULL“

Pokud zadáme hodnotu NULL následovanou dvěma řetězcovými hodnotami, vrátí první řetězec, protože NENÍ NULL. To druhé vynechá. Spusťte následující skript, abyste jej viděli v akci:

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

Sada výsledků je níže:

Výše uvedený příklad dokazuje, že přesné výsledky vyžadují dodání stejného typu argumentů do funkce COALESCE. Argument samotný může být číslo, řetězec, proměnná nebo sloupec tabulky.

Příklady skutečného případu

Nyní vezmeme jednoduchý scénář reálného případu funkce COALESCE efektivně zpracovávající hodnoty NULL.

Společnost poskytující IT služby uchovává podrobnosti o svých zákaznících, které spadají do následujících dvou kategorií:

  1. Firemní zákazníci.
  2. Jednotliví zákazníci.

Firemní zákazník je zákazník zastupující společnost. Zadávají objednávky jménem společnosti (podniku). Individuální zákazník je osoba, která si objednává služby osobně a pro osobní použití.

Kontakty firemních zákazníků jsou v tabulce Zákazník ve sloupci Work_Email. E-mailové adresy osobních zákazníků jsou v tabulce ve sloupci Personal_Email.

Proto u každého zákazníka vyplní buď sloupec Work_Email nebo Personal_Email, v závislosti na typu.

Vytvořte tabulku zákazníků

Ve vzorové databázi CoalesceDB vytvoříme tabulku s názvem ‚Zákazník‘. Zadejte následující skript:

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

Vyplňte tabulku zákazníků

Vyplňte tabulku zákazníků pomocí následujícího skriptu:

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

Zobrazit tabulku zákazníků

Spusťte následující skript:

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

Výstup je následující:

Zobrazení všech dostupných kontaktů pomocí COALESCE

Nyní, pokud bychom chtěli vidět všechny dostupné kontakty všech zákazníků, ignorovat NULL, můžeme toho dosáhnout pomocí funkce COALESCE takto:

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

Výsledky jsou:

Co dělat

Gratulujeme! Máte základy funkce COALESCE a rozumíte jejímu použití při efektivním zacházení s hodnotami NULL.

Nyní možná budete chtít nové dovednosti dále trénovat:

  1. Zkuste vytvořit a naplnit další dva sloupce, Work_Phone a Personal_Phone, v tabulce Customer. Podívejte se, zda byste mohli zpracovat hodnoty NULL v těchto sloupcích pomocí příkladu skutečného případu.
  2. Zkuste vytvořit zobrazení SQL, které vám ukáže všechny dostupné e-mailové kontakty zákazníků.
  3. Zkuste do funkce předat všechny čtyři sloupce (Work_Email, Personal_Email, Work_Phone a Personal_Phone). Samozřejmě musíte zajistit, aby všechny měly stejný datový typ. Podívejte se na výsledky sami.

Přečtěte si také

Praktické použití funkce SQL COALESCE

Nejlepší odpovědi na 5 ožehavých otázek ohledně funkce SQL COALESCE


  1. Vložit blob do databáze Oracle pomocí C#

  2. Napište rychlý datový rámec pandy do postgresu

  3. Konfigurace PostgreSQL pro kontinuitu podnikání

  4. Vnitřní části sedmi druhů SQL Server – Část 1