Kỹ thuật nâng cao để cập nhật nhiều cột trong SQL
Trong một số trường hợp, cập nhật nhiều cột trong SQL đòi hỏi các kỹ thuật nâng cao hơn, đặc biệt khi xử lý giá trị null, logic có điều kiện hoặc cập nhật dựa trên dữ liệu từ bảng khác.
Khi giá trị của một cột phụ thuộc vào cột khác
Ta có thể muốn cập nhật một cột dựa trên cột khác trong cùng bảng. Ở đây ta sẽ dùng logic cơ bản với biểu thức để cập nhật cột.
Ví dụ, truy vấn sau tính cột bonus theo phần trăm của cột salary cho một số nhân viên.
-- Update bonus as 10% of the salary
UPDATE employees
SET bonus = salary * 0.10
-- Only apply the update to Sales department
WHERE department = 'Sales';
Cập nhật nhiều cột bằng COALESCE để xử lý NULL
Hàm COALESCE có thể quản lý hiệu quả các giá trị null khi cập nhật nhiều cột. Điều này đảm bảo các giá trị null được thay thế bằng giá trị mặc định phù hợp, duy trì tính toàn vẹn dữ liệu.
Truy vấn dưới đây cập nhật các cột salary và department với giá trị đã cho. Nếu cột chứa NULL, nó được thay thế bằng giá trị mặc định.
UPDATE employees
-- If salary is NULL, set it to 50,000
SET salary = COALESCE(salary, 50000),
-- If department is NULL, set it to 'IT'
department = COALESCE(department, 'IT')
-- Apply update to specific employee IDs
WHERE employee_id IN (102, 103, 104);
Cập nhật nhiều cột và cập nhật có điều kiện với mệnh đề CASE
Mệnh đề CASE có thể được dùng để cập nhật có điều kiện các cột dựa trên tiêu chí cụ thể. Điều này cho phép kiểm soát chi tiết hơn đối với giá trị nào được cập nhật và trong hoàn cảnh nào, tăng tính linh hoạt cho các bản cập nhật SQL.
Ví dụ, bạn có thể muốn cập nhật bonus và position của nhân viên dựa trên performance_rating, như tôi minh họa dưới đây:
-- Update bonus and position department
UPDATE employees
SET bonus = CASE
WHEN performance_rating = 'A' THEN salary * 0.15
WHEN performance_rating = 'B' THEN salary * 0.10
ELSE salary * 0.05
END,
position = CASE
WHEN performance_rating = 'A' THEN 'Team Lead'
WHEN performance_rating = 'B' THEN 'Senior'
ELSE position
END
-- Apply update only to employees in the Sales department
WHERE department = 'Sales';
Cập nhật nhiều cột khi join các bảng
Bạn cũng có thể dùng JOIN trong câu lệnh UPDATE để cập nhật nhiều cột dựa trên dữ liệu từ bảng liên quan.
Giả sử bạn có hai bảng, employees và departments. Bạn muốn cập nhật bảng employees với tên phòng ban và địa điểm từ bảng departments.
-- Update department name and location from departments table
UPDATE employees e
JOIN departments d ON e.department_id = d.department_id
SET e.department_name = d.department_name,
e.location = d.location
WHERE e.department_id IN (1, 2, 3);
Tôi khuyến nghị bạn thử lộ trình kỹ năng SQL Fundamentals và khóa học Database Design để tìm hiểu thêm về thiết kế cơ sở dữ liệu và join bảng. Ngoài ra, hãy xem hướng dẫn SQL UPDATE with JOIN: Cách hoạt động để học về cập nhật chéo bảng.
Tối ưu hóa hiệu năng và quản lý giao dịch
Tối ưu hóa hiệu năng rất quan trọng khi xử lý cập nhật SQL cho nhiều cột, đặc biệt với tập dữ liệu lớn. Cân nhắc các thực tiễn tốt sau để đảm bảo tính nhất quán dữ liệu và tối ưu cơ sở dữ liệu.
- Hiệu quả và tính nguyên tử (Atomicity): Cập nhật nhiều cột trong một truy vấn giúp cải thiện hiệu năng bằng cách giảm số thao tác mà công cụ cơ sở dữ liệu phải xử lý. Điều này nâng cao hiệu quả và cả tính nguyên tử, nghĩa là tất cả cập nhật cùng thành công hoặc không cập nhật nào được áp dụng, giữ vững tính nhất quán dữ liệu.
- Dùng giao dịch để đảm bảo an toàn: Giao dịch cho phép bạn bảo vệ dữ liệu bằng cách hoàn tác (rollback) nếu có sự cố, tránh việc cập nhật một phần làm ảnh hưởng cơ sở dữ liệu. Giao dịch cũng giúp cập nhật theo lô đáng tin cậy hơn trong môi trường nhiều người dùng, giảm rủi ro xung đột dữ liệu.
Những cạm bẫy và sai lầm thường gặp
Có một số cạm bẫy và sai lầm phổ biến có thể dẫn đến lỗi khi xử lý cập nhật nhiều cột. Hãy xem một vài ví dụ và cách tránh.
-
Quên mệnh đề
WHERE: Quên thêm mệnh đềWHEREtrong câu lệnhUPDATEcó thể gây cập nhật ngoài ý muốn cho tất cả các hàng. Để tránh điều này, luôn đảm bảo mệnh đềWHEREđược xác định đúng để nhắm tới các cột bạn định cập nhật. -
Không khớp kiểu dữ liệu: Sự không khớp giữa các kiểu dữ liệu có thể gây lỗi hoặc lưu trữ dữ liệu không chính xác. Luôn xác thực rằng kiểu dữ liệu của các giá trị trong truy vấn
UPDATEkhớp với các cột được cập nhật.
Nếu bạn muốn tìm hiểu thêm về kiểu dữ liệu và lọc dữ liệu bằng WHERE, tôi khuyến nghị học khóa Intermediate SQL của DataCamp.
Kết luận
Hiểu cách cập nhật nhiều cột trong SQL rất quan trọng cho hiệu quả và độ chính xác của cơ sở dữ liệu. Tôi hy vọng sau khi đọc, bạn thấy rằng cập nhật nhiều cột cùng lúc là một kỹ năng cần thiết, và bạn không nên tìm đường tắt, nếu không có thể gây ra giao dịch một phần hoặc trạng thái không nhất quán.
Tùy theo định hướng nghề nghiệp, tôi khuyên bạn đăng ký lộ trình nghề nghiệp Associate Data Analyst in SQL của DataCamp để học các kỹ năng ở cấp độ ngành nhằm trở thành nhà phân tích dữ liệu, hoặc thử lộ trình Associate Date Engineer in SQL nếu bạn muốn trở thành kỹ sư dữ liệu. Dù theo hướng nào, tôi cũng sẽ cố gắng đạt Chứng chỉ SQL Associate, một cách thuyết phục để chứng minh với nhà tuyển dụng rằng bạn làm chủ SQL để giải quyết bài toán kinh doanh.

Câu hỏi thường gặp về SQL
Tôi có thể cập nhật nhiều cột trong SQL bằng một truy vấn không?
Có, bạn có thể cập nhật nhiều cột cùng lúc trong một câu lệnh UPDATE, giúp tăng hiệu quả và độ chính xác.
Tôi có thể cập nhật nhiều cột với các giá trị khác nhau cho các hàng khác nhau không?
Có, bạn có thể cập nhật nhiều hàng với các giá trị khác nhau bằng cách sử dụng điều kiện trong mệnh đề WHERE hoặc áp dụng logic trong mệnh đề CASE.
Điều gì xảy ra nếu tôi quên mệnh đề WHERE khi cập nhật nhiều cột?
Nếu bạn bỏ qua mệnh đề WHERE, cập nhật sẽ áp dụng cho tất cả các hàng trong bảng, có thể dẫn đến sửa đổi dữ liệu ngoài ý muốn.
Làm thế nào để xử lý giá trị NULL khi cập nhật nhiều cột?
Bạn có thể dùng hàm COALESCE để xử lý giá trị NULL bằng cách cung cấp giá trị mặc định khi cập nhật.
Tôi có thể cập nhật các cột bằng dữ liệu từ bảng khác không?
Bạn có thể thực hiện cập nhật bằng cách join các bảng, cho phép cập nhật cột dựa trên dữ liệu liên quan từ bảng khác.
Khi làm việc với cơ sở dữ liệu, hiệu quả là then chốt, và biết cách cập nhật nhiều cột cùng lúc trong SQL là một kỹ năng hữu ích. Với vai trò nhà phân tích dữ liệu, hiểu cách cập nhật nhiều cột trong SQL có thể cải thiện năng suất và ngăn ngừa lỗi. Bài viết này sẽ khám phá cách cập nhật nhiều cột bằng SQL, bao gồm cú pháp, kỹ thuật và ví dụ để minh họa các thực tiễn tốt nhất.
Bạn sẽ học cách cập nhật nhiều cột với câu lệnh
UPDATEvà cách xử lý join, điều kiện và các cân nhắc về hiệu năng để quản lý dữ liệu hiệu quả. Khi bắt đầu, tôi khuyến nghị học các khóa Giới thiệu về SQL và Học SQL của DataCamp để nắm vững những kiến thức cơ bản khi truy vấn cơ sở dữ liệu.Tìm hiểu những điều cơ bản về cập nhật nhiều cột trong SQL
Câu lệnh
UPDATEtrong SQL được dùng để sửa đổi dữ liệu trong cơ sở dữ liệu. Chức năng chính của nó là thay đổi các bản ghi hiện có bằng cách cập nhật giá trị ở một hoặc nhiều cột của bảng.UPDATEhiệu quả vì cho phép cập nhật nhiều cột chỉ với một câu lệnh. Sau đây là cú pháp của câu lệnhUPDATE.table_name: Bảng mà bạn muốn cập nhật dữ liệu.column1,column2,column3: Các cột được cập nhật.value1,value2,value3: Giá trị mới cho từng cột tương ứng.condition: Tiêu chí xác định những hàng nào được cập nhật.Sử dụng câu lệnh
UPDATEđể cập nhật nhiều cột là hiệu quả vì công cụ cơ sở dữ liệu xử lý thao tác nhanh hơn, tiêu tốn ít tài nguyên hơn. Phương pháp này cũng đơn giản vì mã dễ hiểu và dễ bảo trì.Ví dụ về cập nhật nhiều cột trong SQL
Bạn có thể cập nhật nhiều cột trong SQL cho một bản ghi đơn lẻ hoặc nhiều hàng trong bảng. Hãy cùng xem cả hai trường hợp:
Cập nhật một hàng
Ta dùng cập nhật một hàng khi cần sửa nhiều cột cho một bản ghi cụ thể. Cách này trực quan khi thay đổi các giá trị của một mục trong bảng.
Truy vấn sau cập nhật các cột
salaryvàdepartmenttrong bảngemployeescho một hàng cóemployee_id = 101.Cập nhật nhiều hàng
Cập nhật theo lô cần thiết khi bạn phải cập nhật nhiều cột trên nhiều bản ghi. Cập nhật nhiều hàng xảy ra khi cập nhật các bản ghi dựa trên điều kiện ảnh hưởng tới hơn một hàng.
Giả sử bạn muốn cập nhật
salaryvàpositioncho nhiều nhân viên được thăng chức trong bộ phậnSales. Bạn có thể dùng truy vấn sau: