Hướng dẫn MySQL này giải thích cách sử dụng câu lệnh IF-THEN-ELSE trong MySQL với cú pháp và ví dụ
Sự miêu tả
Trong MySQL, câu lệnh IF-THEN-ELSE được sử dụng để thực thi mã khi điều kiện là TRUE hoặc thực thi mã khác nếu điều kiện ước tính là FALSE
cú pháp
Cú pháp của câu lệnh IF-THEN-ELSE trong MySQL là
IF condition1 THEN {...statements to execute when condition1 is TRUE...} [ ELSEIF condition2 THEN {...statements to execute when condition1 is FALSE and condition2 is TRUE...} ] [ ELSE {...statements to execute when both condition1 and condition2 are FALSE...} ] END IF;ELSEIFTùy chọn. Bạn sẽ sử dụng điều kiện ELSEIF khi bạn muốn thực hiện một tập hợp các câu lệnh khi điều kiện thứ hai [nghĩa là. điều kiện2] là ĐÚNG. KHÁCTùy chọn. Bạn sẽ sử dụng điều kiện ELSE khi bạn muốn thực thi một tập hợp các câu lệnh khi không có điều kiện IF hoặc ELSEIF nào được đánh giá là TRUE
Ghi chú
- Khi một điều kiện được tìm thấy là TRUE, câu lệnh IF-THEN-ELSE sẽ thực thi mã tương ứng và không đánh giá các điều kiện nữa
- Nếu không có điều kiện nào được đáp ứng, phần ELSE của câu lệnh IF-THEN-ELSE sẽ được thực thi
- Điều quan trọng cần lưu ý là các phần ELSEIF và ELSE là tùy chọn
Ví dụ
Sau đây là ví dụ sử dụng câu lệnh IF-THEN-ELSE trong hàm MySQL
DELIMITER // CREATE FUNCTION IncomeLevel [ monthly_value INT ] RETURNS varchar[20] BEGIN DECLARE income_level varchar[20]; IF monthly_value 4000 AND monthly_value 200 THEN CALL apply_free_shipping[sale_id]; END IF ;6 sẽ chỉ được thực thi nếu biểu thức được liên kết ước tính là TRUE. Các biểu thức như 1=1 hoặc 2>1 sẽ đánh giá là TRUE. Các biểu thức như 1>3 sẽ đánh giá là FALSE
Tuy nhiên, nếu bạn đang thực hiện một thao tác trên một hoặc nhiều biến và một trong các biến có giá trị NULL, thì kết quả của biểu thức có thể là NULL—không phải TRUE cũng không phải FALSE. Điều này có thể dẫn đến một số kết luận sai lầm nếu mã của bạn giả định rằng các biểu thức không TRUE nhất thiết phải là FALSE hoặc ngược lại. Vì vậy, ví dụ: trong , nếu chúng tôi không thể tìm thấy '_______15_______7' hoặc '
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF ;8' trong chuỗi phiên bản, chúng tôi cho rằng bản phát hành đó đang được sản xuất. Tuy nhiên, nếu
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF ;9 là NULL, thì điều kiện
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; CALL apply_discount[sale_id,10]; END IF;0 sẽ luôn kích hoạt, mặc dù chúng tôi thực sự không có cơ sở để đưa ra bất kỳ khẳng định nào như vậy
Ví dụ 4-5. Giả định sai rằng NOT TRUE = FALSE
IF [INSTR[l_version_string,'alpha']>0] THEN SELECT 'Alpha release of MySQL'; ELSEIF [INSTR[l_version_string,'beta']>0] THEN SELECT 'Beta release of MySQL'; ELSE SELECT 'Production release of MySQL'; END IF;
Mẹo
Đừng cho rằng kết quả của một biểu thức là TRUE hoặc FALSE. Nó cũng có thể đánh giá là NULL [UNKNOWN] nếu bất kỳ biến tham gia nào là NULL
Cũng lưu ý rằng bất kỳ biểu thức nào trả về giá trị số—hoặc chuỗi trông giống như số—có thể cho kết quả TRUE, FALSE hoặc NULL. các quy tắc là
Nếu giá trị tuyệt đối của một biểu thức số là 1 hoặc lớn hơn, thì nó sẽ được đánh giá là TRUE bởi câu lệnh
IF
4 hoặcexpression
THENstatements
END IF;IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF ;
6. Lưu ý rằng thuật ngữ “giá trị tuyệt đối” có nghĩa là cả 1 và -1 sẽ đánh giá là TRUENếu giá trị của biểu thức số là 0, thì nó sẽ đánh giá là FALSE
Kết hợp NẾU-THEN đơn giản
Ở dạng đơn giản nhất,
IF4 có thể được sử dụng để chỉ định một tập hợp các câu lệnh chỉ thực hiện nếu một điều kiện được đánh giá là TRUE. Cú pháp của loại câu lệnhexpression
THENstatements
END IF;
IF4 này như sauexpression
THENstatements
END IF;
IFexpression
THENstatements
END IF;
hiển thị một câu lệnh
IF4 đơn giảnexpression
THENstatements
END IF;
Ví dụ 4-6. Ví dụ về câu lệnh IF đơn giản
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF ;
Chúng ta có thể bao gồm nhiều câu lệnh giữa các mệnh đề
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; CALL apply_discount[sale_id,10]; END IF;6 và
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; CALL apply_discount[sale_id,10]; END IF;7, như trong
Ví dụ 4-7. Câu lệnh IF nhiều câu lệnh
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; CALL apply_discount[sale_id,10]; END IF;
Như đã trình bày trong phần , chúng ta cũng có thể bao gồm bất kỳ câu lệnh thực thi nào khác bên trong câu lệnh
IF4, chẳng hạn như các cấu trúc vòng lặp, câu lệnhexpression
THENstatements
END IF;
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; CALL apply_discount[sale_id,10]; END IF;9 và các câu lệnh
IF4 khác [mặc dù, như chúng ta sẽ thấy sau này, tốt nhất là tránh lồng các câu lệnhexpression
THENstatements
END IF;
IF4 theo cách này nếuexpression
THENstatements
END IF;
Ví dụ 4-8. Câu lệnh IF lồng nhau
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; IF sale_value > 500 THEN CALL apply_discount[sale_id,20]; END IF; END IF;
Không cần thiết phải ngắt câu lệnh
IF4 trên nhiều dòng;expression
THENstatements
END IF;
Ví dụ 4-9. Định dạng thay thế cho câu lệnh IF
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF; IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF; IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF;
Có thể đặt một câu lệnh
IF4 rất đơn giản trên một dòng, nhưng chắc chắn không phải là cách tốt để làm điều này đối với các cấu trúcexpression
THENstatements
END IF;
IF4 phức tạp hoặc lồng nhau. Chẳng hạn, cái nào dễ đọc, dễ hiểu và dễ bảo trì hơn?expression
THENstatements
END IF;
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; IF sale_value > 500 THEN CALL apply_discount[sale_id,20]; END IF; END IF;
Hoặc cái này
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; IF sale_value > 500 THEN CALL apply_discount[sale_id,20];END IF;END IF;
Một số lập trình viên muốn đặt mệnh đề
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; CALL apply_discount[sale_id,10]; END IF;6 trên một dòng riêng, như sau
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF;
Nhưng đây thực sự là vấn đề sở thích cá nhân và/hoặc tiêu chuẩn lập trình
Mẹo
Đối với bất kỳ câu lệnh
IF4 không cần thiết nào, hãy sử dụng thụt lề và định dạng để đảm bảo rằng logic của câu lệnhexpression
THENstatements
END IF;
IF4 của bạn dễ hiểuexpression
THENstatements
END IF;
Việc thêm điều kiện
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; CALL apply_discount[sale_id,10]; END IF;0 vào câu lệnh
IF4 của bạn cho phép bạn chỉ định câu lệnh sẽ thực thi nếu điều kiệnexpression
THENstatements
END IF;
IF4 KHÔNG ĐÚNG. Chúng tôi sẽ nhấn mạnh một lần nữa—bởi vì nó quan trọng—rằng KHÔNG ĐÚNG không phải lúc nào cũng có nghĩa là SAI. Nếu điều kiện câu lệnhexpression
THENstatements
END IF;
IF4 đánh giá là NULL, thì câu lệnhexpression
THENstatements
END IF;
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; CALL apply_discount[sale_id,10]; END IF;0 sẽ vẫn được thực thi;
Một khối
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF; IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF; IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF;5 có cú pháp như sau
IF [INSTR[l_version_string,'alpha']>0] THEN SELECT 'Alpha release of MySQL'; ELSEIF [INSTR[l_version_string,'beta']>0] THEN SELECT 'Beta release of MySQL'; ELSE SELECT 'Production release of MySQL'; END IF;0
Vì vậy, trong , chúng tôi áp dụng phí vận chuyển cho đơn hàng nếu đơn hàng đó dưới $200;
Ví dụ 4-10. Ví dụ IF-THEN ELSE đơn giản
IF [INSTR[l_version_string,'alpha']>0] THEN SELECT 'Alpha release of MySQL'; ELSEIF [INSTR[l_version_string,'beta']>0] THEN SELECT 'Beta release of MySQL'; ELSE SELECT 'Production release of MySQL'; END IF;1
Câu lệnh IF-THEN-ELSEIF-ELSE
Cú pháp đầy đủ của câu lệnh
IF4 cho phép xác định nhiều điều kiện. Điều kiện đầu tiên đánh giá là TRUE sẽ thực thi. Nếu không có câu nào đánh giá là TRUE, thì mệnh đềexpression
THENstatements
END IF;
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; CALL apply_discount[sale_id,10]; END IF;0 [nếu có] sẽ thực thi. Cú pháp của một câu lệnh
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF; IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF; IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF;8 trông như thế này
IF [INSTR[l_version_string,'alpha']>0] THEN SELECT 'Alpha release of MySQL'; ELSEIF [INSTR[l_version_string,'beta']>0] THEN SELECT 'Beta release of MySQL'; ELSE SELECT 'Production release of MySQL'; END IF;2
Bạn có thể có bao nhiêu điều kiện
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF ;6 tùy thích
Các điều kiện không nhất thiết phải loại trừ lẫn nhau. Nghĩa là, nhiều điều kiện có thể đánh giá là TRUE. Điều kiện đầu tiên đánh giá TRUE là điều kiện thực thi. Tạo các điều kiện chồng chéo như thế này có thể hữu ích, nhưng bạn phải rất cẩn thận khi sắp xếp các điều kiện. Chẳng hạn, hãy xem xét câu lệnh
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; IF sale_value > 500 THEN CALL apply_discount[sale_id,20]; END IF; END IF;0 được hiển thị trong
Ví dụ 4-11. Ví dụ về khối IF-ELSEIF với các điều kiện chồng chéo
IF [INSTR[l_version_string,'alpha']>0] THEN SELECT 'Alpha release of MySQL'; ELSEIF [INSTR[l_version_string,'beta']>0] THEN SELECT 'Beta release of MySQL'; ELSE SELECT 'Production release of MySQL'; END IF;3
Ý định của đoạn mã này là rõ ràng. áp dụng giao hàng miễn phí cho tất cả các đơn hàng trên 200 đô la và thêm chiết khấu 20% cho khách hàng ưu tiên. Tuy nhiên, vì điều kiện đầu tiên sẽ được đánh giá là ĐÚNG cho tất cả các đơn hàng trên 200 đô la, nên điều kiện
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF ;6 sẽ không được đánh giá cho bất kỳ đơn hàng nào trên 200 đô la và những khách hàng ưu tiên của chúng tôi sẽ không được giảm giá. Không giảm giá cho khách hàng ưu tiên có nghĩa là không có tiền thưởng cuối năm cho lập trình viên thủ tục được lưu trữ của chúng tôi
Có một số cách tốt hơn để viết tuyên bố này. vì một điều, chúng ta có thể chuyển điều kiện
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF ;6 vào mệnh đề
IF4 để đảm bảo rằng nó được đánh giá trước;expression
THENstatements
END IF;
Ví dụ 4-12. Hai cách sửa lỗi logic trong ví dụ trước
IF [INSTR[l_version_string,'alpha']>0] THEN SELECT 'Alpha release of MySQL'; ELSEIF [INSTR[l_version_string,'beta']>0] THEN SELECT 'Beta release of MySQL'; ELSE SELECT 'Production release of MySQL'; END IF;4
Cả hai lựa chọn thay thế được hiển thị trong đều hoàn toàn hợp lệ. Nói chung, chúng tôi muốn tránh các câu lệnh
IF4 lồng nhau nếu có thể, nhưng nếu có nhiều đánh giá bổ sung mà chúng tôi cần tiến hành khiexpression
THENstatements
END IF;
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; IF sale_value > 500 THEN CALL apply_discount[sale_id,20]; END IF; END IF;7 lớn hơn $200, thì có thể thực hiện kiểm tra
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; IF sale_value > 500 THEN CALL apply_discount[sale_id,20]; END IF; END IF;7 một lần, sau đó kiểm tra riêng lẻ cho . Vì vậy, giả sử các quy tắc kinh doanh của chúng tôi quy định rằng đối với các đơn hàng trên 200 đô la, chúng tôi sẽ giao hàng miễn phí, cùng với chiết khấu thay đổi dựa trên trạng thái của khách hàng trong chương trình khách hàng thân thiết của chúng tôi. Logic trong một khối
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; IF sale_value > 500 THEN CALL apply_discount[sale_id,20]; END IF; END IF;0 có thể trông giống như được hiển thị trong
Ví dụ 4-13. Khối IF với nhiều điều kiện dư thừa
IF [INSTR[l_version_string,'alpha']>0] THEN SELECT 'Alpha release of MySQL'; ELSEIF [INSTR[l_version_string,'beta']>0] THEN SELECT 'Beta release of MySQL'; ELSE SELECT 'Production release of MySQL'; END IF;5
Trong trường hợp này, sự lặp lại liên tục của điều kiện
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; IF sale_value > 500 THEN CALL apply_discount[sale_id,20]; END IF; END IF;7 và lệnh gọi
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; IF sale_value > 500 THEN CALL apply_discount[sale_id,20];END IF;END IF;1 thực sự làm suy yếu khả năng đọc logic của chúng ta—cũng như áp đặt chi phí hoạt động [xem Chương 22]. Có thể tốt hơn nếu sử dụng cấu trúc
IF4 lồng nhau để làm rõ rằng mọi người đều được giao hàng miễn phí cho các đơn hàng trên 200 đô la và sau đó chiết khấu chỉ được áp dụng dựa trên trạng thái khách hàng thân thiết. hiển thị triển khaiexpression
THENstatements
END IF;
IF4 lồng nhauexpression
THENstatements
END IF;
Ví dụ 4-14. Sử dụng IF lồng nhau để tránh đánh giá dư thừa
IF [INSTR[l_version_string,'alpha']>0] THEN SELECT 'Alpha release of MySQL'; ELSEIF [INSTR[l_version_string,'beta']>0] THEN SELECT 'Beta release of MySQL'; ELSE SELECT 'Production release of MySQL'; END IF;6
Câu lệnh
IF5 là một câu lệnh điều khiển luồng hoặc thực thi có điều kiện thay thế. Bất cứ điều gì có thể được thực hiện với câu lệnhexpression
THENstatements
END IF;
IF5 đều có thể được thực hiện với câu lệnhexpression
THENstatements
END IF;
IF4 [và ngược lại], nhưng câu lệnhexpression
THENstatements
END IF;
IF5 thường dễ đọc và hiệu quả hơn khi cần đánh giá nhiều điều kiện, đặc biệt là khi tất cả các điều kiện đều so sánh kết quả đầu ra từ một biểu thức duy nhấtexpression
THENstatements
END IF;
IF5 tuyên bố có thể có hai hình thức. Câu lệnh đầu tiên—đôi khi được gọi là câu lệnhexpression
THENstatements
END IF;
IF5 đơn giản—so sánh đầu ra của một biểu thức có nhiều điều kiệnexpression
THENstatements
END IF;
IF [INSTR[l_version_string,'alpha']>0] THEN SELECT 'Alpha release of MySQL'; ELSEIF [INSTR[l_version_string,'beta']>0] THEN SELECT 'Beta release of MySQL'; ELSE SELECT 'Production release of MySQL'; END IF;7
Cú pháp này hữu ích khi chúng ta đang kiểm tra đầu ra của một số biểu thức dựa trên một tập hợp các giá trị riêng biệt. Chẳng hạn, chúng ta có thể kiểm tra trạng thái trung thành của khách hàng từ ví dụ trước bằng cách sử dụng câu lệnh
IF5 đơn giản được hiển thị trongexpression
THENstatements
END IF;
Ví dụ 4-15. Ví dụ về câu lệnh CASE đơn giản
IF [INSTR[l_version_string,'alpha']>0] THEN SELECT 'Alpha release of MySQL'; ELSEIF [INSTR[l_version_string,'beta']>0] THEN SELECT 'Beta release of MySQL'; ELSE SELECT 'Production release of MySQL'; END IF;8
Như với lệnh
IF4, bạn có thể chỉ định nhiều câu lệnhexpression
THENstatements
END IF;
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF;2 và bạn có thể chỉ định mệnh đề
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; CALL apply_discount[sale_id,10]; END IF;0 sẽ thực thi nếu không có điều kiện nào khác áp dụng
Tuy nhiên, điều quan trọng là phải nhận ra rằng một tuyên bố
IF5 sẽ đưa ra một ngoại lệ nếu không có điều kiện nào được áp dụng. Điều này có nghĩa là nếuexpression
THENstatements
END IF;
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF;5 không phải là một trong số '
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF;6', '
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF;7', '
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF;8' hoặc '
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; END IF;9' thì ngoại lệ thời gian chạy sau đây sẽ xảy ra
IF [INSTR[l_version_string,'alpha']>0] THEN SELECT 'Alpha release of MySQL'; ELSEIF [INSTR[l_version_string,'beta']>0] THEN SELECT 'Beta release of MySQL'; ELSE SELECT 'Production release of MySQL'; END IF;9
Chúng ta có thể tạo một trình xử lý ngoại lệ để bỏ qua lỗi này [như được mô tả trong Chương 6], nhưng có lẽ cách tốt hơn là viết mã một mệnh đề
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; CALL apply_discount[sale_id,10]; END IF;0 để đảm bảo rằng tất cả các điều kiện có thể được xử lý. Vì vậy, có lẽ chúng ta nên điều chỉnh ví dụ trước để bao gồm một mệnh đề
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; CALL apply_discount[sale_id,10]; END IF;0 áp dụng chiết khấu bằng 0 cho khách hàng không đáp ứng các điều kiện trên
Mẹo
Nếu không có câu lệnh nào trong số
IF5 phù hợp với điều kiện đầu vào, thìexpression
THENstatements
END IF;
IF5 sẽ gây ra lỗi MySQL 1339. Bạn nên xây dựng một trình xử lý lỗi để bỏ qua lỗi này hoặc đảm bảo rằng ngoại lệ không bao giờ xảy ra bằng cách bao gồm mệnh đềexpression
THENstatements
END IF;
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; CALL apply_discount[sale_id,10]; END IF;0 trong câu lệnh
IF5 của bạnexpression
THENstatements
END IF;
Câu lệnh
IF5 đơn giản rất hữu ích khi so sánh giá trị của một biểu thức với một loạt các giá trị cụ thể. Tuy nhiên, câu lệnhexpression
THENstatements
END IF;
IF5 đơn giản không thể khớp các phạm vi một cách dễ dàng hoặc tự nhiên hoặc xử lý các điều kiện phức tạp hơn liên quan đến nhiều biểu thức. Đối với những “trường hợp” phức tạp hơn này, chúng ta có thể sử dụng câu lệnh “đã tìm kiếm”expression
THENstatements
END IF;
IF5, được mô tả trong phần tiếp theoexpression
THENstatements
END IF;
Câu lệnh CASE “Đã tìm kiếm”
Câu lệnh
IF5 được tìm kiếm có chức năng tương đương với một khốiexpression
THENstatements
END IF;
IF [INSTR[l_version_string,'alpha']>0] THEN SELECT 'Alpha release of MySQL'; ELSEIF [INSTR[l_version_string,'beta']>0] THEN SELECT 'Beta release of MySQL'; ELSE SELECT 'Production release of MySQL'; END IF;10. Câu lệnh
IF5 được tìm kiếm có cú pháp như sauexpression
THENstatements
END IF;
IF0expression
THENstatements
END IF;
Sử dụng cấu trúc
IF5 đã tìm kiếm, chúng tôi có thể triển khai logic giảm giá và miễn phí vận chuyển mà chúng tôi đã triển khai trước đó bằng cách sử dụngexpression
THENstatements
END IF;
IF4. Bản dịch trực tiếp logic giảm giá bán hàng và giao hàng miễn phí của chúng tôi bằng cách sử dụng câu lệnhexpression
THENstatements
END IF;
IF5 đã tìm kiếm được hiển thị trongexpression
THENstatements
END IF;
Ví dụ 4-16. Ví dụ về câu lệnh CASE đã tìm kiếm
IF1expression
THENstatements
END IF;
Tuy nhiên, hãy nhớ rằng nếu không có mệnh đề nào trong số các mệnh đề
IF [INSTR[l_version_string,'alpha']>0] THEN SELECT 'Alpha release of MySQL'; ELSEIF [INSTR[l_version_string,'beta']>0] THEN SELECT 'Beta release of MySQL'; ELSE SELECT 'Production release of MySQL'; END IF;15 khớp với nhau thì sẽ xảy ra lỗi 1339. Do đó, mã này sẽ gây ra lỗi nghiêm trọng nếu đơn đặt hàng dưới 200 đô la hoặc khách hàng không tham gia chương trình khách hàng thân thiết của chúng tôi—một kết quả không mấy vui vẻ. Vì vậy, chúng ta nên bảo vệ quy tắc của mình—và sự đảm bảo công việc của chúng ta—bằng cách bao gồm một điều khoản
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; CALL apply_discount[sale_id,10]; END IF;0 như trong
Ví dụ 4-17. Thêm mệnh đề ELSE giả vào ví dụ CASE đã tìm kiếm của chúng tôi
IF2expression
THENstatements
END IF;
Lưu ý rằng vì MySQL thiếu câu lệnh
IF [INSTR[l_version_string,'alpha']>0] THEN SELECT 'Alpha release of MySQL'; ELSEIF [INSTR[l_version_string,'beta']>0] THEN SELECT 'Beta release of MySQL'; ELSE SELECT 'Production release of MySQL'; END IF;17 [không làm gì] trong ngôn ngữ chương trình được lưu trữ, nên chúng tôi phải thêm một câu lệnh giả—nhưng câu lệnh này có chi phí không đáng kể
Như với việc triển khai logic này của chúng tôi đối với
IF4, chúng tôi cũng có thể sử dụng các câu lệnhexpression
THENstatements
END IF;
IF5 lồng nhau để thực hiện cùng một logic với sự rõ ràng hơn nhiều. Trong chúng tôi kết hợp các câu lệnhexpression
THENstatements
END IF;
IF5 đơn giản và được tìm kiếm, đồng thời bao gồm một trình xử lý “không tìm thấy” để tránh phải bao gồm các câu lệnhexpression
THENstatements
END IF;
IF sale_value > 200 THEN CALL apply_free_shipping[sale_id]; CALL apply_discount[sale_id,10]; END IF;0. Chúng tôi đặt toàn bộ nội dung trong một khối để trình xử lý của chúng tôi không vô tình ảnh hưởng đến các câu lệnh khác trong chương trình được lưu trữ
Ví dụ 4-18. Sử dụng các câu lệnh CASE lồng nhau và trình xử lý “không tìm thấy” trong phạm vi khối
IF3expression
THENstatements
END IF;
Chúng ta đã thấy rằng cả hai câu lệnh
IF4 vàexpression
THENstatements
END IF;
IF5 đều có thể triển khai cùng một chức năng kiểm soát luồng. Vậy cái nào là tốt nhất? . Tuy nhiên, khi quyết định giữaexpression
THENstatements
END IF;
IF5 vàexpression
THENstatements
END IF;
IF4, hãy cân nhắc những điều sauexpression
THENstatements
END IF;
Tính nhất quán trong phong cách có lẽ quan trọng hơn bất kỳ lợi thế nhỏ nào mà một trong hai cách tiếp cận có thể có trong một hoàn cảnh cụ thể. Do đó, chúng tôi khuyên bạn nên chọn giữa
IF
5 vàexpression
THENstatements
END IF;IF
4 một cách nhất quán và không chuyển đổi ngẫu nhiên giữa hai tùy thuộc vào tâm trạng, thời tiết hoặc tử vi của bạnexpression
THENstatements
END IF;IF
5 dễ đọc hơn một chút khi bạn đang so sánh một biểu thức đơn lẻ với một loạt các giá trị riêng biệt [sử dụng câu lệnhexpression
THENstatements
END IF;IF
5 “đơn giản”]expression
THENstatements
END IF;IF
4 có lẽ là một cấu trúc quen thuộc và dễ hiểu hơn khi bạn đánh giá các phạm vi hoặc biểu thức phức tạp dựa trên nhiều biếnexpression
THENstatements
END IF;Nếu bạn chọn
IF
5, bạn cần đảm bảo rằng ít nhất một trong các điều kiện củaexpression
THENstatements
END IF;IF
5 được khớp hoặc xác định một trình xử lý lỗi để bắt lỗi sẽ xảy ra nếu không có điều kiện nào củaexpression
THENstatements
END IF;IF
5 được thỏa mãn.expression
THENstatements
END IF;IF
4 không có hạn chế như vậyexpression
THENstatements
END IF;
Hãy nhớ—dù bạn sử dụng cấu trúc nào—thì
Khi bất kỳ điều kiện nào trong cấu trúc
IF
5 hoặcexpression
THENstatements
END IF;IF
4 được thỏa mãn, sẽ không có điều kiện nào nữa được đánh giá. Điều này có nghĩa là nếu các điều kiện của bạn trùng lặp theo bất kỳ cách nào, thì thứ tự đánh giá là rất quan trọngexpression
THENstatements
END IF;Ngôn ngữ chương trình được lưu trữ trong MySQL sử dụng logic ba giá trị;
Bạn nên suy nghĩ cẩn thận về mức độ dễ đọc của các câu lệnh của mình—đôi khi một tập hợp các câu lệnh
IF
4 hoặcexpression
THENstatements
END IF;IF
5 lồng vào nhau sẽ dễ đọc hơn và có thể hiệu quả hơn. Tuy nhiên, tốt hơn hết là tránh lồng vào nhau, đặc biệt nếu các câu lệnh trở nên lồng vào nhau sâu [chẳng hạn ba cấp trở lên]expression
THENstatements
END IF;Làm thế nào để sử dụng nếu khác trong truy vấn MySQL?
Câu lệnh IF-THEN-ELSE của MySQL . Câu điều kiện IF THEN; . true – câu lệnh giữa IF-THEN và ELSE sẽ được thực thi. If a specified condition is: true – statements between IF-THEN and ELSE will be executed.Làm cách nào để sử dụng điều kiện if other trong thủ tục được lưu trữ trong SQL Server 2008?
Câu lệnh IF ELSE kiểm soát luồng thực thi trong SQL Server. Nó có thể được sử dụng trong thủ tục lưu trữ, hàm, trình kích hoạt, v.v. để thực thi các câu lệnh SQL dựa trên các điều kiện đã chỉ định . Biểu thức Boolean. Một biểu thức boolean trả về TRUE hoặc FALSE.Làm cách nào để trả về một giá trị từ một thủ tục được lưu trữ trong MySQL?
Để trả về một giá trị từ thủ tục được lưu trữ, bạn cần phải sử dụng biến phiên cụ thể do người dùng xác định. Thêm biểu tượng @ trước tên biến .Làm cách nào để sử dụng if other trong SQL Server?
Câu lệnh Transact-SQL theo sau từ khóa IF và điều kiện của nó được thực thi nếu điều kiện được thỏa mãn. biểu thức Boolean trả về TRUE. Từ khóa ELSE tùy chọn giới thiệu một câu lệnh Transact-SQL khác được thực thi khi điều kiện IF không được thỏa mãn. biểu thức Boolean trả về FALSE