Thời gian đọc: 8 phút
Câu lệnh IF…ELSE và câu lệnh IF…ELSE IF…ELSE là hai cấu trúc quyết định cơ bản nhất mà bạn nên biết nếu bạn mới bắt đầu với SQL hoặc bất kỳ ngôn ngữ lập trình / truy vấn nào khác.
Nếu bạn đã quen thuộc với các ngôn ngữ khác ngoài SQL, bạn đã biết đến khái niệm của các cấu trúc quyết định. Tuy nhiên, nếu bạn chưa quen, bạn sẽ được tìm hiểu một cách đầy đủ trong bài hướng dẫn này.
Cơ bản, khi viết mã SQL, đôi khi bạn muốn một số mã được thực thi nếu một điều kiện là đúng và một tập hợp mã hoàn toàn khác được thực thi nếu điều kiện là sai. Đó chính là mục đích mà các cấu trúc quyết định IF…ELSE và IF…ELSE IF…ELSE được thiết kế để thực hiện. Trong bài hướng dẫn này, chúng ta sẽ thảo luận về các cấu trúc đó:
1. Cấu trúc IF…ELSE
Cấu trúc IF…ELSE sẽ thực thi một tập hợp mã cụ thể nếu một điều kiện đã được chỉ định là ĐÚNG và một tập hợp mã khác nếu điều kiện đó là SAI.
Dưới đây là bố cục và cú pháp cơ bản của cấu trúc IF…ELSE:
IF()
BEGIN
END
ELSE
BEGIN
END
Đây là một vài điều cần lưu ý về cú pháp này:
- Sử dụng BEGIN…END trong các phần thân của cả khối IF và khối ELSE của chúng tôi là cần thiết nếu phần thân có nhiều hơn một dòng mã. Nếu phần thân chỉ có một dòng mã, bạn có thể bỏ qua các từ khóa đó.
- Trong khối IF, chúng tôi bọc điều kiện của mình bằng cặp dấu ngoặc đơn. Điều này không bắt buộc, nhưng tôi nghĩ rằng nó làm cho mã dễ đọc hơn.
Không quá phức tạp, phải không? Bạn chỉ cần kiểm tra một số điều kiện và thực hiện hành động tương ứng. Nhưng khi bạn thường xuyên sử dụng một khối IF…ELSE?
Thông thường, bạn sẽ thấy và viết các cấu trúc quyết định trong các thủ tục được lưu trữ.
Nếu bạn không chắc chắn về thủ tục được lưu trữ là gì, hãy chắc chắn kiểm tra hướng dẫn đầy đủ của tôi tại đây:
Thủ tục được lưu trữ: Hướng dẫn tối ưu cho người mới học
Cơ bản, thủ tục được lưu trữ cho phép chúng tôi giao một số công việc SQL cho một đối tượng cơ sở dữ liệu mà chúng tôi có thể chạy theo nhu cầu. Vì vậy, thay vì phải viết lại mã phức tạp mỗi lần, chúng tôi chỉ cần viết một lần trong thủ tục được lưu trữ và gọi thủ tục được lưu trữ mỗi khi chúng tôi muốn thực hiện công việc đó.
Một ví dụ về việc sử dụng IF…ELSE trong một thủ tục được lưu trữ
Hãy tưởng tượng rằng bạn là chủ sở hữu của một chuỗi cửa hàng bán lẻ ở tiểu bang Colorado. Bạn có hai cửa hàng tại Denver và Boulder.
Mỗi cửa hàng có bảng riêng của họ trong cơ sở dữ liệu của bạn để thu thập thông tin về khách hàng mua sắm tại mỗi cửa hàng. Bảng có tên là DenverStore và BoulderStore.
Dưới đây là một ví dụ về nội dung của bảng DenverStore:
Tuyệt vời, vì vậy chúng ta có thể viết một thủ tục được lưu trữ đơn giản để chèn một khách hàng mới vào cơ sở dữ liệu của chúng ta. Chúng ta muốn đảm bảo rằng thủ tục được lưu trữ này có thể chèn vào bảng DenverStore hoặc bảng BoulderStore.
Lý tưởng nhất, thủ tục được lưu trữ sẽ được gọi như sau:
Hãy xem những gì chúng tôi đang chuyển đến các thủ tục được lưu trữ. Tham số đầu tiên là vị trí cửa hàng mà khách hàng mua sắm, tương ứng với bảng mà chúng tôi muốn chèn khách hàng mới vào. Các tham số còn lại là tên và họ của khách hàng và địa chỉ email.
Vì vậy, nếu thành phố là 'Denver', chúng ta muốn thủ tục được lưu trữ chèn khách hàng vào bảng DenverStore.
Ngược lại, nếu thành phố là 'Boulder', chúng ta muốn thủ tục được lưu trữ chèn khách hàng mới vào vị trí BoulderStore.
Hãy xem định nghĩa của thủ tục được lưu trữ của chúng tôi:
Vì vậy, thủ tục được lưu trữ này sử dụng cấu trúc quyết định IF…ELSE để làm chính xác những gì chúng ta muốn. Nếu thành phố được chuyển vào là 'Denver', chúng ta chèn vào bảng DenverStore. Ngược lại, chúng ta chắc chắn muốn chèn khách hàng mới vào bảng BoulderStore.
2. Cấu trúc IF…ELSE IF…ELSE
Cấu trúc quyết định IF…ELSE IF…ELSE cho phép bạn chỉ định nhiều hơn một điều kiện, không giống như cấu trúc IF…ELSE. Điều kiện đầu tiên trả về TRUE sẽ được thực thi. Nếu không có điều kiện nào đúng, khối mã trong ELSE được thực thi.
Dưới đây là bố cục cơ bản của cấu trúc quyết định IF…ELSE IF…ELSE:
IF()
BEGIN
END
ELSE IF()
BEGIN
END
ELSE
BEGIN
END
Vì vậy, SQL Server sẽ kiểm tra các điều kiện một cách tuần tự, bắt đầu từ đầu. Điều kiện đầu tiên được đánh giá là TRUE sẽ thực thi khối mã tương ứng. Tất cả các điều kiện khác được bỏ qua và mã của chúng không chạy.
Nếu không có điều kiện nào của IF…ELSE IF đúng, mã trong khối ELSE được chạy.
Với IF…ELSE IF…ELSE, có hai điều sau đây đúng:
- Bạn không cần sử dụng các từ khóa BEGIN…END nếu khối IF, ELSE IF hoặc ELSE của bạn chỉ có một dòng mã.
- Dấu ngoặc đơn xung quanh điều kiện của bạn là tùy ý.
Ví dụ về việc sử dụng cấu trúc quyết định IF…ELSE IF…ELSE.
Chúng tôi đã đưa ra một giả định trong cấu trúc IF…ELSE rằng chúng tôi không nên thực hiện. Chúng tôi giả sử nếu người dùng chuyển bất cứ điều gì ngoại trừ thành phố 'Denver' vào thủ tục được lưu trữ, họ nhất định muốn chèn hàng mới vào bảng 'BoulderStore'.
Nhưng nếu người dùng chuyển từ 'Spagetti' vào thủ tục được lưu trữ thì sao?:
Ồ, diễn ra như thế nào?
Đáp án: Hàng mới được chèn vào bảng 'BoulderStore':
Ồ, vậy chúng tôi nên dừng việc đặt giả định đó. Chúng tôi nên thay đổi thủ tục được lưu trữ của chúng tôi để rõ ràng hơn.
Nếu người dùng chuyển 'Denver' một cách rõ ràng, chúng tôi chèn vào bảng DenverStore. Nếu họ chuyển rõ ràng 'Boulder', chúng ta chèn hàng mới vào tại BoulderStore.
Ngược lại, nếu họ chuyển vào một thành phố khác ngoài 'Denver' hoặc 'Boulder', chúng ta có thể trả lại một thông báo lỗi.
Đây là một kịch bản tuyệt vời cho cấu trúc quyết định IF…ELSE IF…ELSE. Hãy xem nó hoạt động như thế nào:
Lưu ý trong khối ELSE của tôi, tôi không cần sử dụng từ khóa BEGIN…END vì phần thân của ELSE của tôi chỉ có một dòng.
Bây giờ hãy thử một cuộc gọi giả mạo khác:
Tốt hơn nhiều!
Cấu trúc quyết định IF…ELSE IF…ELSE rất tuyệt vời nếu có nhiều hơn một điều kiện hợp lệ mà bạn muốn kiểm tra và bao gồm một phần dự phòng nếu không có điều kiện nào đúng.
3. Mẹo, thủ thuật và liên kết.
Dưới đây là một danh sách các mẹo và thủ thuật bạn nên biết khi làm việc với các cấu trúc quyết định.
Mẹo số 1: Nếu bạn cần kiểm tra nhiều hơn một điều kiện trong các cấu trúc IF và ELSE IF của bạn, bạn có thể thực hiện điều đó bằng cách sử dụng toán tử AND hoặc toán tử OR.
Toán tử AND hoặc OR sẽ kiểm tra từng điều kiện riêng lẻ để xem xét xem toàn bộ điều kiện có đúng hay không.
Khi sử dụng toán tử AND, các điều kiện riêng lẻ cần phải đánh giá đúng để toàn bộ điều kiện được đánh giá là đúng.
Khi sử dụng toán tử OR, chỉ cần một điều kiện duy nhất đúng để toàn bộ điều kiện được đánh giá là đúng.
Toán tử AND và OR hoạt động giống như cách chúng hoạt động trong mệnh đề WHERE, ví dụ như. Nếu bạn đã quen với cách các toán tử này hoạt động trong mệnh đề WHERE, bạn đã biết cách chúng sẽ hoạt động trong các cấu trúc quyết định!
Dưới đây là một số ví dụ ngớ ngẩn. Hãy xem toán tử AND trước:
Vì tất cả các điều kiện của chúng tôi đều ĐÚNG, toàn bộ điều kiện được đánh giá là ĐÚNG và chúng tôi in ra thông báo trong khối IF của chúng tôi.
Nhưng nếu tôi thay đổi một điều kiện thành SAI duy nhất, toàn bộ điều kiện được đánh giá là SAI và chúng tôi in ra thông báo trong khối ELSE của chúng tôi:
Nhưng nếu tôi thay đổi tất cả các toán tử AND thành toán tử OR, đột nhiên chúng ta lại ở trong khối IF:
Vì ít nhất một trong những điều kiện này là ĐÚNG, toàn bộ điều kiện được đánh giá là ĐÚNG và chúng ta nhập khối IF.
(Hãy lưu ý rằng chúng tôi đã thay đổi các thông báo chúng ta đang in ra để có ý nghĩa hơn với toán tử OR)
Cách duy nhất mà một toán tử OR được đánh giá là SAI là khi tất cả các điều kiện được đánh giá là sai:
Điều cuối cùng cần lưu ý là bạn chắc chắn có thể sử dụng cả toán tử AND và OR cùng nhau nếu cần. Toán tử AND sẽ được ưu tiên. Dưới đây là một ví dụ:
Điều kiện AND được đánh giá trước, kiểm tra xem @value1 có phải là 'Y' và @value2 là 200 hay không. Toán tử AND này được đánh giá là SAI vì ít nhất một trong những điều kiện cá nhân đó là sai.
Điều đó có nghĩa là phía trái của toán tử OR của chúng tôi là SAI. Nhưng sau đó, chúng ta cần kiểm tra phía phải của toán tử OR của chúng ta. Phía phải được đánh giá là ĐÚNG. Vì ít nhất một mặt của toán tử OR được đánh giá là đúng, toàn bộ điều kiện được đánh giá là đúng!
Mẹo số 2: Bạn có thể có nhiều hơn một điều kiện ELSE IF trong IF…ELSE IF…ELSE.
Giả sử trong tương lai chúng ta mở một cửa hàng khác tại Colorado Springs. Chúng ta sẽ muốn cập nhật thủ tục được lưu trữ của chúng ta để đảm bảo rằng chúng ta có thể chèn vào bảng đó nữa:
Liên kết
Có một cuốn sách hết sức hữu ích giới thiệu cho bạn nhiều chủ đề về T-SQL bao gồm cấu trúc quyết định mà bạn nên có trong tay. Cuốn sách này có tên "T-SQL Fundamentals" của Itzik Ben-Gan. Đây là một trong số ít cuốn sách mà tôi sở hữu đã giúp tôi hiểu rõ về nhiều chủ đề của SQL Server. Bạn chắc chắn sẽ không hối hận khi sở hữu cuốn sách này, tin tôi. Hãy sở hữu ngay hôm nay!
Bước tiếp theo:
Hãy để lại một bình luận nếu bạn thấy hướng dẫn này hữu ích!
Như đã đề cập trước đó, bạn sẽ thường thấy và sử dụng các cấu trúc quyết định này trong các thủ tục được lưu trữ của bạn. Nếu bạn cần thảo luận kỹ càng về thủ tục được lưu trữ là gì và cách chúng có thể giúp đỡ chúng tôi, hãy kiểm tra hướng dẫn này:
Thủ tục được lưu trữ: Hướng dẫn tối ưu cho người mới học
Cảm ơn bạn đã đọc bài viết!
Hãy đảm bảo bạn đăng ký nhận bản tin của tôi để nhận thông báo về các ưu đãi đặc biệt và thông báo mỗi khi có bài hướng dẫn mới được phát hành!
Nếu bạn có bất kỳ câu hỏi nào, hãy để lại một bình luận. Hoặc tốt hơn, hãy gửi cho tôi một email!