Bài viết này cung cấp tổng quan về câu lệnh CASE trong SQL cùng với các trường hợp sử dụng và ví dụ.
Bạn đang xem : câu lệnh trường hợp trong sql với hoặc điều kiện
Câu lệnh trường hợp trong SQL trả về một giá trị theo một điều kiện cụ thể. Chúng tôi có thể sử dụng Câu lệnh trường hợp trong các truy vấn được chọn cùng với mệnh đề Where, Order By và Group By. Nó cũng có thể được sử dụng trong câu lệnh Chèn. Trong bài viết này, chúng ta sẽ khám phá câu lệnh CASE và các trường hợp sử dụng khác nhau của nó.
Giả sử bạn có một bảng lưu trữ ProductID cho tất cả các sản phẩm trong một cửa hàng nhỏ. Bạn muốn lấy Tên sản phẩm cho một ProductID cụ thể.
Nhìn vào ví dụ sau đây; Chúng tôi đã khai báo một biến @ProductID và chỉ định giá trị 1 cho nó. Trong câu lệnh Case, chúng tôi đã xác định các điều kiện. Khi một điều kiện được thỏa mãn, giá trị tương ứng của nó sẽ được trả về.
Tương tự, nếu chúng ta thay đổi điều kiện trong câu lệnh Case trong SQL, nó sẽ trả về biểu thức thích hợp. Trong ví dụ sau, chúng tôi muốn lấy Tên sản phẩm cho ProductID 4. nó không thỏa mãn điều kiện câu lệnh Case; do đó, nó đưa ra kết quả từ biểu thức Khác.
Hãy cùng chúng tôi khám phá một vài ví dụ về câu lệnh Case trong SQL. Trước khi tiếp tục, hãy tạo một bảng mẫu và chèn một vài bản ghi vào đó.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
< p class = "crayon-num"> 37
SỬ DỤNG
p>
[
SQLShackDemo
]
p >
ĐI
TẠO
BẢNG
dbo
.
Nhân viên
(
EmployeeID
INT
BẢN SẮC
CHÍNH
TỪ KHÓA
,
Tên nhân viên
VARCHAR
(
100
)
p >
KHÔNG
KHÔNG ĐỦ
,
Giới tính
VARCHAR
(
1
)
KHÔNG
KHÔNG ĐỦ
,
Mã trạng thái
VARCHAR p >
(
20
)
KHÔNG
KHÔNG ĐỦ
,
Mức lương
tiền
KHÔNG
p >
NULL
,
)
ĐI
SỬ DỤNG
[
SQLShackDemo
]
ĐI
BỘ
IDENTITY_INSERT
[
dbo
]
.
[
Nhân viên
]
BẬT
< / p>
ĐI
< p class = "crayon-line" id = "urvanov-cú pháp-highlighter-62b51ae9bffb2261481116-16">
CHÈN
p >
[
dbo
]
.
[
Nhân viên
]
(
[
ID nhân viên
]
,
[
EmployeeName p>
]
,
[
Giới tính
]
,
[
Mã trạng thái
]
,
[
Mức lương
]
)
GIÁ TRỊ
(
201
,
N
‘Jerome’
, < / p>
N
‘M’
< p clas s = "crayon-sy">,
N
‘FL’
,
83000.0000 < / p>
)
ĐI
CHÈN p>
[
dbo
]
.
[
Nhân viên
]
(
[
ID nhân viên
]
,
[
EmployeeName
]
,
[ p>
Giới tính
]
,
[
Mã trạng thái
]
,
[
Mức lương
]
)
GIÁ TRỊ
(< / p>
202
,
N
‘Ray’
,
N
‘M’
,
N
‘AL’ p >
,
88000.0000
)
ĐI
CHÈN
[
dbo p >
]
.
[
Nhân viên
]
(
[
ID nhân viên
]
,
[
Tên nhân viên
]
,
< / p>
[
Giới tính
]
,
[
Mã trạng thái
]
,
p >
[
Sal ary
]
)
< p class = "crayon-k"> GIÁ TRỊ
(
203
,
N p>
‘Stella’
,
N
‘F’
,
N
‘AL’
,
76000.0000
)
ĐI
CHÈN
[
dbo
]
.
[ p>
Nhân viên
]
(
[
EmployeeID
]
,
[
EmployeeName
]
,
[
Giới tính
]
,
[
Mã trạng thái
]
,
[
Mức lương
] p>
)
GIÁ TRỊ
(
204
,
N
‘Gilbe rt ‘
,
N
‘M’
,
N
‘Ar’
,
42000.0000
)
ĐI
CHÈN
[
dbo
]
.
[
Nhân viên
]
(
[
ID nhân viên
< p class = "crayon-sy">]
,
[
Tên nhân viên
]
,
< p class = "crayon-sy"> [
Giới tính
]
,
[
StateCode < / p>
]
,
[
Mức lương
]
)
GIÁ TRỊ
(
205
,
N
‘Edward’
,
N
‘M’ p>
,
N
‘FL’
,
93000.0000
)
ĐI
< p class = "crayon-k"> CHÈN
[
dbo
]
.
[< / p>
Nhân viên
]
(
[
ID nhân viên
]
,
[ p >
Tên nhân viên
]
,
[
Giới tính
]
,
[
< p class = "cra yon-i "> Mã trạng thái
]
,
[
Mức lương
]
< p class = "crayon-sy">)
GIÁ TRỊ
(
206
, p>
N
‘Ernest’
,
N
‘F’
,
N < / p>
‘Al’
,
< p class = "crayon-cn"> 64000.0000
)
ĐI
CHÈN
[
dbo
]
.
[
Nhân viên p >
]
(
[
EmployeeID
]
,
[
Tên nhân viên
< p class = "crayon-sy">]
,
[
Giới tính
]
, < / p>
[
Mã trạng thái
]
,
[
Mức lương
]
) p >
GIÁ TRỊ
(
207
,
N
‘Jorge’
, p >
N
‘F’
,
N
‘VÀO’
,
75000.0000 p>
)
ĐI
CHÈN p >
[
dbo
]
.
[
Nhân viên
]
(
< p class = "crayon-sy"> [
EmployeeID
]
,
[
Tên nhân viên
]
< p class = "crayon-sy">,
[
Giới tính
]
,
p>
[
Mã trạng thái
]
,
[
Mức lương
]
)
GIÁ TRỊ
(
208
,
N < / p>
‘Nicholas’
,
< p class = "crayon-i"> N
‘F’
,
N
‘Ge’
,
71000.0000
)
ĐI
p >
CHÈN
< / p>
[
dbo
]
.
[
Nhân viên
]
(
[ p>
EmployeeID
]
,
[
Tên nhân viên
]
,
[
Giới tính
]
,
p>
[
Mã trạng thái
]
,
[
Mức lương
]
)
GIÁ TRỊ
(
209
,
N < / p>
‘Lawrence’
,
< p class = "crayon-i"> N
‘M’
,
N
‘IN’
,
95000.0000
) p >
ĐI
CHÈN
< p class = "crayon-h">
[
dbo
]
.
[
Nhân viên < / p>
]
(
[
ID nhân viên
]
,
[
EmployeeName p >
]
,
[
Giới tính
]
,
[
Mã trạng thái
< p class = "crayon-sy">]
,
[
Mức lương
]
)
GIÁ TRỊ
(
210
,
N
‘Salvador’
,
N < / p>
‘M’
,
< p class = "crayon-i"> N
‘Co’
,
75000.0000
)
ĐI
SET
IDENTITY_INSERT < / p>
[
dbo
]
.
[
Nhân viên
]
TẮT
ĐI
Chúng tôi có các bản ghi sau trong bảng Nhân viên.
Các định dạng khác nhau của câu lệnh CASE
Một biểu thức câu lệnh CASE đơn giản
Ở định dạng này, chúng tôi đánh giá một biểu thức dựa trên nhiều giá trị. Trong một câu lệnh trường hợp đơn giản, nó đánh giá từng điều kiện một. Khi điều kiện và biểu thức được so khớp, nó trả về biểu thức được đề cập trong mệnh đề THEN.
Chúng tôi có cú pháp sau cho một câu lệnh trường hợp trong SQL với một biểu thức đơn giản
1
2
3
4
5
6
CHỌN
p>
TRƯỜNG HỢP
Biểu thức
Khi nào
p>
expression1
Sau đó
Kết quả 1
Khi nào
expression2
Sau đó
Kết quả 2
.
.
.
ELSE
Kết quả p >
HẾT
Thông thường, chúng tôi lưu trữ các từ viết tắt trong một bảng thay vì ở dạng đầy đủ của nó. Ví dụ, trong bảng Nhân viên của tôi, tôi đã sử dụng các từ viết tắt trong Gender và StateCode. Tôi muốn sử dụng câu lệnh Case để trả về các giá trị là Nam và Nữ trong đầu ra thay vì M và F .
Thực thi đoạn mã sau và nhận thấy rằng chúng tôi muốn đánh giá Giới tính CASE trong truy vấn này.
Trong hình ảnh sau đây, bạn có thể nhận thấy sự khác biệt về kết quả đầu ra bằng cách sử dụng câu lệnh Case trong SQL.
Câu lệnh CASE và toán tử so sánh
Ở định dạng này của câu lệnh CASE trong SQL, chúng ta có thể đánh giá một điều kiện bằng cách sử dụng các toán tử so sánh. Khi điều kiện này được thỏa mãn, chúng ta nhận được một biểu thức từ THEN tương ứng trong đầu ra.
Chúng ta có thể thấy cú pháp sau cho câu lệnh Case với một toán tử so sánh.
1
2
3
4
5
TRƯỜNG HỢP
KHI NÀO
So sánh Điều kiện
THÌ p>
kết quả
KHI NÀO
p >
So sánh Điều kiện
THÌ
kết quả
ELSE
khác
HẾT
Giả sử chúng ta có một mức lương cho mỗi chỉ định. Nếu lương của nhân viên nằm trong một phạm vi cụ thể, chúng tôi muốn được chỉ định bằng cách sử dụng Báo cáo tình huống.
Trong truy vấn sau, chúng tôi đang sử dụng toán tử so sánh và đánh giá một biểu thức.
1
2
3
4
5
6
7
Chọn
p>
Tên nhân viên
,
TRƯỜNG HỢP
KHI NÀO
Mức lương
& gt; =
80000
VÀ
Mức lương
& lt; =
100000
THÌ
p>
‘Giám đốc’
KHI NÀO p >
Mức lương
& gt; =
50000
VÀ
Lương
& lt;
80000
< p class = "crayon-h">
THÌ
‘Chuyên gia tư vấn cấp cao’
Khác p>
‘Đạo diễn’
HẾT
AS
Chỉ định
from
Nhân viên
Trong hình ảnh sau đây bạn có thể thấy, chúng tôi nhận được chỉ định theo điều kiện được chỉ định trong câu lệnh CASE.
Tuyên bố trường hợp với Thứ tự theo điều khoản
Chúng ta cũng có thể sử dụng câu lệnh Case với mệnh đề thứ tự. Trong SQL, chúng ta sử dụng mệnh đề Order By để sắp xếp kết quả theo thứ tự tăng dần hoặc giảm dần.
Giả sử trong một ví dụ khác; chúng tôi muốn sắp xếp kết quả theo phương pháp sau.
- Đối với nhân viên Nữ, lương của nhân viên nên theo thứ tự giảm dần
- Đối với nhân viên Nam, chúng ta nên tính lương cho nhân viên theo thứ tự tăng dần
Chúng ta có thể xác định điều kiện này bằng sự kết hợp của câu lệnh Order by và Case. Trong truy vấn sau, bạn có thể thấy chúng tôi đã chỉ định Order By và Case cùng nhau. Chúng tôi đã xác định các điều kiện sắp xếp trong biểu thức trường hợp.
1
2
3
4
5
6
Chọn
p>
Tên nhân viên
,
Giới tính
,
Mức lương
từ
Nhân viên
< / p>
ĐẶT HÀNG
THEO
TRƯỜNG HỢP
Giới tính
KHI NÀO
‘F’
THÌ
Mức lương
Kết thúc
MÔ TẢ
,
< / p>
Trường hợp
KHI NÀO
Giới tính
< p class = "crayon-o"> =
‘M’
THÌ
Mức lương
< / p>
HẾT
Trong đầu ra, chúng tôi đã đáp ứng yêu cầu sắp xếp của mình theo thứ tự tăng dần hoặc giảm dần
- Đối với nhân viên Nữ, tiền lương xuất hiện theo thứ tự giảm dần
- Đối với nhân viên Nam, mức lương xuất hiện theo thứ tự tăng dần
Câu lệnh trường hợp trong SQL với mệnh đề Nhóm theo
Chúng ta cũng có thể sử dụng câu lệnh Case với mệnh đề Group By. Giả sử chúng ta muốn phân nhóm nhân viên dựa trên mức lương của họ. Ngoài ra, chúng tôi muốn tính toán mức lương tối thiểu và tối đa cho một loạt nhân viên cụ thể.
Trong truy vấn sau, bạn có thể thấy rằng chúng ta có mệnh đề Group By và nó chứa i với điều kiện để có được kết quả đầu ra cần thiết.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Chọn
TRƯỜNG HỢP
KHI NÀO
Mức lương
& gt; =
80000 p>
VÀ
Mức lương
& lt; =
100000
THÌ
< p class = "crayon-s"> ‘Giám đốc’
KHI NÀO
Mức lương
p >
& gt; =
50000
VÀ
Mức lương
& lt;
80000 p >
THÌ
‘Chuyên gia tư vấn cấp cao’
Khác
‘Đạo diễn’
HẾT
NHƯ
Chỉ định
,
Tối thiểu
(
lương
)
p >
as
MinimumSalary
,
Max
(
Mức lương
)
as
MaximumSalary
từ
Nhân viên
Nhóm
Bởi
TRƯỜNG HỢP
KHI NÀO
< p class = "crayon-h">
Mức lương
& gt; =
80000
p >
VÀ
Mức lương
& lt; =
100000
THÌ
‘Đạo diễn’ p >
KHI NÀO
Mức lương
& gt; = < / p>
50000
VÀ
Mức lương
& lt;
80000
THÌ
‘Chuyên gia tư vấn cấp cao’
Khác
‘Giám đốc’ p >
HẾT
Chúng tôi có kết quả sau của truy vấn này. Trong đầu ra này, chúng tôi nhận được mức lương tối thiểu và tối đa cho một chỉ định cụ thể.
Cập nhật câu lệnh bằng câu lệnh CASE
Chúng ta cũng có thể sử dụng câu lệnh Case trong SQL với bản cập nhật DML. Giả sử chúng ta muốn cập nhật Statecode của nhân viên dựa trên các điều kiện của Case statement.
Trong đoạn mã sau, chúng tôi đang cập nhật mã trạng thái với điều kiện sau.
- Nếu mã trạng thái của nhân viên là AR, thì hãy cập nhật lên FL
- Nếu mã trạng thái của nhân viên là GE, thì hãy cập nhật thành AL
- Đối với tất cả các mã trạng thái khác, hãy cập nhật giá trị thành IN
Thực thi lệnh cập nhật sau để đáp ứng yêu cầu của chúng tôi bằng cách sử dụng câu lệnh Case.
1
2
3
4
5
6
CẬP NHẬT
p>
nhân viên
SET
StateCode p>
=
CASE
StateCode
KHI NÀO
‘Ar’
VẬY
‘FL’
KHI NÀO
‘GE’
THÌ p >
‘AL’
ELSE p>
‘IN’
p >
HẾT < / p>
Trong đầu ra sau đây, bạn có thể thấy Statcode cũ (bên trái) và Statecode cập nhật cho nhân viên dựa trên các điều kiện của chúng tôi trong câu lệnh Case.
Chèn câu lệnh với câu lệnh CASE
Chúng ta cũng có thể chèn dữ liệu vào bảng SQL với sự trợ giúp của câu lệnh Case trong SQL. Giả sử chúng ta có một ứng dụng chèn dữ liệu vào bảng Nhân viên. Chúng tôi nhận được các giá trị sau cho giới tính.
Giá trị
Mô tả
Giá trị bắt buộc trong bảng Nhân viên
0
Nhân viên Nam
< p> M
1
Nhân viên nữ
F
Chúng tôi không muốn chèn giá trị 0 và 1 cho nhân viên Nam và Nữ. Chúng ta cần chèn các giá trị bắt buộc M và F cho giới tính của nhân viên.
Trong truy vấn sau, chúng tôi đã chỉ định các biến để lưu trữ các giá trị cột. Trong câu lệnh insert, bạn có thể sử dụng câu lệnh Case để xác định giá trị tương ứng để chèn vào bảng nhân viên. Trong câu lệnh Case, nó kiểm tra các giá trị bắt buộc và chèn các giá trị từ biểu thức THEN trong bảng.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Khai báo
p>
@
Tên nhân viên
varchar
(
100
)
Khai báo
@
Giới tính
int
Khai báo
@
Mã lệnh
char
( p >
2
)
Khai báo
@
tiền lương
tiền
Bộ
@
Tên nhân viên
=
‘Raj’
Bộ
@
Giới tính
=
< p class = "crayon-cn"> 0
Đặt
@
Statecode
=
‘FL’
set
@ < / p>
lương
=
52000
p>
Chèn
thành
nhân viên
giá trị
(
@
Tên nhân viên
,
TRƯỜNG HỢP
@
Giới tính
KHI NÀO
< p class = "crayon-h">
0
THÌ
‘M’
KHI NÀO
1
THÌ
p>
‘F’
end < / p>
,
@
Statecode
,
@
lương
)
Trong ảnh chụp màn hình sau, chúng ta có thể thấy hàng mới được chèn chứa Giới tính M thay vì giá trị 0.
Giới hạn của Tuyên bố Trường hợp
- Chúng tôi không thể kiểm soát luồng thực thi của các thủ tục, hàm được lưu trữ bằng cách sử dụng câu lệnh Case trong SQL
- Chúng ta có thể có nhiều điều kiện trong một câu lệnh Case; tuy nhiên, nó hoạt động theo mô hình tuần tự. Nếu một điều kiện được thỏa mãn, nó sẽ ngừng kiểm tra các điều kiện khác
- Chúng tôi không thể sử dụng câu lệnh Case để kiểm tra giá trị NULL trong bảng
Kết luận
Câu lệnh trường hợp trong SQL cung cấp sự linh hoạt khi viết t-SQL cho các truy vấn DDL và DML. Nó cũng bổ sung tính linh hoạt cho các truy vấn SQL Server. Bạn nên thực hành câu lệnh Case trong các truy vấn của mình.
Xem thêm những thông tin liên quan đến chủ đề câu lệnh trường hợp trong sql với hoặc điều kiện
Bài 4: Giới thiệu về điều kiện và vòng lặp trong SQL Server
- Tác giả: Anh Nguyen Ngoc
- Ngày đăng: 2020-06-01
- Đánh giá: 4 ⭐ ( 3872 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Quản trị Cơ sở dữ liệu SQL Server playlist: https://www.youtube.com/playlist?list=PLn9lhDYvf_3Gdiz6uY9HAztCKapCvzTPe
Nhóm thảo luận: https://www.facebook.com/groups/115838366528104
Lệnh CASE WHEN trong SQL – Chức năng, cú pháp và ví dụ
- Tác giả: kienthucphanmem.com
- Đánh giá: 3 ⭐ ( 7503 lượt đánh giá )
- Khớp với kết quả tìm kiếm: CASE WHEN trong SQL là câu lệnh có tính ứng dụng cao. Cùng tìm hiểu chức năng của lệnh CASE WHEN, cú pháp của câu lệnh và ví dụ về lệnh CASE.
[Mysql] – Bài 3 – If else, case, while do trong Mysql
- Tác giả: nongdanit.info
- Đánh giá: 3 ⭐ ( 1776 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Hướng dẫn lập trình database với MySQL, Lập trình database với MySQL, các lệnh if elseif,case, while do trong mysql, các hướng dẫn về các lệnh trong MySQL
Toán tử so sánh LIKE, IN trong SQL
- Tác giả: thuthuat.taimienphi.vn
- Đánh giá: 4 ⭐ ( 3508 lượt đánh giá )
- Khớp với kết quả tìm kiếm: toan tu so sanh LIKE IN trong SQL, Toán tử so sánh LIKE, IN trong SQL
Câu lệnh điều kiện WHERE trong SQL
- Tác giả: freehost.page
- Đánh giá: 5 ⭐ ( 5372 lượt đánh giá )
- Khớp với kết quả tìm kiếm:
Tổng hợp những câu lệnh SQL cơ bản
- Tác giả: topdev.vn
- Đánh giá: 5 ⭐ ( 5549 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Các phiên bản của SQL Server: Enterprise, Personal, Desktop, Developer,.. Các bộ phận của SQL Server: Enterprise Manager, Query Analyzer, Books Online,..
Câu lệnh SELECT có điều kiện trong SQL Server
- Tác giả: kienit.com
- Đánh giá: 4 ⭐ ( 3432 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Câu lệnh SELECT có điều kiện trong SQL được dùng nhiều. Kết quả trả về là các cột SELECT SQL thường kết hợp thêm WHERE hoặc ORDER BY.
Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình