Trong quá trình phát triển ứng dụng, việc chỉnh sửa, cập nhật dữ liệu là một phần không thể thiếu. Bài viết này sẽ hướng dẫn bạn cách sử dụng câu lệnh UPDATE trong SQL cùng với ví dụ cụ thể giúp bạn dễ dàng áp dụng vào dự án của mình.
Cú pháp của lệnh UPDATE trong SQL
Cập nhật một bản ghi
Để cập nhật dữ liệu trong một bảng, bạn sử dụng cú pháp sau:
1
2
3
UPDATE ten_bang
SET cot1 = gia_tri_moi1, cot2 = gia_tri_moi2, ...
WHERE dieu_kien;
Ví dụ: Cập nhật địa chỉ cho nhân viên có ID là 1:
1
2
3
UPDATE NhanVien
SET tuoi = 31, diachi = 'Nha Trang'
WHERE id = 1;
Trong ví dụ này, chúng ta cập nhật tuổi và địa chỉ của nhân viên có ID là 1 trong bảng NhanVien
.
Trước khi cập nhật:
id | ten | tuoi | diachi |
---|---|---|---|
1 | Nguyen Van A | 30 | Ha Noi |
Sau khi cập nhật:
id | ten | tuoi | diachi |
---|---|---|---|
1 | Nguyen Van A | 31 | Nha Trang |
Cập nhật nhiều bản ghi cùng lúc
Bạn cũng có thể cập nhật nhiều bản ghi cùng một lúc, có thể thêm sử dụng điều kiện phù hợp trong câu lệnh WHERE.
Ví dụ: Tăng tuổi của tất cả nhân viên lên 1:
Dữ liệu ban đầu:
id | ten | tuoi | diachi |
---|---|---|---|
1 | Nguyen Van A | 30 | Nha Trang |
2 | Le Thi B | 25 | Da Nang |
3 | Tran Van C | 28 | Hai Phong |
1
2
UPDATE NhanVien
SET tuoi = tuoi + 1;
Sau khi cập nhật:
id | ten | tuoi | diachi |
---|---|---|---|
1 | Nguyen Van A | 31 | Nha Trang |
2 | Le Thi B | 26 | Da Nang |
3 | Tran Van C | 29 | Hai Phong |
Lưu ý: Nếu bạn bỏ qua câu lệnh WHERE, tất cả bản ghi trong bảng sẽ được cập nhật!
Câu lệnh UPDATE nâng cao
Cập nhật dữ liệu dựa trên dữ liệu từ bảng khác
Bạn có thể cập nhật dữ liệu trong một bảng dựa trên dữ liệu từ bảng khác bằng cách sử dụng câu lệnh UPDATE
kết hợp với JOIN
.
Ví dụ: Cập nhật địa chỉ cho nhân viên dựa trên thông tin từ bảng DiaChiMoi
:
Bảng NhanVien
:
id | ten | tuoi | diachi |
---|---|---|---|
1 | Nguyen Van A | 31 | Nha Trang |
2 | Le Thi B | 26 | Da Nang |
3 | Tran Van C | 29 | Hai Phong |
Bảng DiaChiMoi
:
nhanvien_id | diachi_moi |
---|---|
1 | Lâm Đồng |
2 | Thái Bình |
1
2
3
UPDATE NhanVien
JOIN DiaChiMoi ON NhanVien.id = DiaChiMoi.nhanvien_id
SET NhanVien.diachi = DiaChiMoi.diachi_moi;
Trong ví dụ này, địa chỉ của nhân viên sẽ được cập nhật dựa trên bảng DiaChiMoi
nơi chứa nhanvien_id
và địa chỉ mới tương ứng của nhân viên.
Sau khi cập nhật:
id | ten | tuoi | diachi |
---|---|---|---|
1 | Nguyen Van A | 31 | Lâm Đồng |
2 | Le Thi B | 26 | Thái Bình |
3 | Tran Van C | 29 | Hai Phong |
Sử Dụng Điều Kiện Phức Tạp Trong Câu Lệnh WHERE
Ví dụ 1: Cập nhật trạng thái công việc cho nhân viên dựa vào số giờ làm việc và hiệu suất
Dữ liệu ban đầu:
id | ten | sogio_lam | hieusuat | trangthai |
---|---|---|---|---|
1 | Nguyen Van A | 158 | 49 | Hoạt động |
2 | Le Thi B | 162 | 85 | Hoạt động |
1
2
3
UPDATE NhanVien
SET trangthai = 'Xem xét lại'
WHERE sogio_lam < 160 OR hieusuat < 50;
Sau khi cập nhật:
id | ten | sogio_lam | hieusuat | trangthai |
---|---|---|---|---|
1 | Nguyen Van A | 158 | 49 | Xem xét lại |
2 | Le Thi B | 162 | 85 | Hoạt động |
Ở đây, chúng ta cập nhật trạng thái công việc của nhân viên thành Xem xét lại
nếu họ làm việc dưới 160 giờ mỗi tháng hoặc hiệu suất làm việc dưới 50%.
Ví dụ 2: Cập nhật lương cho nhân viên dựa trên tuổi và vị trí công việc
Dữ liệu ban đầu:
id | ten | tuoi | chucvu | luong |
---|---|---|---|---|
1 | Nguyen Van A | 42 | Quản lý | 1000 |
2 | Le Thi B | 32 | Nhân viên | 800 |
3 | Le Minh Thien Toan | 25 | Lao công | 200 |
1
2
3
4
5
6
7
UPDATE NhanVien
SET luong = CASE
WHEN tuoi >= 40 AND chucvu = 'Quản lý' THEN luong * 1.2
WHEN tuoi >= 30 AND chucvu = 'Nhân viên' THEN luong * 1.15
ELSE luong * 1.1
END
WHERE tuoi >= 30 AND (chucvu = 'Quản lý' OR chucvu = 'Nhân viên');
Sau khi cập nhật:
id | ten | tuoi | chucvu | luong |
---|---|---|---|---|
1 | Nguyen Van A | 42 | Quản lý | 1200 |
2 | Le Thi B | 32 | Nhân viên | 920 |
3 | Le Minh Thien Toan | 25 | Lao công | 200 |
Trong ví dụ trên, chúng ta sử dụng một điều kiện WHERE phức tạp kết hợp với một biểu thức CASE trong SET để cập nhật lương. Lương được tăng theo tỷ lệ phần trăm dựa trên tuổi và vị trí công việc của nhân viên. Cụ thể ở ví dụ trên, câu lệnh WHERE sẽ chỉ lấy những nhân viên có chức vụ là 'Quản lý' hoặc 'Nhân viên' vào diện được tăng lương.
Sử dụng điều kiện phức tạp trong câu lệnh WHERE của lệnh UPDATE không chỉ giúp bạn cập nhật dữ liệu một cách chính xác hơn mà còn phản ánh sự linh hoạt và thông minh trong quản lý cơ sở dữ liệu. Bằng cách kết hợp các điều kiện để lọc dữ liệu cần cập nhật, bạn có thể thực hiện những thay đổi cụ thể, đúng mục tiêu, và phù hợp với nhu cầu của mình.