SQL là một ngôn ngữ khai báo. nó không cung cấp khả năng kiểm soát luồng chương trình như if
đối với các chương trình bắt buộc. Tuy nhiên, SQL có một cái gì đó tương tự. biểu thức
CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
0. Là một biểu thức—chứ không phải là một cấu trúc điều khiển—có nghĩa là CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
0 thay đổi kết quả của các công thức [biểu thức] dựa trên các điều kiện. Việc sử dụng nó tương tự như toán tử bậc ba CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
2 trong các ngôn ngữ lập trình kháccú pháp
Cú pháp của biểu thức
CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
0 rất linh hoạt và cho phép viết tắt một số. Ví dụ sau đây cho thấy cú pháp ở dạng chung nhất—cái gọi là trường hợp tìm kiếm. Các biến thể khác là chữ viết tắt cũng có thể được viết là trường hợp tìm kiếm. Hơn nữa, trường hợp tìm kiếm hoạt động trong hầu hết các cơ sở dữ liệu SQL. Từ quan điểm đó, người ta có thể nói rằng trường hợp tìm kiếm là cú pháp CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
0 duy nhất bạn thực sự cần nhớCASE WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
Lưu ý rằng
CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
5 là một điều kiện giống như điều kiện trong mệnh đề CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
6—ví dụ. CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
7. Do đó, trường hợp tìm kiếm tên. CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
8 là một biểu thức SQL tùy ý. nó có thể là một biểu thức đơn giản như tên hằng hoặc tên cột, hoặc cũng có thể là một biểu thức SQL phức tạp chứa các truy vấn con và tất nhiên là các biểu thức CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
0 lồng nhauMột biểu thức
CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
0 có thể chứa một số cặp COALESCE[a, b]
1-COALESCE[a, b]
2. Điều này cho phép nhiều điều kiện ngay cả khi không lồng—không giống như toán tử CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
2 trong các ngôn ngữ lập trình khác. Mặt khác, việc lồng cung cấp quyền ưu tiên vốn có giữa các điều kiện. Biểu thức CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
0 phẳng không có quyền ưu tiên cố hữu như vậy. Để thu hẹp khoảng cách đó, SQL sử dụng thứ tự xuất hiện các điều kiện trong biểu thức CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
0 để xác định mức độ ưu tiên của chúng. Đơn giản thôi. Biểu thức CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
0 đánh giá bằng CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
8 của giá trị đúng đầu tiên CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
5Trước khi kết thúc biểu thức
CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
0 với CASE WHEN a IS NOT NULL THEN a
ELSE b
END
0, mệnh đề tùy chọn CASE WHEN a IS NOT NULL THEN a
ELSE b
END
1 có thể được sử dụng. CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
8 của CASE WHEN a IS NOT NULL THEN a
ELSE b
END
1 được sử dụng nếu không có CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
5 là đúng. Nếu CASE WHEN a IS NOT NULL THEN a
ELSE b
END
1 bị bỏ qua, thì ____21_______6 là ẩnTiêu chuẩn SQL không chỉ định cách xử lý biểu thức
CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
0—nó chỉ xác định kết quả. Trên thực tế, có những sản phẩm đôi khi xử lý mệnh đề COALESCE[a, b]
2 ngay cả trước mệnh đề COALESCE[a, b]
1 tương ứng [đọc lại. COALESCE[a, b]
2 trước COALESCE[a, b]
1]. Tất nhiên, những sản phẩm này cuối cùng cũng mang lại kết quả phù hợp—họ chỉ loại bỏ những sản phẩm được đánh giá không cần thiết. Cuối cùng, đây là kết quả của bản chất khai báo của SQL. cơ sở dữ liệu—chứ không phải lập trình viên—quyết định làm thế nào để có được kết quả chính xác. Bạn sẽ tìm thấy thêm về điều này trongMẹo
Không sử dụng các hàm không xác định hoặc các hàm thay đổi dữ liệu trong biểu thức
CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
0. Quá trình đánh giá không xác định có thể có tác dụng phụ không thể đoán trướcMẫu đơn giản
Để tránh lặp đi lặp lại một toán hạng được sử dụng trong tất cả các mệnh đề
COALESCE[a, b]
1, tiêu chuẩn SQL đưa ra cái gọi là trường hợp đơn giảnCASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
Trường hợp đơn giản chia
CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
5 thành hai phần. toán hạng chung [e. g. , tên cột] được đặt ngay sau từ khóa CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
0. Mặt khác của sự so sánh vẫn còn trong mệnh đề COALESCE[a, b]
1. Toán tử so sánh bằng [______39_______7] được ngụ ýTiêu chuẩn xác định trường hợp đơn giản là sự chuyển đổi sang trường hợp được tìm kiếm—các quy tắc được mô tả ở trên vẫn hợp lệ
thận trọng
Bạn không thể sử dụng trường hợp đơn giản để kiểm tra cho
x / NULLIF[y, 0]
8 vì nó luôn sử dụng toán tử bằng [x / NULLIF[y, 0]
7]. Đó là vì điều kiện x / CASE WHEN y = 0 THEN null
ELSE y
END
0 không đúng—do đó, mệnh đề x / CASE WHEN y = 0 THEN null
ELSE y
END
1 không bao giờ được áp dụng. Nếu x / CASE WHEN y = 0 THEN null
ELSE y
END
2 là x / NULLIF[y, 0]
8, điều khoản CASE WHEN a IS NOT NULL THEN a
ELSE b
END
1 sẽ được áp dụngChữ viết tắt để đối phó với x / NULLIF[y, 0]
8
x / NULLIF[y, 0]
SQL cung cấp hai chữ viết tắt
CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
0 để đối phó với x / NULLIF[y, 0]
8. x / CASE WHEN y = 0 THEN null
ELSE y
END
8 và x / CASE WHEN y = 0 THEN null
ELSE y
END
9. Cả hai đều được sử dụng giống như các hàm và không sử dụng các từ khóa CASE
WHEN THEN
[WHEN THEN
...]
[ELSE ]
END
0, COALESCE[a, b]
1, COALESCE[a, b]
2, CASE WHEN a IS NOT NULL THEN a
ELSE b
END
1 và CASE WHEN a IS NOT NULL THEN a
ELSE b
END
0CASE x WHEN