Câu lệnh CASE trong SQL – mệnh đề trường hợp trong câu lệnh where sql

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

[

SQLShackDemo

]

Đ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

)

KHÔNG

KHÔNG ĐỦ

,

Giới tính

VARCHAR

(

1

)

KHÔNG

KHÔNG ĐỦ

,

Mã trạng thái

VARCHAR

(

20

)

KHÔNG

NULL

,

Mức lương

tiền

KHÔNG

KHÔNG ĐỦ

,

)

ĐI

SỬ DỤNG

[

SQLShackDemo

]

ĐI

ĐẶT

IDENTITY_INSERT

[

dbo

]

.

[

Nhân viên

]

BẬT

ĐI

CHÈN

[

dbo

]

.

[

Nhân viên

]

(

[

ID nhân viên < / p>

]

,

[

Tên nhân viên

]

,

[

Giới tính

]

,

[

Mã trạng thái

]

,

[

Mức lương

< p class = "crayon-sy">]

)

GIÁ TRỊ

(

201

,

N

‘Jerome’

,

N

‘M’

,

< / p>

N

‘FL’

,

83000.0000

)

ĐI

CHÈN

[

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

[

dbo

]

.

[

Nhân viên

]

(

[

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’

,

N

‘F’

,

N

‘AL’

,

< / p>

76000.0000

)

ĐI

CHÈN

[

dbo

]

.

[

Nhân viên

]

(

[

ID nhân viên

]

,

[

EmployeeName

]

,

[

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

]

(

[

ID nhân viên

]

,

[

EmployeeName

]

,

[

Giới tính

]

,

< p class = "crayon-h">

[

Mã trạng thái

]

,

[

Mức lương

]

)

GIÁ TRỊ

(

205

,

< p class = "crayon-i"> N

‘Edward’

,

N

‘M’

,

N

‘FL’ < / p>

,

93000.0000

)

ĐI

CHÈN

[

dbo

]

.

[

Nhân viên

]

(

[

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

‘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

]

,

[

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

]

,

[

Mức lương

]

)

GIÁ TRỊ

< p class = "crayon-sy"> (

208

,

N

‘Nicholas’

,

N

‘F’

,

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

]

,

[

StateCode

]

,

[

Mức lương

]

)

GIÁ TRỊ

(

209

,

N

‘Lawrence’

,

N

‘M’ < / p>

,

N

‘IN’

,

95000.0000

)

ĐI

CHÈN

[< / p>

dbo

]

.

[

Nhân viên

]

(

[

EmployeeID

]

,

[

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’

Xem Thêm  Phương thức phân chia chuỗi () trong Python - chia một chuỗi trong python

,

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

TRƯỜNG HỢP

Biểu thức

Khi nào

expression1

Sau đó

Kết quả 1

Khi nào

expression2

Sau đó

Kết quả 2

.

.

.

ELSE

Kết quả

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 Nữ trong đầu ra thay vì M 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Ì

kết quả

KHI NÀO

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

Tên nhân viên

,

TRƯỜNG HỢP

KHI NÀO

Mức lương

& gt; =

80000

Mức lương

& lt; =

100000

THÌ

‘Giám đốc’

KHI NÀO

Mức lương

& gt; =

50000

Lương

& lt;

80000

< p class = "crayon-h">

THÌ

‘Chuyên gia tư vấn cấp cao’

Khác

‘Đạ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.

  1. Đố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
  2. Đố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

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

Xem Thêm  'Khoảng cách' trong HTML là gì? - nhịp là gì

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

Mức lương

& lt; =

100000

THÌ

‘Đạo diễn’

KHI NÀO

Mức lương

& gt; = < / p>

50000

Mức lương

& lt;

80000

THÌ

‘Chuyên gia tư vấn cấp cao’

Khác

‘Giám đốc’

HẾT

NHƯ

Chỉ định

,

Tối thiểu

(

lương

)

as

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

KHI NÀO

Mức lương

& gt; =

80000

< p class = "crayon-h">

Mức lương

& lt; =

100000

THÌ < / p>

‘Đạo diễn’

KHI NÀO

Mức lương

& gt; =

50000

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

nhân viên

SET

StateCode

=

CASE

StateCode

KHI NÀO

‘Ar’

VẬY

‘FL’

KHI NÀO

‘GE’

THÌ

‘AL’

ELSE

‘IN’

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.

Xem Thêm  Tìm hiểu về giải thuật Đệ Quy - đệ quy fibonacci

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

Khai báo

@

Tên nhân viên

varchar

(

100

)

Khai báo

@

Giới tính

int

Khai báo

@

Mã lệnh

char

(

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

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Ì

‘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