Câu lệnh SQL CASE WHEN: Cú pháp, ví dụ thực tế và các lỗi thường gặp

  1. Trang chủ
  2. Blog
  3. Cơ sở dữ liệu & SQL

Cơ sở dữ liệu & SQL

Câu lệnh SQL CASE WHEN: Cú pháp, ví dụ thực tế và các lỗi thường gặp

TRƯỜNG HỢP KHI NÀO là cách bạn viết logic if-then trong SQL. Tìm hiểu cả hai biểu mẫu, sau đó sử dụng nó cho nhãn, báo cáo kiểu trục, sắp xếp tùy chỉnh và cập nhật an toàn, đồng thời tránh bẫy NULL và bẫy đặt hàng.

Đọc 8 phút
Câu lệnh SQL CASE WHEN: cú pháp, ví dụ thực tế và các lỗi thường gặp

Điểm chính

  • CASE trả về giá trị dựa trên điều kiện first là đúng.
  • Đặt những điều kiện cụ thể nhất lên đầu tiên, nếu không những điều kiện muộn hơn có thể không bao giờ đạt được.
  • Không có ELSE, các hàng không khớp sẽ trả về NULL.
  • Bên trong SUM hoặc COUNT, CASE biến một truy vấn thành một báo cáo kiểu trục xoay nhỏ gọn.

Hầu hết các báo cáo đều cần một số logic: gắn nhãn các đơn hàng lớn hay nhỏ, đếm các đơn hàng đã thanh toán và đang chờ xử lý cạnh nhau hoặc hiển thị các mặt hàng khẩn cấp trước tiên. TRƯỜNG HỢP SQL KHI xử lý tất cả những điều này trực tiếp bên trong một truy vấn và nó hoạt động trên tất cả các cơ sở dữ liệu chính.

Chúng tôi đã chạy mọi truy vấn ở đây bằng SQLite 3.50 và kết quả hiển thị là từ lần chạy đó. CASE là một phần của SQL tiêu chuẩn, vì vậy nó hoạt động theo cách tương tự trong PostgreSQL, MySQL, SQL Server và Oracle đối với các ví dụ này.

TRƯỜNG HỢP KHI NÀO là gì?

CASE là một biểu thức, không phải là một lệnh riêng biệt. Nó đánh giá các điều kiện theo thứ tự và trả về một giá trị, do đó nó có thể đi đến bất cứ nơi nào mà giá trị được cho phép: trong SELECT, WHERE, GROUP BY, ORDER BY hoặc bên trong các hàm. Nó luôn kết thúc bằng END.

CASE
  WHEN condition1 THEN result1
  WHEN condition2 THEN result2
  ELSE fallback
END

Bảng mẫu

CREATE TABLE orders (id INT, customer TEXT, total INT, status TEXT);

INSERT INTO orders VALUES
 (1,'Asha',1200,'paid'), (2,'Ben',300,'pending'),
 (3,'Asha',800,'paid'), (4,'Chitra',2500,'shipped'),
 (5,'Dev',150,'cancelled'), (6,'Ben',NULL,'pending');

Lưu ý rằng lệnh 6 không có tổng. Hàng đó quan trọng sau này.

TRƯỜNG HỢP đã tìm kiếm

Đây là dạng linh hoạt hơn, vì mỗi WHEN có đầy đủ điều kiện riêng:

SELECT id, total,
       CASE
         WHEN total >= 1000 THEN 'large'
         WHEN total >= 500 THEN 'medium'
         ELSE 'small'
       END AS size
FROM orders;

-- 1 | 1200 | large
-- 2 |  300 | small
-- 3 |  800 | medium
-- 4 | 2500 | large
-- 5 |  150 | small
-- 6 | NULL | small

Nhìn vào hàng cuối cùng. Đơn hàng 6 không có tổng nhưng lại được dán nhãn “nhỏ”. Cả hai so sánh với NULL đều không đúng, vì vậy nó rơi vào ELSE. Chúng tôi trình bày cách khắc phục điều này trong phần NULL. Luôn đặt tên cho kết quả bằng AS, nếu không bạn có thể nhận được một tên cột khó hiểu.

TRƯỜNG HỢP ĐƠN GIẢN

Khi bạn so sánh một cột với các giá trị cố định, biểu mẫu ngắn hơn sẽ đọc tốt hơn:

SELECT id,
       CASE status
         WHEN 'paid' THEN 'Complete'
         WHEN 'shipped' THEN 'Complete'
         WHEN 'pending' THEN 'Waiting'
       END AS label
FROM orders;

-- 1 | Complete
-- 2 | Waiting
-- 3 | Complete
-- 4 | Complete
-- 5 | NULL
-- 6 | Waiting
biểu mẫu So sánh Có thể sử dụng phạm vi? Tốt nhất cho
Đơn giản Một biểu hiện cho sự bình đẳng Không Ánh xạ mã tới nhãn
Đã tìm kiếm Bất kỳ điều kiện nào cho mỗi nhánh Có Phạm vi, nhiều cột, kiểm tra NULL

Vấn đề đặt hàng

CASE dừng ở điều kiện đúng đầu tiên và đây là lỗi logic phổ biến nhất. Hoán đổi hai điều kiện từ truy vấn trước đó của chúng tôi:

SELECT id, total,
       CASE
         WHEN total >= 500 THEN 'medium'
         WHEN total >= 1000 THEN 'large'
         ELSE 'small'
       END AS size
FROM orders WHERE id IN (1, 4);

-- 1 | 1200 | medium
-- 4 | 2500 | medium

Bây giờ không có gì có thể “lớn”. Tổng số 2500 cũng ít nhất là 500, nên nhánh đầu tiên thắng và nhánh thứ hai không bao giờ đạt được. Không có lỗi xuất hiện, chỉ có nhãn sai. Đối với các phạm vi, hãy đặt điều kiện hạn chế nhất trước tiên hoặc viết các phạm vi hoàn chỉnh, chẳng hạn như total >= 500 AND total < 1000.

Điều gì xảy ra nếu không có ELSE?

Trong ví dụ CASE đơn giản của chúng tôi ở trên, đơn hàng 5 đã bị hủy và không có chi nhánh nào xử lý việc đó, vì vậy kết quả là NULL. Đôi khi đó chính xác là điều bạn muốn, như phần tiếp theo sẽ trình bày. Nhưng khi tạo nhãn, ELSE 'other' rõ ràng thường tốt hơn vì nó hiển thị các giá trị không mong muốn thay vì để trống trong báo cáo.

Mẹo: Tất cả các nhánh phải trả về cùng một loại. Việc trộn văn bản và số hoạt động dễ dàng trong SQLite, nhưng các cơ sở dữ liệu chặt chẽ hơn, chẳng hạn như PostgreSQL, sẽ gây ra lỗi hoặc cố gắng chuyển đổi giá trị theo cách bạn không mong muốn.

Báo cáo kiểu tổng hợp với SUM

Đây là một trong những mẫu hữu ích nhất trong SQL hàng ngày. Việc gói CASE trong một tổng hợp sẽ biến các hàng thành các cột, với một hàng cho mỗi khách hàng:

SELECT customer,
       SUM(CASE WHEN status = 'paid' THEN total ELSE 0 END) AS paid,
       SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) AS pending_orders
FROM orders
GROUP BY customer
ORDER BY customer;

-- Asha   | 2000 | 0
-- Ben    |    0 | 2
-- Chitra |    0 | 0
-- Dev    |    0 | 0

Một truy vấn hiện cung cấp cả doanh thu được thanh toán và số lượng đơn đặt hàng đang chờ xử lý mà không cần các truy vấn hoặc liên kết riêng biệt. Mẫu này hoạt động trong hầu hết mọi cơ sở dữ liệu, không giống như cú pháp PIVOT chuyên dụng mà chỉ một số cơ sở dữ liệu cung cấp. Nếu GROUP BY là điều mới mẻ đối với bạn, hãy đọc SQL GROUP BY and HAVING.

Số lượng có điều kiện

COUNT bỏ qua NULL, do đó CASE không có ELSE chỉ tính các hàng khớp:

SELECT COUNT(*) AS all_orders,
       COUNT(CASE WHEN status = 'paid' THEN 1 END) AS paid_orders,
       COUNT(CASE WHEN total >= 1000 THEN 1 END) AS large_orders
FROM orders;

-- 6 | 2 | 2

Hãy cẩn thận: nếu bạn thêm ELSE 0 vào trong COUNT, mọi hàng sẽ được tính vì 0 không phải là NULL. Sử dụng ELSE 0 với SUM và bỏ nó đi với COUNT. PostgreSQL và SQLite cũng hỗ trợ COUNT(*) FILTER (WHERE ...), đọc rất hay nhưng không phải ở đâu cũng có.

Nhóm theo CASE

Bạn có thể tạo nhóm của riêng mình rồi tóm tắt chúng:

SELECT CASE WHEN total >= 1000 THEN 'large' ELSE 'other' END AS bucket,
       COUNT(*)
FROM orders
GROUP BY bucket
ORDER BY bucket;

-- large | 2
-- other | 4

Nhóm theo bí danh hoạt động trong SQLite, PostgreSQL và MySQL. SQL Server không cho phép điều đó, vì vậy trước tiên bạn sẽ phải lặp lại toàn bộ biểu thức hoặc đặt truy vấn vào CTE hoặc truy vấn con.

Sắp xếp tùy chỉnh với ORDER BY

Thứ tự bảng chữ cái hiếm khi là điều doanh nghiệp mong muốn. CASE cho phép bạn xác định thứ tự của riêng mình:

SELECT id, status FROM orders
ORDER BY CASE status
           WHEN 'pending' THEN 1
           WHEN 'paid' THEN 2
           ELSE 3
         END, id;

-- 2 | pending
-- 6 | pending
-- 1 | paid
-- 3 | paid
-- 4 | shipped
-- 5 | cancelled

Các đơn đặt hàng đang chờ xử lý được ưu tiên trước, điều này rất hữu ích cho hàng đợi công việc. Cột sắp xếp thứ hai, id, giữ các hàng theo thứ tự có thể dự đoán được trong mỗi nhóm.

TRƯỜNG HỢP trong CẬP NHẬT

CASE cho phép một câu lệnh áp dụng các thay đổi khác nhau cho các hàng khác nhau. Tại đây, các lệnh nhỏ đang chờ xử lý được gắn cờ để xem xét:

UPDATE orders
SET status = CASE
               WHEN status = 'pending' AND total < 500 THEN 'review'
               ELSE status
             END;

SELECT id, status FROM orders WHERE customer = 'Ben';

-- 2 | review
-- 6 | pending

ELSE status giữ các hàng khác không thay đổi. Bỏ nó đi là nguy hiểm, vì các hàng không khớp sẽ được đặt thành NULL. Nếu không có mệnh đề WHERE thì câu lệnh này cũng chạm vào mọi hàng, do đó, trên các bảng lớn, hãy thêm bộ lọc và xem xét gói thay đổi vào giao dịch để bạn có thể kiểm tra kết quả trước khi thực hiện. Cũng lưu ý rằng thứ tự 6 không thay đổi, vì tổng giá trị NULL của nó không thỏa mãn total < 500.

Bẫy vô giá trị

NULL gây ra hai vấn đề riêng biệt với CASE. Đầu tiên, dạng đơn giản so sánh bằng cách sử dụng đẳng thức và không có gì bằng NULL, thậm chí chính nó cũng không bằng NULL:

SELECT CASE NULL WHEN NULL THEN 'matched' ELSE 'not matched' END;

-- not matched

Vì vậy CASE col WHEN NULL không bao giờ khớp. Thay vào đó, hãy sử dụng biểu mẫu tìm kiếm với IS NULL. Thứ hai, như chúng ta đã thấy với đơn hàng 6, giá trị NULL vượt qua các so sánh và đạt đến ELSE. Cách khắc phục là kiểm tra nó trước:

SELECT id,
       CASE
         WHEN total IS NULL THEN 'unknown'
         WHEN total >= 1000 THEN 'large'
         ELSE 'other'
       END AS size
FROM orders WHERE id IN (1, 2, 6);

-- 1 | large
-- 2 | other
-- 6 | unknown

Đặt hàng 6 bây giờ nhận được một nhãn trung thực. Hướng dẫn của chúng tôi về Các giá trị SQL NULL trình bày đầy đủ về hành vi này.

CASE so với các tùy chọn khác

Tùy chọn Hoạt động ở Sử dụng nó khi
TRƯỜNG HỢP Tất cả các cơ sở dữ liệu chính Bạn muốn logic di động
LIÊN KẾT Tất cả các cơ sở dữ liệu chính Bạn chỉ cần một dự phòng cho NULL
IF() MySQL Một sự lựa chọn hai chiều đơn giản
IIF() Máy chủ SQL, SQLite Một sự lựa chọn hai chiều đơn giản
DECODE() Lời tiên tri Mã Oracle cũ hơn
Bảng tra cứu Tất cả Ánh xạ dài hoặc thay đổi thường xuyên

Lựa chọn cuối cùng đó xứng đáng được suy nghĩ. Nếu một CASE phát triển thành ba mươi nhánh và xuất hiện trong năm truy vấn, hãy di chuyển ánh xạ vào một bảng và nối vào bảng đó. Sau đó, thay đổi là cập nhật một hàng chứ không phải thay đổi mã ở năm vị trí.

Những lỗi thường gặp

  • Thứ tự điều kiện sai. Điều kiện rộng trước tiên sẽ ẩn điều kiện hẹp hơn.
  • Quên END. Đây là lỗi cú pháp thường gặp nhất.
  • Sử dụng WHEN NULL. Nó không bao giờ khớp, vì vậy hãy sử dụng WHEN col IS NULL.
  • Thêm ELSE 0 vào trong COUNT. Nó đếm tất cả các hàng.
  • Bỏ qua ELSE trong CẬP NHẬT. Nó có thể xóa các giá trị bằng NULL.
  • Lọc theo CASE trong WHERE. Nó có thể ngăn việc sử dụng một chỉ mục. Xem hướng dẫn của chúng tôi về Tối ưu hóa truy vấn SQL.

Lời kết

TRƯỜNG HỢP KHI NÀO là một tính năng nhỏ nhưng lại có tác dụng rất lớn. Hãy nhớ ba quy tắc: nhánh thực sự đầu tiên sẽ thắng, các hàng chưa khớp sẽ trở thành NULL nếu không có ELSE và NULL cần kiểm tra riêng. Để thực hành, hãy lấy một báo cáo mà bạn hiện đang xây dựng với một số truy vấn và cố gắng tạo báo cáo đó dưới dạng một truy vấn bằng cách sử dụng SUM(CASE ...).

Câu hỏi thường gặp

CASE WHEN làm gì trong SQL?

Nó thêm logic if-then vào một truy vấn. SQL kiểm tra từng điều kiện theo thứ tự và trả về giá trị cho điều kiện đầu tiên đúng hoặc giá trị ELSE nếu không có điều kiện nào.

Điều gì xảy ra nếu không có ELSE trong câu lệnh CASE?

Các hàng không khớp với điều kiện trả về NULL. Điều này hữu ích trong COUNT, nhưng trong nhãn và cập nhật, nó có thể gây ra khoảng trống hoặc mất dữ liệu.

Tôi có thể sử dụng CASE trong mệnh đề WHERE không?

Có, bởi vì nó là một biểu thức. Tuy nhiên, các điều kiện AND và OR đơn giản thường rõ ràng hơn và chúng có nhiều khả năng sử dụng chỉ mục hơn.

Sự khác biệt giữa CASE đơn giản và được tìm kiếm là gì?

CASE đơn giản so sánh một biểu thức với các giá trị cố định để tìm đẳng thức. CASE được tìm kiếm có đầy đủ điều kiện trong mỗi WHEN, vì vậy nó có thể xử lý các phạm vi và kiểm tra NULL.

Các câu lệnh CASE có thể lồng nhau được không?

Có, một CASE có thể xuất hiện bên trong một CASE khác. Tuy nhiên, việc lồng sâu khó đọc nên hãy cân nhắc việc kết hợp các điều kiện với AND hoặc sử dụng bảng tra cứu.

Tiếp tục học hỏi

Làm việc với Stack Quora

Cần trợ giúp về kiểm tra, WordPress hoặc SEO?

Chúng tôi giúp các nhóm phát triển phần mềm tốt hơn và phát triển trang web của họ. Hãy cho chúng tôi biết bạn đang làm gì và chúng tôi sẽ đề xuất bước tiếp theo rõ ràng.

Tiếp tục đọc

Thêm hướng dẫn về thử nghiệm, AI và phát triển hiện đại

Bạn thích bài viết này? Chọn một chủ đề và chuyển ngay sang phần hướng dẫn mới nhất của chúng tôi.

Trí tuệ nhân tạo

Giải thích về ảo giác AI: Tại sao các mô hình ngôn ngữ lại tạo nên mọi thứ và cách giảm thiểu nó

Ảo giác AI đã giải thích: chúng là gì, tại sao mô hình ngôn ngữ tạo ra chúng, các loại phổ biến, cách giảm thiểu chúng bằng cách căn cứ và nhắc nhở …

Đọc bài viết →
DevOps

Giải thích về các biến môi trường: Tệp .env, bí mật và cấu hình được thực hiện đúng

Các biến môi trường được giải thích bằng các ví dụ Python mà chúng tôi đã chạy: đọc và thiết lập chúng, tại sao mọi giá trị đều là một chuỗi, tệp .e…

Đọc bài viết →
Phát triển phần mềm

Giải thích về giới hạn tỷ lệ API: Thuật toán, tiêu đề và xử lý lỗi 429

Giới hạn tốc độ API được giải thích bằng mô phỏng mà chúng tôi đã chạy: nhóm mã thông báo, cửa sổ cố định, cửa sổ trượt, 429 phản hồi, tiêu đề giới …

Đọc bài viết →
Tự động hóa kiểm thử

Chế giễu bằng Python: unittest.mock, patch và những sai lầm khiến bài kiểm tra nói dối

Mô phỏng bằng Python với unittest.mock, đã được thử nghiệm: Mock và return_value, side_effect, vá lỗi nơi sử dụng tên, thông số kỹ thuật và thông số…

Đọc bài viết →
Kiểm thử phần mềm

Giải thích về phạm vi bảo hiểm của mã: Phạm vi tuyến so với chi nhánh và ý nghĩa thực sự 100%

Phạm vi bảo hiểm mã được giải thích bằng cách chạy phạm vi bảo hiểm thực tế: phạm vi bảo hiểm dòng, chi nhánh và điều kiện, đọc báo cáo, lý do tại s…

Đọc bài viết →
Cơ sở dữ liệu & SQL

DELETE vs TRUNCATE vs DROP trong SQL: Sự khác biệt, khôi phục và thời điểm sử dụng mỗi loại

DELETE vs TRUNCATE vs DROP được giải thích bằng SQL đã được thử nghiệm: mỗi loại loại bỏ, khôi phục, kích hoạt, đặt lại danh tính, tốc độ và Postgre…

Đọc bài viết →
Cơ sở dữ liệu & SQL

Giải thích về Chế độ xem SQL: Tạo, sử dụng và tránh những cạm bẫy, kèm theo ví dụ

Chế độ xem SQL được giải thích bằng các truy vấn chúng tôi đã chạy: tạo chế độ xem, kết quả trực tiếp, ẩn cột, hiệu suất, chế độ xem có thể cập nhật…

Đọc bài viết →
Phát triển phần mềm

Giao diện TypeScript so với loại: Sự khác biệt thực sự, được thử nghiệm bằng trình biên dịch

Giao diện TypeScript so với loại, được kiểm tra bằng trình biên dịch thực: cả hai có thể làm gì, chỉ một người có thể làm gì, hợp nhất khai báo, mở …

Đọc bài viết →
Phát triển phần mềm

Giải thích về Python *args và **kwargs: Hàm linh hoạt với ví dụ rõ ràng

Python *args và **kwargs được giải thích bằng mã chúng tôi đã chạy: đóng gói và giải nén, thứ tự tham số, đối số chỉ từ khóa và chỉ vị trí, trình tr…

Đọc bài viết →
Phát triển phần mềm

Hàm Lambda của Python: Cú pháp, cách sử dụng thực tế và khi nào không nên sử dụng chúng

Các hàm lambda của Python được giải thích bằng mã chúng tôi đã chạy: cú pháp, sắp xếp bằng khóa, bản đồ và bộ lọc, các phần đóng, bẫy liên kết muộn …

Đọc bài viết →
Trí tuệ nhân tạo

Đại lý AI là gì? Cách chúng hoạt động, với vòng lặp tác nhân đơn giản, bạn có thể chạy

Tác nhân AI là gì? Hướng dẫn đơn giản về vòng lặp tác nhân, công cụ, bộ nhớ và lan can, với một vòng lặp Python nhỏ mà chúng tôi đã chạy, những rủi …

Đọc bài viết →
DevOps

Giám sát và Khả năng quan sát: Sự khác biệt thực sự, với nhật ký, số liệu và dấu vết

Giải thích về giám sát và khả năng quan sát: lỗi đã biết và chưa biết, nhật ký, số liệu và dấu vết, hướng dẫn về sự cố thanh toán, tín hiệu vàng, Op…

Đọc bài viết →
DevOps

Docker Volumes vs Bind Mounts: Duy trì dữ liệu vùng chứa đúng cách

Giải thích về khối lượng Docker và liên kết gắn kết: tại sao dữ liệu vùng chứa biến mất, khối lượng được đặt tên, liên kết gắn kết, tmpfs, ví dụ về …

Đọc bài viết →
Tự động hóa kiểm thử

TDD vs BDD: Key Differences, One Feature Built Both Ways and When to Use Each

TDD và BDD được giải thích bằng một tính năng giảm giá được xây dựng theo cả hai cách: tái cấu trúc màu đỏ-xanh với mã chúng tôi đã chạy, kịch bản C…

Đọc bài viết →
Kiểm thử phần mềm

Kiểm tra chấp nhận của người dùng (UAT): Quy trình, danh sách kiểm tra và ví dụ thực tế

Giải thích về thử nghiệm chấp nhận của người dùng: ai chạy nó, nó khác với QA như thế nào, quy trình bảy bước, mẫu trường hợp thử nghiệm UAT, danh s…

Đọc bài viết →
Cơ sở dữ liệu & SQL

Giải thích về các giá trị NULL của SQL: IS NULL, COALESCE, NULLIF và những cái bẫy cần tránh

Các giá trị SQL NULL được giải thích bằng các truy vấn chúng tôi đã chạy: logic ba giá trị, IS NULL, COALESCE, NULLIF, cách tổng hợp, kết hợp và sắp…

Đọc bài viết →
Cơ sở dữ liệu & SQL

Câu lệnh SQL CASE WHEN: Cú pháp, ví dụ thực tế và các lỗi thường gặp

TRƯỜNG HỢP SQL KHI được giải thích bằng các truy vấn mà chúng tôi đã chạy: các biểu mẫu đơn giản và được tìm kiếm, thứ tự điều kiện, các thủ thuật S…

Đọc bài viết →
Phát triển phần mềm

JWT là gì? Mã thông báo Web JSON được giải thích bằng một ví dụ hoạt động

JWT là gì? Mã thông báo Web JSON đã giải thích: ba phần, mã thông báo được xây dựng và giả mạo trong mã chúng tôi đã chạy, JWT so với phiên, lưu trữ…

Đọc bài viết →
Phát triển phần mềm

Giải thích về vòng lặp sự kiện JavaScript: Ngăn xếp cuộc gọi, Microtask và bộ hẹn giờ kèm ví dụ

Vòng lặp sự kiện JavaScript được giải thích bằng mã chúng tôi đã chạy: ngăn xếp cuộc gọi, hàng đợi tác vụ và vi nhiệm, tại sao setTimeout 0 không di…

Đọc bài viết →
Phát triển phần mềm

Giải thích về trình tạo và năng suất của Python: Tiết kiệm bộ nhớ bằng các ví dụ thực tế

Trình tạo và lợi nhuận Python được giải thích bằng mã chúng tôi đã chạy: cách chúng tạm dừng và tiếp tục, đo mức tiết kiệm bộ nhớ, quy trình, chuỗi …

Đọc bài viết →
Trí tuệ nhân tạo

Nhúng là gì? Giải thích sự tương đồng về vectơ và Cosine một cách đơn giản

nhúng là gì? Hướng dẫn bằng ngôn ngữ đơn giản về vectơ, độ tương tự cosine và tìm kiếm ngữ nghĩa, với một ví dụ nhỏ mà chúng tôi đã chạy, các cách s…

Đọc bài viết →
DevOps

Triển khai Blue-Green và Canary: Sự khác biệt, sự đánh đổi và cách lựa chọn

Giải thích về triển khai Blue-green và Canary: cách hoạt động của từng loại, chi phí, rủi ro và khôi phục, nhóm người dùng ổn định mà chúng tôi đã t…

Đọc bài viết →
Tự động hóa kiểm thử

Kiểm tra không ổn định: Nguyên nhân gây ra chúng và cách khắc phục chúng vĩnh viễn

Các thử nghiệm không ổn định được giải thích bằng các bản demo mà chúng tôi đã chạy: nguyên nhân chính, cách xác nhận và chẩn đoán nguyên nhân, cách…

Đọc bài viết →
Kiểm thử phần mềm

Kiểm tra tải và kiểm tra căng thẳng: Sự khác biệt, số liệu và ví dụ về k6

Giải thích về thử nghiệm tải và thử nghiệm căng thẳng: mỗi thử nghiệm chứng minh điều gì, thử nghiệm tăng đột biến và ngâm, số liệu quan trọng, lý d…

Đọc bài viết →
Kiểm thử phần mềm

Trường hợp thử nghiệm và kịch bản thử nghiệm: Sự khác biệt chính, ví dụ và thời điểm sử dụng từng trường hợp

Giải thích trường hợp kiểm thử và kịch bản kiểm thử: định nghĩa rõ ràng, bảng cạnh nhau, một tính năng đặt lại mật khẩu được lấy từ các tình huống n…

Đọc bài viết →
Cơ sở dữ liệu & SQL

Tối ưu hóa truy vấn SQL: Đọc kế hoạch thực thi và sửa các truy vấn chậm, có tính thời gian

Đã thử nghiệm tối ưu hóa truy vấn SQL trên một triệu hàng: đọc kế hoạch thực hiện, thêm chỉ mục phù hợp, sửa các bộ lọc không thể mở rộng, sử dụng c…

Đọc bài viết →
Cơ sở dữ liệu & SQL

SQL UNION và UNION ALL: Sự khác biệt, ví dụ và hiệu suất đã được kiểm tra

SQL UNION và UNION ALL được giải thích bằng các truy vấn chúng tôi đã chạy: trùng lặp, cả hai quy tắc đều tuân theo, lỗi dữ liệu thực, hiệu suất đượ…

Đọc bài viết →
Phát triển phần mềm

Hướng dẫn API tìm nạp JavaScript: GET, POST, Xử lý lỗi và hết thời gian chờ

Hướng dẫn API tìm nạp JavaScript đã được thử nghiệm trên máy chủ cục bộ: GET và POST, tại sao 404 không gửi, trình trợ giúp có thể sử dụng lại, chuỗ…

Đọc bài viết →
Phát triển phần mềm

Xử lý tệp Python: Đọc, ghi, CSV, JSON và pathlib kèm ví dụ

Việc xử lý tệp Python được giải thích bằng mã chúng tôi đã chạy: chế độ mở, với, đọc tệp lớn, CSV, JSON, pathlib, tệp nhị phân, ghi an toàn, xử lý l…

Đọc bài viết →
Phát triển phần mềm

Các lớp và đối tượng Python: Hướng dẫn OOP với các ví dụ thực tế

Các lớp và đối tượng Python được giải thích bằng mã mà chúng tôi đã chạy: __init__, các phương thức, thuộc tính lớp và phiên bản, tính kế thừa, thuộ…

Đọc bài viết →
Trí tuệ nhân tạo

Mô hình ngôn ngữ lớn là gì? LLM hoạt động như thế nào, được giải thích mà không cường điệu hóa

Mô hình ngôn ngữ lớn là gì? LLM được giải thích bằng ngôn ngữ đơn giản: mã thông báo, phần nhúng, sự chú ý, đào tạo, cửa sổ nhiệt độ và ngữ cảnh, mộ…

Đọc bài viết →
DevOps

Các lệnh Linux cho người mới bắt đầu: Hướng dẫn thiết bị đầu cuối cần thiết kèm ví dụ

Các lệnh Linux dành cho người mới bắt đầu, được nhóm theo tác vụ: điều hướng, tệp, xem nhật ký, grep, đường dẫn, quyền, quy trình và lưu trữ, cùng v…

Đọc bài viết →
Phát triển phần mềm

Git merge vs rebase: khác biệt, ví dụ và khi nào dùng cái nào

Git merge vs rebase được giải thích bằng đầu ra log thực tế, bảng so sánh, quy tắc vàng của rebase và quy trình làm việc nhóm an toàn.

Đọc bài viết →
Phát triển phần mềm

List comprehension trong Python: cú pháp, ví dụ và khi nào nên tránh

List comprehension trong Python: cú pháp, lọc dữ liệu, if-else, vòng lặp lồng nhau, thời gian đo thực tế và khi nào vòng lặp for thông thường tốt hơn.

Đọc bài viết →
Cơ sở dữ liệu & SQL

Giải thích SQL JOIN kèm ví dụ (Inner, Left, Right, Full)

Hiểu SQL JOIN từng bước với bảng và truy vấn mẫu: INNER, LEFT, RIGHT, FULL, CROSS và SELF, cùng lỗi thường gặp và mẹo hiệu năng.

Đọc bài viết →