Тази статия има за цел да помогне на начинаещите да разберат основите на функцията T-SQL COALESCE и нейното приложение за работа с NULL стойности. Освен това читателите ще получат практически опит, като внедрят някои прости примери за тази функция.
Също така ще подчертаем значението на функциите на T-SQL при решаването на проблеми с анализ на базата данни.
Относно функцията SQL COALESCE
Първо, нека се опитаме да разберем тази функция от гледна точка на начинаещи в SQL.
Какво е функцията SQL COALESCE?
Това е T-SQL функция, която приема много входове, но връща първата входна стойност, която НЕ Е NULL .
Какво е входът?
Входът (наричан още аргумент) може да бъде всичко, предоставено на функция, изисквана от тази функция, за да върши своята работа.
например имаме функция, наречена SUM() , което събира произволни две числа X и Y . Тези числа са входни данни или аргументи на функцията.
Вход или аргумент може да бъде израз.
Какво е израз?
Изразът може да бъде константа, променлива или колона, която в крайна сметка връща една стойност на данните.
Въпреки това, ние сме особено фокусирани върху колоните от гледна точка на базата данни, които могат да съдържат или не съдържат стойности.
Какво е нулева стойност?
Всяка стойност, която все още трябва да бъде присвоена на колоната на таблица, е NULL стойност. С други думи, NULL означава неинициализирана стойност на колона в таблицата .
Какво е стойност NOT NULL?
Това е обратното на стойността NULL. Ако стойността NULL е неприсвоена или неинициализирана стойност на колона, стойността NOT NULL е присвоена или инициализирана стойност на колона .
например имаме две колони, ExamId и Резултат от изпит , в таблица.
Потребител задава ExamId=1 , но не предоставя никаква стойност на ExamResult колона. След това ExamResult ще има NULL в него. Като алтернатива, ExamId има NOT NULL стойност, защото е 1.
Как работи функцията COALESCE?
Това е функция, която показва първата стойност NOT NULL на колоната в списъка с колоните, предадени на тази функция. Въпреки това можем да предадем всеки набор от изрази, който може да бъде списък с колоните на таблицата или обикновен набор от числа (константи) или променливи към тази функция.
Синтаксис
SQL синтаксисът на функцията COALESCE (съгласно документацията на Microsoft) е както следва:
COALESCE ( expression [ ,...n ] )
Вече сме дефинирали израз, така че да може да приема произволен брой изрази от същия тип.
Съвместимост
Според документацията на Microsoft тази функция е съвместима с много технологии на Microsoft SQL, включително следното:
- Всички поддържани версии на SQL Server.
- База данни Azure SQL (версия в облака на SQL Server).
Имайте предвид, че умишлено изключих няколко други технологии на SQL Server, за да поддържам контекста прост.
Прости примери за функцията COALESCE
Нека настроим примерна база данни, където можем да стартираме нашите примери. Създайте нова база данни, наречена „CoalesceDB“, за да стартирате вашите примери срещу нея. Използвайте следния код:
-- Create sample database
Create DATABASE CoalesceDB;
GO
Пример „Число с NULL“
Ако предадем число и стойност NULL на функцията COALESCE в произволен ред, тя ще върне числото, защото е първата стойност НЕ NULL .
Използвайте T-SQL скрипта срещу примерната база данни, както следва:
-- Use the sample database
USE CoalesceDB
-- Simple COALESCE example with number and NULL inputs (arguments)
SELECT COALESCE(NULL,1) as COALESCE_Result
Трябва да получите следните резултати:
Ако обърнем реда на аргументите по такъв начин, че числото 1 да е първо, а NULL да стане вторият аргумент, пак получаваме същия резултат:
-- Simple COALESCE example with Number and NULL while number being first input (arguments)
SELECT COALESCE(1,NULL) as COALESCE_Result_Number_First
Пример „Низ с NULL“
Тук ще предадем низ (данни за тип символ) и NULL на тази функция, за да видим резултатите. Изпълнете следния скрипт:
-- Simple COALESCE example with string and NULL inputs (arguments)
SELECT COALESCE(NULL,'Second input') as COALESCE_Result
Резултатите са по-долу:
По същия начин, обръщането на реда ще ни даде същите резултати като в предишния пример.
Пример „Две числа и NULL“
Нека видим поведението на функцията COALESCE, ако предоставим трите входа (аргумента), включително две числа и стойност NULL, на тази функция.
Изпълнете следния скрипт за примера с две числа и една стойност NULL:
-- Simple COALESCE example with two numbers and NULL inputs (arguments)
SELECT COALESCE(NULL,2,3) as COALESCE_Result
Резултатът е както следва:
Отнас NOT Null стойността е 2 , функцията COALESCE го е върнала, игнорирайки стойността след него.
Нека сега обърнем реда на числата в списъка с аргументи със следния скрипт:
-- Simple COALESCE example with two numbers reversed and NULL inputs (arguments)
SELECT COALESCE(NULL,3,2) as COALESCE_Result
Резултатът е по-долу:
Пример „Число, низ и NULL“
Тук смесваме типовете аргументи, като въвеждаме число, низ и стойност NULL. Въведете следния код:
-- Simple COALESCE example with one number one string and NULL inputs (arguments)
SELECT COALESCE(NULL,1,'Home') as COALESCE_Result
Резултатите са както следва:
Въпреки че функцията COALESCE показва правилните резултати, вземайки първата стойност NOT NULL, която е 1, това не е добър пример. Трябва да предоставим същия тип аргументи. Това са или числа, или знаци, или друг вид израз.
Ако предоставим низа „Начало“ като първи аргумент и числото 1 като втори аргумент, това ще доведе до грешка. Ето защо изразите трябва да са от един и същи тип.
Нека опитаме това, като разменим двата аргумента NOT NULL:
-- Simple COALESCE example with one number one string first and NULL inputs (arguments)
SELECT COALESCE(NULL,'Home',1) as COALESCE_Result
Резултатът е по-долу:
Пример „Два низа с NULL“
Ако въведем стойност NULL, последвана от две стойности на низ, той ще върне първия низ, защото НЕ е NULL. Ще изпусне втория. Изпълнете следния скрипт, за да го видите в действие:
-- Simple COALESCE example with two strings and NULL inputs (arguments)
SELECT COALESCE(NULL,'Home','Office') as COALESCE_Result
Резултатът е по-долу:
Горният пример доказва, че точните резултати изискват предоставяне на същия тип аргументи на функцията COALESCE. Самият аргумент може да бъде число, низ, променлива или колона на таблицата.
Реални примери
Сега приемаме прост сценарий в реален случай на функцията COALESCE, която ефективно обработва NULL стойности.
Компания за доставчик на ИТ услуги съхранява данните за своите клиенти, попадайки в следните две категории:
- Бизнес клиенти.
- Индивидуални клиенти.
Бизнес клиент е клиент, представляващ компания. Те правят поръчки от името на компанията (бизнеса). Индивидуален клиент е лице, което поръчва услуги лично и за лична употреба.
Контактите на бизнес клиентите са в таблицата Клиенти под колоната Work_Email. Имейл адресите на личните клиенти са в колоната Personal_Email на таблицата.
Следователно, той попълва колоната Work_Email или Personal_Email за всеки клиент, в зависимост от типа.
Създайте таблица с клиенти
Ще създадем таблица, наречена „Клиент“ в примерната база данни CoalesceDB. Въведете следния скрипт:
-- 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])
)
Попълнете таблицата с клиенти
Нека попълним таблицата с клиенти, използвайки следния скрипт:
-- 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
Преглед на таблицата с клиенти
Изпълнете следния скрипт:
-- View customer table
SELECT [CustomerId], [Work_Email], [Personal_Email] FROM dbo.Customer
Резултатът е както следва:
Преглед на всички налични контакти чрез COALESCE
Сега, ако искаме да видим всички налични контакти на всички клиенти, игнорирайки NULL, можем да постигнем това, като използваме функцията COALESCE, както следва:
--Viewing all available contacts using COALESCE
SELECT C.CustomerId,COALESCE(Work_Email,Personal_Email) AS Email
FROM dbo.Customer C
Резултатите са:
Неща за правене
Честито! Имате основите на функцията COALESCE и разбирате нейното използване за ефективна обработка на стойностите NULL.
Сега може да искате да обучите новите умения допълнително:
- Опитайте да създадете и попълните още две колони, Work_Phone и Personal_Phone, в таблицата Customer. Вижте дали можете да обработвате NULL стойности в тези колони, като използвате примера с реален случай.
- Опитайте се да създадете SQL изглед, за да ви покаже всички налични имейл контакти на клиентите.
- Опитайте да прехвърлите всичките четири колони (Work_Email, Personal_Email, Work_Phone и Personal_Phone) във функцията. Разбира се, трябва да се уверите, че всички те имат един и същ тип данни. Вижте резултатите сами.
Прочетете също
Практическа употреба на функцията SQL COALESCE
Най-добри отговори на 5 горящи въпроса за функцията SQL COALESCE