Computer >> Máy Tính >  >> Lập trình >> SQL

Trường hợp SQL

Khi bạn đang làm việc với cơ sở dữ liệu, bạn có thể muốn chạy if/then trong truy vấn của bạn. Ví dụ:bạn có thể muốn xem qua danh sách nhân viên và thay đổi trạng thái thử việc của họ nếu họ đã làm việc với bạn hơn một năm. Hoặc bạn có thể muốn xem qua danh sách những người chơi trên bảng xếp hạng và đánh dấu họ là người chiến thắng nếu họ xếp hạng trong ba người hàng đầu.

Để chạy các hoạt động này trong SQL , bạn phải sử dụng CASE tuyên bố. SQL CASE câu lệnh cho phép bạn chạy if/then , tương tự như cách bạn có thể chạy if/then thủ tục trong Microsoft Excel.

Trong hướng dẫn này, chúng ta sẽ phân tích những điều cơ bản về SQL CASE và thảo luận về cách bạn có thể sử dụng nó trong các truy vấn của mình. Chúng ta cũng sẽ thảo luận về cách sử dụng nhiều SQL CASE và khám phá cách thực hiện CASE có thể được sử dụng với các hàm tổng hợp.

Trình làm mới truy vấn

Để lấy thông tin từ cơ sở dữ liệu, bạn cần viết một truy vấn. Các truy vấn hầu như luôn bắt đầu bằng SELECT câu lệnh, được sử dụng để cho cơ sở dữ liệu biết cột nào sẽ được trả về bởi truy vấn. Các truy vấn cũng thường bao gồm FROM mệnh đề này cho cơ sở dữ liệu biết hoạt động sẽ tìm kiếm bảng nào.

Đây là cú pháp cho một truy vấn trong SQL :

SELECT column_name FROM table_name WHERE conditions_are_met;

Hãy sử dụng một ví dụ để minh họa điều này trong thực tế. Đây là một truy vấn sẽ trả về tên của tất cả nhân viên trong employees của chúng tôi bảng:

SELECT name FROM employees;

Truy vấn của chúng tôi trả về kết quả:

name
Luke
Mike
Hannah
Geoff
Alexis
Emma
Jonah
Adam

(8 hàng)

81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia một cuộc thi đào tạo. Kết hợp với bootcamp ngay hôm nay.

Sinh viên tốt nghiệp bootcamp trung bình dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.

Nếu chúng tôi muốn truy xuất nhiều cột, chúng tôi có thể làm như vậy bằng cách tách tên của chúng bằng một cột. Hoặc nếu chúng tôi muốn thu thập thông tin về mọi cột, chúng tôi có thể sử dụng dấu hoa thị (* ), đại diện cho tất cả các cột trong SQL bảng.

Ngoài ra, nếu chúng ta muốn lọc các bản ghi dựa trên một tập hợp các điều kiện cụ thể, chúng ta có thể sử dụng WHERE mệnh đề. Dưới đây là ví dụ về truy vấn tìm tên của tất cả nhân viên làm việc tại chi nhánh Albany của một công ty:

SELECT name FROM employees WHERE branch = 'Albany';

Đây là kết quả của truy vấn của chúng tôi:

name
Emma
Jonah

(2 hàng)

Đây là tất cả các truy vấn tương đối đơn giản. Nhưng điều gì sẽ xảy ra nếu chúng ta muốn thực hiện if/then hoạt động khi chúng tôi đang chạy một truy vấn? Đó là nơi mà SQL CASE tuyên bố có thể hữu ích.

TRƯỜNG HỢP SQL

CASE câu lệnh có thể được sử dụng trong SQL để xác định if/then logic trong mã của chúng tôi. Ví dụ:nếu chúng tôi muốn tăng lương cho mọi nhân viên đã làm việc với doanh nghiệp của chúng tôi từ năm năm trở lên, chúng tôi có thể muốn sử dụng CASE tuyên bố.

Đây là cú pháp cho SQL CASE tuyên bố:

SELECT column1_name
	CASE WHEN column2_name = 'X' THEN 'Y'
		ELSE NULL END AS column3_name
	FROM table_name;

Có rất nhiều điều xảy ra trong truy vấn này, vì vậy hãy sử dụng một ví dụ để minh họa cách hoạt động của nó. Giả sử chúng tôi muốn cung cấp cho mọi nhân viên có hơn năm employee of the month thưởng 200 đô la tăng. Đây là SQL tuyên bố có thể hoàn thành mục tiêu đó:

SELECT name,
	CASE WHEN employee_month_awards > 5 THEN 200
		ELSE NULL END AS pending_raise
	FROM employees;

Truy vấn của chúng tôi trả về thông tin sau từ biểu thức chữ hoa thường đã tìm kiếm của chúng tôi:

name pending_raise
Luke
Mike
Hannah
Geoff
Alexis
Emma 200
Jonah
Adam 200

(8 hàng)

Hãy chia nhỏ điều này. CASE câu lệnh kiểm tra từng bản ghi và đánh giá xem câu lệnh điều kiện, employee month awards > 5 , là đúng. Nếu câu lệnh điều kiện là đúng, giá trị 200 sẽ được in trong pending_raise cột. Trong trường hợp câu lệnh điều kiện sai, giá trị null vẫn còn.

Cuối cùng, truy vấn của chúng tôi trả về danh sách tên nhân viên, cũng như mức tăng lương đang chờ xử lý của những nhân viên đó.

Điều quan trọng cần lưu ý là SQL CASE câu lệnh không thêm một cột mới vào bảng của chúng tôi. Đúng hơn, nó tạo một cột trong SELECT của chúng tôi truy vấn đầu ra , để chúng tôi có thể biết ai đủ điều kiện được tăng lương.

Ngoài ra, nếu chúng tôi muốn tất cả những người không đủ điều kiện tăng lương sẽ được tặng một đang chờ tăng lương, chúng tôi có thể chỉ định thay vì NULL trong ELSE của chúng tôi tuyên bố. Chúng tôi cũng có thể sử dụng ORDER BY mệnh đề đặt hàng cho tuyên bố của chúng tôi nếu chúng tôi muốn xem dữ liệu của mình theo một thứ tự cụ thể.

SQL CASE và nhiều điều kiện

CASE câu lệnh có thể được sử dụng nhiều lần trong cùng một truy vấn. Nếu chúng tôi muốn tặng cho mọi nhân viên có ba giải thưởng trở lên được tăng 50 đô la và tất cả những người có từ năm giải thưởng trở lên được tăng 200 đô la, chúng tôi có thể sử dụng câu sau:

SELECT name,
	CASE WHEN employee_month_awards > 5 THEN 200
		WHEN employee_month_awards > 3 THEN 50
		ELSE 0 END AS pending_raise
	FROM employees;

Kết quả từ truy vấn của chúng tôi như sau:

name pending_raise
Luke 50
Mike
Hannah
Geoff
Alexis
Emma 200
Jonah 50
Adam 200

(8 hàng)

Trong ví dụ của chúng tôi, CASE các câu lệnh sẽ được đánh giá theo thứ tự mà chúng được viết.

Vì vậy, truy vấn của chúng tôi trước tiên sẽ kiểm tra những người có hơn năm giải thưởng và đặt mức tăng đang chờ xử lý của họ lên 200 . Sau đó, truy vấn của chúng tôi sẽ kiểm tra những người có nhiều hơn ba giải thưởng và đặt mức tăng đang chờ xử lý của họ lên 50 . Cuối cùng, nếu một nhân viên không đáp ứng bất kỳ tiêu chí nào, mức tăng lương đang chờ xử lý của họ sẽ được đặt thành .

Tuy nhiên, mã này có thể hiệu quả hơn. Thay vì viết các câu lệnh theo một thứ tự nhất định để chương trình của chúng ta hoạt động, chúng ta nên viết các câu lệnh không trùng nhau. Dưới đây là ví dụ về truy vấn hoạt động theo cách tương tự như trên, nhưng sử dụng AND báo cáo để kiểm tra số lượng giải thưởng mà một nhân viên đã giành được:

SELECT name,
	CASE WHEN employee_month_awards >= 3 AND employee_month_awards <= 5 THEN 50
		WHEN employee_month_awards > 5 THEN 200
		ELSE 0 END AS pending_raise
	FROM employees;

Truy vấn của chúng tôi trả về giống như truy vấn ở trên của chúng tôi. Tuy nhiên, điều này không phụ thuộc vào thứ tự của CASE , có nghĩa là chúng tôi ít có khả năng mắc lỗi với một tuyên bố không đúng chỗ.

SQL CASE và hàm tổng hợp

Bạn cũng có thể sử dụng CASE với một hàm tổng hợp. Điều này có thể hữu ích nếu bạn chỉ muốn đếm các hàng đáp ứng một điều kiện nhất định. Ví dụ:nếu bạn muốn biết có bao nhiêu nhân viên đã kiếm được khoản tiền thưởng 200 đô la, bạn có thể sử dụng CASE với một chức năng tổng hợp.

Đây là cú pháp để sử dụng CASE với một hàm tổng hợp:

SELECT column1_name
	CASE WHEN column2_name = 'X' THEN 'Y'
		ELSE NULL END AS column3_name,
		COUNT(1) AS count
	FROM table_name
GROUP BY column3_name;

Hãy sử dụng một ví dụ để minh họa cách hoạt động của điều này. Giả sử chúng tôi muốn tìm hiểu xem có bao nhiêu nhân viên đủ điều kiện nhận khoản tiền thưởng từ 50 đô la trở lên. Chúng tôi có thể sử dụng truy vấn sau để lấy thông tin này:

SELECT 
	CASE WHEN employee_month_awards >= 3 AND employee_month_awards <= 5 THEN 50
		WHEN employee_month_awards > 5 THEN 200
		ELSE 0 END AS pending_raise,
		COUNT(1) AS count
	FROM employees
GROUP BY pending_raise;

Truy vấn của chúng tôi trả về như sau:

pending_raise số lượng
50 3
3
200 2

Như bạn có thể thấy, truy vấn của chúng tôi đã trả về danh sách các khoản tăng lương đang chờ xử lý mà nhân viên kiếm được, cũng như số lượng từng loại tăng lương mà nhân viên phải trả. Trong trường hợp này, ba nhân viên đến hạn phải tăng 50 đô la, ba nhân viên không đến hạn tăng lương và hai nhân viên đến hạn tăng 200 đô la.

Kết luận

Trong hướng dẫn này, chúng tôi đã chia nhỏ những điều cơ bản về SQL máy chủ CASE và thảo luận về cách nó có thể được sử dụng để triển khai if/then logic trong các truy vấn của chúng tôi. Chúng tôi cũng đã thảo luận về cách CASE có thể được sử dụng với nhiều điều kiện và các hàm tổng hợp.

Xin nhắc lại, mọi CASE đơn giản biểu thức phải tuân theo các quy tắc sau:

  • CASE câu lệnh phải nằm trong SELECT mệnh đề;
  • CASE câu lệnh phải bao gồm WHEN , THENEND thành phần;
  • Nhiều WHEN câu lệnh và ELSE mệnh đề có thể được sử dụng tùy ý;
  • Các câu lệnh có điều kiện, chẳng hạn như AND hoặc OR , có thể được sử dụng trong CASE truy vấn giữa WHENTHEN mệnh đề.

Giờ đây, bạn đã được trang bị kiến ​​thức cần thiết để sử dụng CASE các câu lệnh như SQL chuyên nghiệp!