VieTopik
Tiếng HànTiếng AnhIT
  • Góc học tập
Tải app
  • Thư viện
  • Luyện thi
  • Cẩm nang
  • Góc học tập
SQL với OracleĐọc dữ liệu
Bài 4/16
5 phút

NULL trong SQL

Nội dung bài · 5 mục
  1. 1.Khái niệm
  2. 2.Ví dụ
  3. 3.Thử ngay
  4. 4.Lỗi hay gặp
  5. 5.Tóm tắt

Khách Chi chưa cung cấp email. Ô email của Chi không phải chuỗi rỗng, cũng không phải số 0, mà là "không có gì". SQL gọi đó là NULL, và nó không hành xử như một giá trị bình thường.

Khái niệm

🕳️ NULL: giá trị cho biết dữ liệu không có hoặc chưa biết, khác với 0 hay chuỗi rỗng.

🩹 NVL: hàm của Oracle trả về giá trị thay thế khi gặp NULL, ví dụ NVL(email, 'chưa có').

Mọi phép so sánh với NULL bằng = hay <> đều cho kết quả không đúng cũng không sai, nên WHERE loại dòng đó. Muốn kiểm tra NULL phải dùng IS NULL hoặc IS NOT NULL.

Hai điểm khác null của C#: so sánh = NULL không bao giờ đúng, và chuỗi rỗng '' cũng là NULL. NVL làm việc giống toán tử ??.

Ví dụ

SELECT name
FROM customers
WHERE email IS NULL;
  • IS NULL tìm những dòng chưa có email. Kết quả là Chi.
  • IS NOT NULL thì ngược lại.
  • Oracle coi chuỗi rỗng '' là NULL. Lưu '' vào cột nào thì ô đó thành NULL.

Thử ngay

SELECT name, NVL(email, 'chưa có') AS email
FROM customers
ORDER BY customer_id;

AS email đặt tên cho cột kết quả.

Đoán trước khi chạy: dòng của Chi hiện gì ở cột email?

Xem kết quả
NAME EMAIL
An an@shop.vn
Bình binh@shop.vn
Chi chưa có
Dũng dung@shop.vn

Email của Chi là NULL, nên NVL thay bằng "chưa có". Những dòng có email thì giữ nguyên.

Lỗi hay gặp

So sánh với NULL bằng dấu =. Câu lệnh chạy được nhưng không trả về dòng nào, kể cả dòng của Chi.

-- SAI — không bao giờ có kết quả
SELECT name FROM customers WHERE email = NULL;
-- ĐÚNG
SELECT name FROM customers WHERE email IS NULL;

Tìm chuỗi rỗng bằng = ''. Trong Oracle, '' chính là NULL, nên câu này cũng không trả về dòng nào.

-- SAI — '' là NULL, so sánh bằng = luôn loại dòng
SELECT name FROM customers WHERE email = '';
-- ĐÚNG — ô trống trong Oracle là NULL
SELECT name FROM customers WHERE email IS NULL;

Tóm tắt

  • NULL là không có dữ liệu, khác 0 và khác chuỗi rỗng.
  • Kiểm tra bằng IS NULL, IS NOT NULL. Dùng = NULL thì không bao giờ có kết quả.
  • NVL(cột, giá_trị) thay NULL bằng giá trị khác khi hiển thị.
  • Oracle coi '' là NULL.

Tự kiểm tra

0/3 câu
Câu 1

Bảng products có cột discount, một số dòng là NULL. Câu nào tìm các sản phẩm chưa có giảm giá?

Câu 2

Muốn hiện 0 thay cho NULL ở cột discount khi hiển thị. Viết thế nào?

Câu 3

Trong Oracle, INSERT một dòng với email = '' rồi tìm bằng WHERE email IS NULL. Dòng đó có được tìm thấy không?

Sắp xếp và phân trangHàm tổng hợp

Nội dung bài

  1. 1.Khái niệm
  2. 2.Ví dụ
  3. 3.Thử ngay
  4. 4.Lỗi hay gặp
  5. 5.Tóm tắt