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

MySQL CASE hoạt động như thế nào?


MySQL CASE hoạt động giống như một câu lệnh switch. Cú pháp của CASE như sau -

Trường hợp 1 - So sánh Tuyên bố

Case
when anyCompareStatement then value1
when anyCompareStatement then value2
.
.
N
else anyValue
end as anyVariableName;

Trường hợp 2 - Điều kiện

Cú pháp thứ hai có thể được sử dụng khi bạn chỉ chọn một cột. Cú pháp như sau -

case yourColumnName
when condition1 then result1
when condition1 then result2
.
.
N
else anyValue
end;

Để hiểu khái niệm trên, chúng ta hãy sử dụng câu lệnh select.

Trường hợp 1

Truy vấn như sau -

mysql> select
   -> case when 45 < 55 then '55 is greater than 45'
   -> when 10!=11 then '10 is not equal to 11'
   -> else 'Default case'
   -> end as Result;

Đầu ra

+-----------------------+
| Result                |
+-----------------------+
| 55 is greater than 45 |
+-----------------------+
1 row in set (0.00 sec)

Trường hợp 2

Hãy để chúng tôi tạo một bảng để hiểu cú pháp thứ hai.

Truy vấn để tạo bảng như sau -

mysql> create table CaseDemo
   -> (
   -> Id int,
   -> Name varchar(100)
   -> );
Query OK, 0 rows affected (0.93 sec)

Chèn một số bản ghi trong bảng bằng lệnh chèn. Truy vấn như sau -

mysql> insert into CaseDemo values(1,'John');
Query OK, 1 row affected (0.43 sec)

mysql> insert into CaseDemo values(2,'Sam');
Query OK, 1 row affected (0.16 sec)

Hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng một câu lệnh chọn. Truy vấn như sau -

mysql> select *from CaseDemo;

Đầu ra

+------+------+
| Id   | Name |
+------+------+
|    1 | John |
|    2 | Sam  |
+------+------+
2 rows in set (0.00 sec)

Đây là truy vấn thứ hai của CASE có thể được sử dụng để làm việc với chỉ một giá trị. Truy vấn như sau -

mysql> select case name
-> when 'John' then 'His name is John'
-> when 'Sam' then 'His name is Sam'
-> else -1
-> end as Result
-> from CaseDemo;

Đầu ra

+------------------+
| Result           |
+------------------+
| His name is John |
| His name is Sam  |
+------------------+
2 rows in set (0.00 sec)