SQLite - NULL Values: Understanding the Concept of Missing Data

Xin chào, những người đam mê cơ sở dữ liệu! Hôm nay, chúng ta sẽ cùng nhau khám phá một khía cạnh thú vị của SQLite: các giá trị NULL. Là người giáo viên khoa học máy tính ở gần bạn, tôi rất vui mừng được hướng dẫn bạn qua khái niệm này, có thể sẽ hơi khó hiểu ban đầu nhưng rất quan trọng để làm việc hiệu quả với cơ sở dữ liệu.

SQLite - NULL Values

What are NULL Values?

Trước khi chúng ta nhảy vào cú pháp và ví dụ, hãy hiểu giá trị NULL thực sự có nghĩa là gì trong ngữ cảnh của cơ sở dữ liệu. Hãy tưởng tượng bạn đang điền vào một biểu mẫu, và có một trường yêu cầu tên đệm của bạn. Nhưng giả sử bạn không có tên đệm? Bạn không thể để trống vì điều đó có thể bị hiểu là bạn quên điền. Đây là lúc giá trị NULL trở nên hữu ích trong cơ sở dữ liệu.

Trong SQLite (và một số cơ sở dữ liệu khác), NULL đại diện cho một giá trị thiếu hoặc không biết. Nó không phải là số không, không phải là chuỗi trống, nó là sự thiếu vắng của một giá trị. Hãy nghĩ của nó như một Placeholder nói, "Ồ, chúng tôi không có thông tin này ngay bây giờ."

Syntax for Working with NULL Values

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 SQLite. Dưới đây là bảng các phương pháp phổ biến để xử lý các giá trị NULL:

Phương pháp Mô tả
IS NULL Kiểm tra xem một giá trị có phải là NULL không
IS NOT NULL Kiểm tra xem một giá trị có phải không phải là NULL không
IFNULL() Trả về một giá trị xác định nếu biểu thức là NULL
COALESCE() Trả về giá trị không phải NULL đầu tiên trong danh sách

Hãy cùng phân tích chúng với một số ví dụ!

IS NULL and IS NOT NULL

Đây là những cách đơn giản nhất để kiểm tra các giá trị NULL trong truy vấn của bạn.

SELECT * FROM students WHERE middle_name IS NULL;

Truy vấn này sẽ trả về tất cả học sinh không có tên đệm (hoặc nơi tên đệm không được biết).

SELECT * FROM students WHERE phone_number IS NOT NULL;

Truy vấn này sẽ trả về tất cả học sinh có số điện thoại được ghi lại trong cơ sở dữ liệu.

IFNULL() Function

Hàm IFNULL() rất hữu ích khi bạn muốn thay thế giá trị mặc định cho NULL.

SELECT name, IFNULL(age, 'Age not provided') AS age FROM users;

Trong ví dụ này, nếu tuổi là NULL, nó sẽ hiển thị 'Age not provided' thay vì. Điều này rất tốt để làm cho đầu ra của bạn thân thiện hơn với người dùng!

COALESCE() Function

COALESCE() giống như một chiếc dao đa năng cho việc xử lý các giá trị NULL. Nó trả về giá trị không phải NULL đầu tiên trong danh sách.

SELECT name, COALESCE(phone, email, 'No contact info') AS contact FROM customers;

Truy vấn này sẽ trả về số điện thoại nếu nó không phải là NULL, sau đó là email nếu số điện thoại là NULL, và cuối cùng là 'No contact info' nếu cả số điện thoại và email đều là NULL.

Practical Examples

Hãy áp dụng kiến thức của chúng ta vào một số tình huống thực tế!

Example 1: Student Database

Hãy tưởng tượng chúng ta đang quản lý một cơ sở dữ liệu học sinh cho một trường học. Một số học sinh có thể chưa cung cấp tất cả thông tin của họ.

CREATE TABLE students (
id INTEGER PRIMARY KEY,
first_name TEXT NOT NULL,
last_name TEXT NOT NULL,
middle_name TEXT,
birth_date DATE,
enrollment_date DATE NOT NULL
);

INSERT INTO students VALUES (1, 'John', 'Doe', NULL, '2000-05-15', '2022-09-01');
INSERT INTO students VALUES (2, 'Jane', 'Smith', 'Marie', NULL, '2022-09-01');
INSERT INTO students VALUES (3, 'Bob', 'Johnson', NULL, NULL, '2022-09-01');

SELECT
first_name,
last_name,
IFNULL(middle_name, 'N/A') AS middle_name,
COALESCE(birth_date, 'Not provided') AS birth_date
FROM students;

Trong ví dụ này, chúng ta đang tạo bảng học sinh và chèn một số dữ liệu. Chú ý cách chúng ta xử lý các giá trị NULL trong câu lệnh SELECT. Chúng ta sử dụng IFNULL() cho tên đệm và COALESCE() cho ngày sinh. Điều này làm cho đầu ra của chúng ta dễ đọc và thông tin hơn.

Example 2: Product Inventory

Hãy tưởng tượng chúng ta đang quản lý một hệ thống tồn kho cho một cửa hàng nhỏ.

CREATE TABLE products (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
description TEXT,
price REAL NOT NULL,
stock_quantity INTEGER
);

INSERT INTO products VALUES (1, 'Widget', 'A fantastic widget', 9.99, 100);
INSERT INTO products VALUES (2, 'Gadget', NULL, 19.99, NULL);
INSERT INTO products VALUES (3, 'Thingamajig', 'It does... things', 29.99, 0);

SELECT
name,
IFNULL(description, 'No description available') AS description,
price,
COALESCE(stock_quantity, 'Out of stock') AS stock_status
FROM products;

Trong hệ thống tồn kho này, chúng ta sử dụng IFNULL() để cung cấp mô tả mặc định cho các sản phẩm không có mô tả. Chúng ta cũng sử dụng COALESCE() để hiển thị 'Out of stock' cho các sản phẩm mà số lượng tồn kho là NULL hoặc bằng không.

Conclusion

Hiểu rõ các giá trị NULL rất quan trọng khi làm việc với cơ sở dữ liệu. Chúng cho phép chúng ta đại diện cho thông tin thiếu hoặc không biết một cách chính xác. Nhớ rằng, NULL không phải là số không hoặc chuỗi trống - nó là sự thiếu vắng của một giá trị.

Khi bạn tiếp tục hành trình của mình trong quản lý cơ sở dữ liệu, bạn sẽ thấy rằng xử lý các giá trị NULL đúng cách có thể làm cho truy vấn của bạn mạnh mẽ hơn và dữ liệu của bạn có ý nghĩa hơn. Đó là như học cách đọc giữa các dòng trong cơ sở dữ liệu!

Tôi hy vọng hướng dẫn này đã giúp bạn hiểu rõ hơn về các giá trị NULL. Hãy tiếp tục thực hành với các tình huống khác nhau, và sớm bạn sẽ xử lý NULL như một chuyên gia. Chúc may mắn với việc mã hóa, và hãy nhớ - trong thế giới của cơ sở dữ liệu, đôi khi không có gì (NULL) có thể có nghĩa là mọi thứ!

Credits: Image by storyset