Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Xử lý các giá trị NULL một cách hiệu quả với hàm SQL COALESCE cho người mới bắt đầu

Bài viết này nhằm mục đích giúp người mới bắt đầu hiểu những kiến ​​thức cơ bản về hàm T-SQL COALESCE và ứng dụng của nó để xử lý các giá trị NULL. Ngoài ra, độc giả sẽ có được kinh nghiệm thực tế bằng cách triển khai một số ví dụ đơn giản về chức năng này.

Chúng tôi cũng sẽ nêu bật tầm quan trọng của các hàm T-SQL trong việc giải quyết các vấn đề về phân tích cơ sở dữ liệu.

Giới thiệu về Hàm COALESCE trong SQL

Trước tiên, hãy cố gắng hiểu chức năng này từ quan điểm của người mới bắt đầu sử dụng SQL.

Hàm COALESCE trong SQL là gì?

Đây là một hàm T-SQL chấp nhận nhiều đầu vào nhưng trả về giá trị đầu vào đầu tiên KHÔNG ĐẦY ĐỦ .

Đầu vào là gì?

Đầu vào (còn được gọi là đối số) có thể là bất kỳ thứ gì được cung cấp cho một hàm mà hàm đó yêu cầu để thực hiện công việc của nó.

ví dụ:Chúng tôi có một hàm được gọi là SUM () , thêm hai số bất kỳ X Y . Những số này là đầu vào hoặc đối số của hàm.

Đầu vào hoặc đối số có thể là một biểu thức.

Biểu thức là gì?

Một biểu thức có thể là một hằng số, một biến hoặc một cột cuối cùng trả về một giá trị dữ liệu duy nhất.

Tuy nhiên, chúng tôi đặc biệt tập trung vào các cột từ góc độ cơ sở dữ liệu, các cột này có thể chứa hoặc không chứa giá trị.

Giá trị rỗng là gì?

Bất kỳ giá trị nào chưa được gán cho cột của bảng đều là NULL giá trị. Nói cách khác, NULL có nghĩa là giá trị chưa được khởi tạo của một cột trong bảng .

Giá trị NOT NULL là gì?

Nó ngược lại với giá trị NULL. Nếu giá trị NULL là giá trị cột chưa được gán hoặc chưa được khởi tạo, thì giá trị NOT NULL là giá trị cột được gán hoặc được khởi tạo .

ví dụ:Chúng tôi có hai cột, ExamId ExamResult , trong một bảng.

Người dùng đặt ExamId =1 , nhưng không cung cấp bất kỳ giá trị nào cho ExamResult cột. Sau đó, ExamResult sẽ có NULL trong đó. Ngoài ra, ExamId KHÔNG ĐẦY ĐỦ giá trị bởi vì nó là 1.

Chức năng COALESCE hoạt động như thế nào?

Đây là một hàm hiển thị giá trị NOT NULL đầu tiên của cột trong danh sách các cột được chuyển cho chức năng này. Tuy nhiên, chúng ta có thể chuyển bất kỳ tập hợp biểu thức nào, có thể là danh sách các cột của bảng hoặc một tập hợp số (hằng số) hoặc biến đơn giản cho hàm này.

Cú pháp

Cú pháp SQL của hàm COALESCE (theo tài liệu của Microsoft) như sau:

COALESCE ( expression [ ,...n ] )   

Chúng tôi đã xác định một biểu thức để nó có thể chấp nhận bất kỳ số lượng biểu thức cùng loại nào.

Khả năng tương thích

Theo tài liệu của Microsoft, chức năng này tương thích với nhiều công nghệ Microsoft SQL, bao gồm các công nghệ sau:

  1. Tất cả các phiên bản SQL Server được hỗ trợ.
  2. Cơ sở dữ liệu Azure SQL (phiên bản SQL Server đám mây).

Lưu ý rằng tôi đã cố tình loại trừ một số công nghệ SQL Server khác để giữ cho ngữ cảnh đơn giản.

Các ví dụ đơn giản về hàm COALESCE

Hãy thiết lập một cơ sở dữ liệu mẫu để chúng ta có thể chạy các ví dụ của mình. Tạo một cơ sở dữ liệu mới có tên là ‘CoalesceDB’ để chạy các ví dụ của bạn dựa trên nó. Sử dụng mã sau:

-- Create sample database
Create DATABASE CoalesceDB;
GO

Ví dụ về "Number with a NULL"

Nếu chúng ta chuyển một số và giá trị NULL vào hàm COALESCE theo bất kỳ thứ tự nào, nó sẽ trả về số đó vì nó là giá trị NOT NULL đầu tiên .

Sử dụng tập lệnh T-SQL dựa trên cơ sở dữ liệu mẫu như sau:

-- Use the sample database
USE CoalesceDB

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

Bạn sẽ nhận được các kết quả sau:

Nếu chúng ta đảo ngược thứ tự của các đối số theo cách sao cho số 1 đứng trước và NULL trở thành đối số thứ hai, chúng ta vẫn nhận được cùng một kết quả:

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

Ví dụ về 'chuỗi với NULL'

Ở đây chúng ta sẽ truyền một chuỗi (dữ liệu kiểu ký tự) và một NULL cho hàm này để xem kết quả. Chạy tập lệnh sau:

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

Kết quả như sau:

Tương tự, việc đảo ngược thứ tự sẽ cho chúng ta kết quả tương tự như trong ví dụ trước.

Ví dụ về "Two Numbers and a NULL"

Hãy xem hành vi của hàm COALESCE nếu chúng ta cung cấp ba đầu vào (đối số), bao gồm hai số và giá trị NULL, cho hàm này.

Chạy tập lệnh sau cho ví dụ với hai số và một giá trị NULL:

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

Kết quả như sau:

Kể từ lần đầu tiên Giá trị NOT Null là 2 , hàm COALESCE đã trả về nó, bỏ qua giá trị sau nó.

Bây giờ chúng ta hãy đảo ngược thứ tự các số trong danh sách đối số bằng tập lệnh sau:

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

Tập hợp kết quả dưới đây:

Ví dụ về ‘Number, String và a NULL’

Ở đây chúng tôi trộn các loại đối số bằng cách nhập một số, chuỗi và giá trị NULL. Nhập mã sau:

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

Kết quả như sau:

Mặc dù hàm COALESCE hiển thị kết quả chính xác, nhưng việc chọn giá trị NOT NULL đầu tiên, là 1, nó không phải là một ví dụ điển hình. Chúng ta nên cung cấp cùng một loại đối số. Nó là số hoặc ký tự hoặc bất kỳ loại biểu thức nào khác.

Nếu chúng tôi cung cấp chuỗi ‘Home’ làm đối số đầu tiên và số 1 làm đối số thứ hai, nó sẽ gây ra lỗi. Đó là lý do tại sao các biểu thức phải cùng loại.

Hãy để chúng tôi thử điều này bằng cách hoán đổi hai đối số NOT NULL:

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

Kết quả là bên dưới:

Ví dụ về 'Hai chuỗi với một NULL'

Nếu chúng ta nhập một giá trị NULL theo sau là hai giá trị chuỗi, nó sẽ trả về chuỗi đầu tiên vì nó KHÔNG ĐỦ. Nó sẽ để lại cái thứ hai. Chạy tập lệnh sau để xem nó hoạt động:

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

Tập hợp kết quả dưới đây:

Ví dụ trên chứng minh rằng kết quả chính xác yêu cầu cung cấp cùng một loại đối số cho hàm COALESCE. Bản thân một đối số có thể là một số, chuỗi, biến hoặc một cột của bảng.

Ví dụ về trường hợp thực tế

Bây giờ chúng ta lấy một kịch bản trường hợp thực đơn giản của hàm COALESCE xử lý các giá trị NULL một cách hiệu quả.

Công ty cung cấp dịch vụ CNTT lưu trữ thông tin chi tiết về khách hàng của mình, thuộc hai loại sau:

  1. Khách hàng Doanh nghiệp.
  2. Khách hàng Cá nhân.

Một khách hàng doanh nghiệp là một khách hàng đại diện cho một công ty. Họ thay mặt công ty (doanh nghiệp) đặt hàng. Khách hàng cá nhân là người đặt hàng dịch vụ theo cách cá nhân và cho mục đích sử dụng cá nhân.

Địa chỉ liên hệ của khách hàng doanh nghiệp nằm trong bảng Khách hàng trong cột Work_Email. Địa chỉ email của khách hàng cá nhân nằm trong cột Personal_Email của bảng.

Do đó, nó điền vào cột Work_Email hoặc Personal_Email cho từng khách hàng, tùy thuộc vào loại.

Tạo bảng khách hàng

Chúng tôi sẽ tạo một bảng có tên là "Khách hàng" trong cơ sở dữ liệu mẫu CoalesceDB. Nhập tập lệnh sau:

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

Điền vào Bảng Khách hàng

Hãy để chúng tôi điền bảng khách hàng bằng cách sử dụng tập lệnh sau:

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

Xem Bảng Khách hàng

Chạy tập lệnh sau:

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

Kết quả như sau:

Xem Tất cả Địa chỉ Liên hệ Có sẵn bằng COALESCE

Bây giờ, nếu chúng ta muốn xem tất cả các địa chỉ liên hệ có sẵn của tất cả khách hàng, bỏ qua NULL, chúng ta có thể đạt được điều này bằng cách sử dụng hàm COALESCE như sau:

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

Kết quả là:

Việc cần làm

Xin chúc mừng! Bạn có kiến ​​thức cơ bản về hàm COALESCE và hiểu cách sử dụng hàm này trong việc xử lý các giá trị NULL một cách hiệu quả.

Bây giờ, bạn có thể muốn đào tạo thêm các kỹ năng mới:

  1. Cố gắng tạo và điền thêm hai cột, Work_Phone và Personal_Phone, trong bảng Khách hàng. Xem liệu bạn có thể xử lý các giá trị NULL trong các cột này hay không bằng cách sử dụng ví dụ trường hợp thực.
  2. Cố gắng tạo chế độ xem SQL để hiển thị cho bạn tất cả các địa chỉ liên hệ email hiện có của khách hàng.
  3. Thử chuyển tất cả bốn cột (Work_Email, Personal_Email, Work_Phone và Personal_Phone) vào hàm. Tất nhiên, bạn cần đảm bảo tất cả chúng đều có cùng kiểu dữ liệu. Tự mình xem kết quả.

Đọc thêm

Cách sử dụng thực tế của Hàm COALESCE trong SQL

Các câu trả lời hàng đầu cho 5 câu hỏi nhức nhối về Hàm COALESCE trong SQL


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Theo dõi các tùy chọn con trỏ

  2. Lợi ích của việc lập chỉ mục các khóa nước ngoài

  3. Đếm các tham chiếu đến một bản ghi trong bảng thông qua Phím ngoại

  4. Thông báo về tính khả dụng chung của trình quản lý tuân thủ SQL 5.9

  5. 10 tài nguyên hữu ích cho những ai muốn biết thêm về SQL