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 : mệnh đề trường hợp trong câu lệnh sql
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 Insert. 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
NULL
,
Mức lương
tiền
KHÔNG
KHÔNG ĐỦ
, p>
)
ĐI
SỬ DỤNG
[
SQLShackDemo
] p >
ĐI
ĐẶT
IDENTITY_INSERT
[
dbo
]
.
[ p >
Nhân viên
]
BẬT
ĐI
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 >
]
,
[
Mã trạng thái
]
,
[
Mức lương
< p class = "crayon-sy">]
)
GIÁ TRỊ
(
201 p>
,
N
‘Jerome’
,
N
‘M’
,
< / p>
N
‘FL’
,
83000.0000
)
ĐI
CHÈN
[ p >
dbo
]
.
[
Nhân viên
]
(
[
ID nhân viên
]
,
[
Tên nhân viên
]
,
[
Giới tính
]
,
[
StateCode
]
,
[
Mức lương
]
)
GIÁ TRỊ
(
202
,
N
‘Ray’ < / p>
,
N
‘M’
,
N
‘AL’
,
88000.0000
)
ĐI
CHÈN
p>
[
dbo
]
.
[
Nhân viên
]
(
[ p >
EmployeeID
]
,
[
Tên nhân viên
]
,
[
< p class = "crayon-i"> Giới tính
]
,
[
Mã trạng thái
] < / p>
,
[
Mức lương
] < / p>
)
GIÁ TRỊ
(
203
,
N
‘Stella’ p>
,
N
‘F’
,
N
‘AL’
,
< / p>
76000.0000
)
ĐI
CHÈN
[
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Ị
(
204
,
N
‘Gilbert’
, < / p>
N
‘M’
< p class = "crayon-sy">,
N
‘Ar’
,
42000.0000
)
ĐI
CHÈN < / p>
[
dbo
]
.
[
Nhân viên
]
( p >
[
ID nhân viên
]
,
[
EmployeeName
]
,
[
Giới tính
]
,
< p class = "crayon-h">
[
Mã trạng thái
]
,
[ p>
Mức lương
]
)
GIÁ TRỊ
(
205
,
< p class = "crayon-i"> N
‘Edward’
,
N
‘M’
,
N
‘FL’ < / p>
,
93000.0000
)
ĐI
CHÈN
p>
[
dbo
]
.
[
Nhân viên
]
(
[ p >
EmployeeID
]
,
[
Tên nhân viên
]
,
[
< p class = "crayon-i"> Giới tính
]
,
[
Mã trạng thái
] < / p>
,
[
Lương
]
)
GIÁ TRỊ
(
206
,
N p >
‘Ernest’
,
N
‘F’
,
N
‘Al’
,
64000.0000
)
< / p>
ĐI
CHÈN
[
dbo
]
.
[
Nhân viên
]
< p class = "crayon-sy"> (
[
EmployeeID
]
,
[< / p>
Tên nhân viên
]
,
[
Giới tính
]
,
[ p >
StateCode
]
,
[
Mức lương
]
)
GIÁ TRỊ
< p class = "crayon-h">
(
207
,
N
‘ Jorge ‘
,
N
‘F’
,
N
‘IN’
,
75000.0000
)
ĐI
CHÈN
[
dbo
]
.
[
Nhân viên
]
(
[
ID nhân viên
< p class = "crayon-sy">]
,
[
EmployeeName
]
,
[
Giới tính
]
,
[
Mã trạng thái p>
]
,
[
Mức lương
]
)
GIÁ TRỊ
< p class = "crayon-sy"> (
208
,
N
‘Nicholas’
,
N
‘F’ p >
,
N
‘Ge’
,
71000.0000
)
ĐI
CHÈN
[
dbo
]
.
[
< p class = "crayon-i"> Nhân viên
]
(
[
EmployeeID
] < / p>
,
[
Tên nhân viên
]
,
[
Giới tính
] p >
,
[
StateCode
]
,
[
Mức lương
]
)
GIÁ TRỊ
p >
(
209
,
N
‘Lawrence’
,
N
‘M’ < / p>
,
N
‘IN’
,
95000.0000
)
ĐI
CHÈN
[< / p>
dbo
]
.
[
Nhân viên
]
(
[
EmployeeID p>
]
,
[
Tên nhân viên
]
,
[
Giới tính
]
,
[
Mã trạng thái
]
,
[
Mức lương
]
)
GIÁ TRỊ
(
210
,
N
‘Salvador’
,
N
‘M’
,
N
‘Co’ p>
,
75000.0000
)
ĐI < / p>
BỘ
IDENTITY_INSERT
[< / p>
dbo
]
.
[
Nhân viên
]
TẮT
ĐI
< / p>
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ể xem cú pháp sau cho câu lệnh Case với 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 mức 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
từ
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.
Báo cáo 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>
Hộp đựng
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ọ. Chúng tôi cũng 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 câu 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Ì
‘Đạo diễn’ p >
KHI NÀO
Mức lương
& gt; = < / p>
50000
VÀ
Mức lương
& lt;
80000
p >
THÌ
‘Chuyên gia tư vấn cấp cao’
p>
Khác
‘Giám đốc’
HẾT
NHƯ
Chỉ định
,
Tối thiểu
(
lương
)
as p>
MinimumSalary
,
Tối đa
(
Mức lương
)
as
< p class = "crayon-i"> MaximumSalary
từ
Nhân viên
Nhóm
Bởi
TRƯỜNG HỢP
p>
KHI NÀO
Mức lương
& gt; =
80000
VÀ
< p class = "crayon-h">
Mức lương
& lt; =
100000
THÌ < / p>
‘Đạo diễn’
KHI NÀO
Mức lương
& gt; =
50000 p >
VÀ
Lương
& lt;
80000
THÌ
‘Chuyên gia tư vấn cấp cao’
Khác
‘Đạo diễn’
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 một 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 chèn, 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ó sẽ 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 tính 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ủ đề mệnh đề trường hợp trong câu lệnh where sql
10. Mệnh đề WHERE trong SQL
- Tác giả: DaoDucDev
- Ngày đăng: 2020-06-14
- Đánh giá: 4 ⭐ ( 8719 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Trong video này, chúng ta sẽ cùng tìm kiểu cách sử dụng mệnh để WHERE để lọc kết quả của các câu lệnh SELECT, UPDATE hay DELETE trong SQL.
Mệnh đề WHERE được sử dụng kết hợp với các toàn tử để mô tả được điều kiện lọc dữ liệu.
Câu lệnh Where trong SQL (P1)
- Tác giả: gnv.edu.vn
- Đánh giá: 4 ⭐ ( 7572 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Hướng dẫn câu lệnh Where trong SQL kèm HÌNH ẢNH và VÍ DỤ CHI TIẾT, GNV sẽ giúp bạn hiểu và áp dụng thành thạo mệnh đề này hơn.
Mệnh đề lọc dữ liệu theo điều kiện
- Tác giả: kienit.com
- Đánh giá: 4 ⭐ ( 1524 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Mệnh đề WHERE trong SQL dùng để lọc dữ liệu theo điều kiện cho sẵn. Trong câu lệnh SELECT có điều kiện thì WHERE nằm sau mệnh đề FROM.
Mệnh đề WHERE trong SQL
- Tác giả: shareprogramming.net
- Đánh giá: 5 ⭐ ( 9375 lượt đánh giá )
- Khớp với kết quả tìm kiếm:
Mệnh đề WHERE trong SQL Server
- Tác giả: quantrimang.com
- Đánh giá: 3 ⭐ ( 3026 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Trong SQL Server )T-SQL), mệnh đề WHERE được dùng để lọc kết quả từ các lệnh SELECT, INSERT, UPDATE hoặc DELETE.
Mệnh đề WHERE trong SQL
- Tác giả: vietjack.com
- Đánh giá: 4 ⭐ ( 7843 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Mệnh đề WHERE trong SQL – Học SQL cơ bản nâng cao. Học SQL trực tuyến theo các bước từ Khái niệm về database, Cú pháp SQL, Truy vấn SELECT, Truy vấn INSERT, Lệnh DELETE, Truy vấn UPDATE, Ràng buộc (Constraint), Truy vấn DROP, Lệnh TRUNCATE, Từ khóa DISTINCT, Mệnh đề ORDER BY, Mệnh đề GROUP BY, Mệnh đề WHERE, Sử dụng Join, Sử dụng View, Sử dụng Sequence, Transaction, Hàm xử lý, Bảng tạm, Toán tử.
SQL trong Access: Mệnh đề WHERE
- Tác giả: support.microsoft.com
- Đánh giá: 5 ⭐ ( 7751 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Bài viết này mô tả cách viết mệnh đề WHERE trong cơ sở dữ liệu Access.
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