TRƯỜNG HỢP KHI không có trong MySQL

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ác

cú 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 nhau

Mộ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
5

Trướ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à ẩn

Tiê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 trong

Mẹ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ước

Mẫ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ản

CASE 
     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ụng

Chữ viết tắt để đối phó với
x / NULLIF[y, 0]
8

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
0

CASE x WHEN 

Chủ Đề