Hướng dẫn đầy đủ về Expression trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng biểu thức CASE, COALESCENULLIF trong SQL Server.

Biểu thức CASE trong SQL Server

Biểu thức CASE trong SQL Server đánh giá danh sách các điều kiện và trả về một trong nhiều kết quả được chỉ định. Biểu thức CASE có hai dạng: biểu thức CASE và biểu thức CASE tìm kiếm. Cả hai dạng biểu thức CASE đều hỗ trợ một câu lệnh ELSE tùy chọn.

Bởi vì CASE là một biểu thức, bạn có thể sử dụng nó trong bất kỳ mệnh đề chấp nhận một biểu thức như SELECT, WHERE, GROUP BYHAVING.

Biểu thức CASE đơn giản trong SQL Server

Sau đây là cú pháp của biểu thức CASE đơn giản:

CASE input   
    WHEN e1 THEN r1
    WHEN e2 THEN r2
    ...
    WHEN en THEN rn
    [ ELSE re ]   
END

Biểu thức CASE đơn giản so sánh biểu thức đầu vào (input) với biểu thức (ei) trong mỗi mệnh đề WHEN có bằng nhau không. Nếu biểu thức đầu vào bằng một biểu thức (ei) trong mệnh đề WHEN, thì kết quả (ri) trong mệnh đề THEN tương ứng được trả về.

Nếu biểu thức đầu vào không bằng bất kỳ biểu thức nào và có sẵn mệnh đềELSE, biểu thức CASE sẽ trả về kết quả trong mệnh đề ELSE (re).

Trong trường hợp mệnh đề ELSE bị bỏ qua và biểu thức đầu vào không bằng bất kỳ biểu thức nào trong mệnh đề WHEN, biểu thức CASE sẽ trả về NULL.

Sử dụng biểu thức CASE đơn giản trong mệnh đề SELECT

Xem bảng sales.orders sau từ cơ sở dữ liệu mẫu:

Sử dụng biểu thức CASE đơn giản trong mệnh đề SELECT

Ví dụ này sử dụng hàm COUNT() với mệnh đề GROUP BY để trả về số đơn đặt hàng cho từng trạng thái của đơn đặt hàng:

SELECT    
    order_status, 
    COUNT(order_id) order_count
FROM    
    sales.orders
WHERE 
    YEAR(order_date) = 2018
GROUP BY 
    order_status;

Đây là đầu ra:

Sử dụng biểu thức CASE đơn giản trong mệnh đề SELECT

Các giá trị trong cột order_status là số, không có ý nghĩa trong trường hợp này. Để làm cho đầu ra dễ hiểu hơn, bạn có thể sử dụng biểu thức CASE đơn giản như được hiển thị trong truy vấn sau:

SELECT    
    CASE order_status
        WHEN 1 THEN 'Pending'
        WHEN 2 THEN 'Processing'
        WHEN 3 THEN 'Rejected'
        WHEN 4 THEN 'Completed'
    END AS order_status, 
    COUNT(order_id) order_count
FROM    
    sales.orders
WHERE 
    YEAR(order_date) = 2018
GROUP BY 
    order_status;

Hình ảnh sau đây cho thấy kết quả đầu ra:

Sử dụng biểu thức CASE đơn giản trong mệnh đề SELECT

Sử dụng biểu thức CASE đơn giản trong hàm tổng hợp

Xem truy vấn sau:

SELECT    
    SUM(CASE
            WHEN order_status = 1
            THEN 1
            ELSE 0
        END) AS 'Pending', 
    SUM(CASE
            WHEN order_status = 2
            THEN 1
            ELSE 0
        END) AS 'Processing', 
    SUM(CASE
            WHEN order_status = 3
            THEN 1
            ELSE 0
        END) AS 'Rejected', 
    SUM(CASE
            WHEN order_status = 4
            THEN 1
            ELSE 0
        END) AS 'Completed', 
    COUNT(*) AS Total
FROM    
    sales.orders
WHERE 
    YEAR(order_date) = 2018;

Đây là đầu ra:

Bạn có thể xem chi tiết về biểu thức CASE trong SQL Server ở bài viết sau:

CASE trong SQL Server
Trong hướng dẫn này, bạn sẽ học cách sử dụng biểu thức CASE trong SQL Server để thêm logic if-else vào các truy vấn SQL.

Biểu thức COALESCE trong SQL Server

Biểu thức COALESCE trong SQL Server chấp nhận một tập các đối số, đánh giá chúng theo trình tự và trả về đối số không rỗng đầu tiên.

Sau đây minh họa cú pháp của biểu thức COALESCE:

COALESCE(e1,[e2,...,en])

Trong cú pháp này, e1, e2,… en là các biểu thức vô hướng trả về các giá trị vô hướng (scalar value). Biểu thức COALESCE trả về biểu thức không NULL đầu tiên. Nếu tất cả các biểu thức đánh giá là NULL, thì biểu thức COALESCE trả về NULL;

Bởi vì COALESCE là một biểu thức, bạn có thể sử dụng nó trong bất kỳ mệnh đề chấp nhận một biểu thức như SELECT, WHERE, GROUP BYHAVING.

Hãy xem các ví dụ thực tế về việc sử dụng biểu thức COALESCE:

Sử dụng biểu thức COALESCE trong SQL Server với dữ liệu chuỗi ký tự

Ví dụ sau sử dụng biểu thức COALESCE để trả về chuỗi 'Hi' vì nó là đối số không rỗng đầu tiên:

SELECT 
    COALESCE(NULL, 'Hi', 'Hello', NULL) result;

Đây là đầu ra:

result
------
Hi

(1 row affected)

Sử dụng biểu thức COALESCE trong SQL Server với dữ liệu số

Ví dụ này sử dụng biểu thức COALESCE để đánh giá danh sách các đối số và trả về số đầu tiên:

SELECT 
    COALESCE(NULL, NULL, 100, 200) result;

Kết quả như sau:

result
-----------
100

(1 row affected)

Sử dụng biểu thức COALESCE trong SQL Server để thay thế NULL bằng các giá trị mới

Xem bảng sales.customers sau từ cơ sở dữ liệu mẫu.

Sử dụng biểu thức COALESCE trong SQL Server để thay thế NULL bằng các giá trị mới

Truy vấn sau trả về tên, họ, điện thoại và email của tất cả khách hàng:

SELECT 
    first_name, 
    last_name, 
    phone, 
    email
FROM 
    sales.customers
ORDER BY 
    first_name, 
    last_name;

Đây là kết quả một phần:

Cột phone sẽ có giá trị NULL nếu khách hàng không có số điện thoại ghi trong bảng sales.customers.

Để làm cho đầu ra thân thiện hơn với doanh nghiệp, bạn có thể sử dụng biểu thức COALESCE để thay thế giá trị NULL bằng chuỗi N/A (không có sẵn) như được hiển thị trong truy vấn sau:

SELECT 
    first_name, 
    last_name, 
    COALESCE(phone,'N/A') phone, 
    email
FROM 
    sales.customers
ORDER BY 
    first_name, 
    last_name;

Hình ảnh sau đây cho thấy đầu ra một phần:

Bạn có thể xem thêm về biểu thức COALESCE trong SQL Server ở bài viết sau:

COALESCE trong SQL Server
Trong hướng dẫn này, bạn sẽ học cách sử dụng biểu thức COALESCE trong SQL Server để xử lý giá trị NULL trong các truy vấn.

Biểu thức NULLIF trong SQL Server

Biểu thức NULLIF chấp nhận hai đối số và trả về NULL nếu hai đối số bằng nhau. Nếu không, nó trả về biểu thức đầu tiên.

Sau đây là cú pháp của biểu thức NULLIF:

NULLIF(expression1, expression2)

Trong cú pháp này, expression1expression2 là các biểu thức vô hướng. Nó có nghĩa là mỗi biểu thức trong số chúng trả về một giá trị vô hướng (scalar value).

Chúng tôi khuyên bạn không nên sử dụng các hàm phụ thuộc vào thời gian như hàm RAND() trong biểu thức NULLIF. Bởi vì điều này có thể khiến biểu thức được đánh giá hai lần và mang lại kết quả khác nhau từ hai lần gọi hàm.

Hãy lấy một số ví dụ về việc sử dụng biểu thức NULLIF trong SQL Server.

Sử dụng biểu thức NULLIF với các dữ liệu số

Ví dụ này trả về NULL vì đối số đầu tiên bằng đối số thứ hai:

SELECT 
    NULLIF(10, 10) result;

Đây là đầu ra:

result
------
NULL

(1 row affected)

Tuy nhiên, ví dụ sau trả về đối số đầu tiên vì hai đối số không bằng nhau:

SELECT 
    NULLIF(20, 10) result;

Kết quả như sau:

result
------
20

(1 row affected)

Sử dụng biểu thức NULLIF với dữ liệu chuỗi

Ví dụ sau sử dụng biểu thức NULLIF. Nó trả về NULL vì chuỗi đầu tiên bằng chuỗi thứ hai:

SELECT 
    NULLIF('Hello', 'Hello') result;

Đây là đầu ra:

result
------
NULL

(1 row affected)

Ví dụ này trả về đối số đầu tiên vì cả hai đối số không giống nhau:

SELECT 
    NULLIF('Hello', 'Hi') result;

Sau đây là kết quả đầu ra:

result
------
Hello

(1 row affected)

Bạn có thể xem chi tiết về biểu thức NULLIF trong SQL Server ở bài viết sau:

NULLIF trong SQL Server
Trong hướng dẫn này, bạn sẽ học cách sử dụng biểu thức NULLIF trong SQL Server để trả về NULL nếu đối số đầu tiên bằng đối số thứ hai.

Trong hướng dẫn này, bạn đã học cách sử dụng biểu thức CASE, COALESCENULLIF trong SQL Server.

SQL Server
Bài Viết Liên Quan:
Sequence trong SQL Server
Trung Nguyen 31/07/2021
Sequence trong SQL Server

Trong hướng dẫn này, bạn sẽ tìm hiểu về các đối tượng Sequence trong SQL Server để tạo ra một chuỗi các giá trị số dựa trên một đặc tả cụ thể.

Cột Identity trong SQL Server
Trung Nguyen 30/07/2021
Cột Identity trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng thuộc tính IDENTITY trong SQL Server để thêm cột định danh vào bảng.

CREATE TABLE trong SQL Server
Trung Nguyen 29/07/2021
CREATE TABLE trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng câu lệnh CREATE TABLE trong SQL Server để tạo một bảng mới.

Ràng buộc NOT NULL trong SQL Server
Trung Nguyen 28/07/2021
Ràng buộc NOT NULL trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng ràng buộc NOT NULL trong SQL Server để đảm bảo một cột không chứa dữ liệu NULL.