PostgreSQL - Giá trị NULL

Xin chào, những người yêu thích cơ sở dữ liệu! Hôm nay, chúng ta sẽ cùng nhau khám phá một khái niệm thú vị trong PostgreSQL: các giá trị NULL. Là người giáo viên khoa học máy tính gần gũi của bạn, tôi rất háo hức hướng dẫn bạn qua chủ đề này từng bước một. Đừng lo lắng nếu bạn mới bắt đầu học lập trình - chúng ta sẽ bắt đầu từ những điều cơ bản và dần dần nâng cao. Vậy, hãy cầm một tách cà phê (hoặc trà, nếu đó là sở thích của bạn), và cùng nhau bắt đầu hành trình khám phá NULL này nhé!

PostgreSQL - NULL Values

Giá trị NULL là gì?

Trước khi chúng ta nhảy vào cú pháp và các ví dụ, hãy hiểu rõ giá trị NULL thực sự có nghĩa là gì trong ngữ cảnh của cơ sở dữ liệu.

Định nghĩa của NULL

NULL là một giá trị đặc biệt trong cơ sở dữ liệu, nó đại diện cho sự vắng mặt của dữ liệu. Nó không phải là số không, không phải là chuỗi trống rỗng và không phải là giá trị sai. Nó đơn giản là... không có gì. Hãy nghĩ của nó như một placeholder nói, "Ồ, có điều gì đó ở đây, nhưng chúng ta chưa biết nó là gì!"

Tại sao NULL lại quan trọng?

NULL rất quan trọng trong cơ sở dữ liệu vì nó cho phép chúng ta phân biệt giữa:

  1. Một giá trị mà chúng ta biết (như 0 hoặc chuỗi trống rỗng)
  2. Một giá trị mà chúng ta không biết hoặc không áp dụng

Ví dụ, nếu bạn có một cơ sở dữ liệu về nhân viên và số điện thoại của họ, một NULL trong trường số điện thoại có thể có nghĩa là "Chúng tôi chưa có số điện thoại của nhân viên này," điều này khác với chuỗi trống rỗng có thể có nghĩa là "Nhân viên này đã nói rõ họ không có số điện thoại."

Cú pháp làm việc với giá trị NULL

Bây giờ chúng ta đã hiểu NULL là gì, hãy xem cách chúng ta có thể làm việc với nó trong PostgreSQL. Dưới đây là các cách chính để tương tác với giá trị NULL:

Thao tác Cú pháp Mô tả
Kiểm tra xem giá trị có NULL không IS NULL Trả về true nếu giá trị là NULL
Kiểm tra xem giá trị không phải NULL IS NOT NULL Trả về true nếu giá trị không phải NULL
Đặt giá trị mặc định cho NULL COALESCE() Trả về giá trị không phải NULL đầu tiên trong danh sách
Nullif NULLIF(value1, value2) Trả về NULL nếu value1 bằng value2, ngược lại trả về value1

Hãy cùng xem xét từng cái với một số ví dụ!

Ví dụ về làm việc với giá trị NULL

Tạo bảng với giá trị NULL

Đầu tiên, hãy tạo một bảng đơn giản để làm việc:

CREATE TABLE students (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100),
phone VARCHAR(20)
);

INSERT INTO students (name, email, phone) VALUES
('Alice', '[email protected]', '123-456-7890'),
('Bob', '[email protected]', NULL),
('Charlie', NULL, '987-654-3210'),
('David', NULL, NULL);

Trong bảng này, chúng ta đã cho phép các trường email và phone có thể NULL. Hãy phân tích những gì chúng ta đã làm:

  1. Alice có tất cả thông tin của cô ấy.
  2. Bob không có số điện thoại (nó là NULL).
  3. Charlie không có email (nó là NULL).
  4. David rất bí ẩn và không có email cũng như số điện thoại.

Kiểm tra giá trị NULL

Bây giờ, hãy xem cách chúng ta có thể tìm học sinh có thông tin thiếu sót:

SELECT name
FROM students
WHERE email IS NULL;

Truy vấn này sẽ trả về:

Charlie
David

Đây là điều đang xảy ra: Điều kiện IS NULL kiểm tra các giá trị NULL trong cột email. Nó giống như hỏi, "Ồ PostgreSQL, bạn có thể tìm tất cả học sinh chưa cung cấp email cho chúng tôi không?"

Hãy thử ngược lại:

SELECT name
FROM students
WHERE phone IS NOT NULL;

Điều này sẽ cho chúng ta:

Alice
Charlie

Lần này, chúng ta đang hỏi cho học sinh đã cung cấp số điện thoại.

Sử dụng COALESCE để xử lý giá trị NULL

COALESCE giống như một cây kéo đa năng cho việc xử lý giá trị NULL. Nó trả về giá trị không phải NULL đầu tiên trong danh sách. Hãy xem nó trong hành động:

SELECT name, COALESCE(email, 'No email provided') AS contact_info
FROM students;

Truy vấn này sẽ trả về:

Alice    | [email protected]
Bob      | [email protected]
Charlie  | No email provided
David    | No email provided

Điều gì đang xảy ra ở đây? COALESCE đang kiểm tra cột email. Nếu nó tìm thấy NULL, nó thay thế nó bằng 'No email provided'. Giống như có một trợ lý thân thiện điền vào chỗ trống cho bạn!

Sử dụng NULLIF

NULLIF giống như một phù thủy - nó có thể làm các giá trị biến mất (thành NULL) dưới điều kiện nhất định. Hãy xem một ví dụ:

SELECT name, NULLIF(phone, '123-456-7890') AS special_phone
FROM students;

Truy vấn này sẽ trả về:

Alice    | NULL
Bob      | NULL
Charlie  | 987-654-3210
David    | NULL

Phép thuật ở đây là gì? NULLIF đang so sánh mỗi số điện thoại với '123-456-7890'. Nếu chúng khớp, nó chuyển kết quả thành NULL. Giống như nói, "Nếu đây là số điện thoại văn phòng tiêu chuẩn của chúng ta, hãy không hiển thị nó."

Kết luận

Và thế là bạn đã có nó, các em học sinh yêu quý! Chúng ta đã cùng nhau hành trình qua vùng đất của giá trị NULL trong PostgreSQL. Chúng ta đã thấy NULL đại diện cho dữ liệu không biết hoặc thiếu sót, cách kiểm tra nó và cách xử lý nó với các hàm như COALESCE và NULLIF.

Nhớ rằng, trong thế giới của cơ sở dữ liệu, biết về NULL cũng quan trọng như biết về các giá trị thực tế. Nó là sự khác biệt giữa "Tôi không biết" và "Tôi biết nó là zero" - và trong dữ liệu, sự khác biệt này có thể rất lớn!

Tiếp tục thực hành, giữ sự tò mò và đừng sợ hỏi câu hỏi. Cuối cùng, trong thế giới học tập, không có giá trị NULL - chỉ có cơ hội để phát triển!

Credits: Image by storyset