Menu

SQL: Một trường hợp của lệnh UPDATE trong SQL

Lệnh UPDATE là một lệnh rất hay gặp trong việc thao tác với cơ sở dữ liệu. Cú pháp của lệnh như sau:
UPDATE SET Column_1 = Value_1, ..., Column_n = Value_n [WHERE ....];

Rõ ràng, cú pháp của lệnh UPDATE là vô cùng đơn giản, chỉ cần biết bạn muốn cập nhận bảng nào thì điền tên bảng vào phần và muốn cập nhật các cột nào và bao nhiêu cột thì điền vào phần tiếp theo. Cuối cùng là các điều kiện đảm bảo chúng ta chỉ cập nhật các bản ghi mà mình mong muốn (người ta khuyên không nên bỏ qua phần điều kiện này nếu không tất cả mọi bản ghi trong bảng đều được cập nhật, lúc đó bạn chỉ ngồi khóc mà thôi :(( ).
Ví dụ, mình có một bảng Student với các thông tin như sau:
Student(Code, Name, Gender, Birthday, Address, Mark)
Nếu mình muốn cập nhật tất cả những người có Gender = 1 thì đặt Mark = 10 mình sẽ viết lệnh như sau:
UPDATE Student SET Mark = 10 WHERE Gender=1;
Câu lệnh cập nhật thực sự đơn giản đúng không?
Bây giờ, chúng ta sẽ đi xem xét một bài toán khác, thay vì cập nhật những trị hằng số như ví dụ trên thì chúng ta sẽ đi cập nhật dữ liệu của bảng này từ bảng khác. Nói một cách dễ hiểu là giả sử chúng ta có hai bảng là Table_1Table_2, chúng ta sẽ lấy giá trị ở một vài cột trong Table_2 để cập nhật cho Table_1.
Để dễ hình dùng chúng ta sẽ đi vào một ví dụ cụ thể:
Chúng ta có hai bảng là bảng Student và Person với các trường như sau:
Student(Code, Name, Gender, Birthday, Address, Mark)
Person(Code, Name, Gender, Address)
Trong đó, trường Code là khóa chính của mỗi bảng, các trường còn lại mang nội dung. Giả sử, bây giờ nếu ta muốn copy một số trường dữ liệu từ bảng Person sang bảng Student thỏa mãn điều kiện là phải có giá trị khóa chính (Code), ta sẽ làm như sau: 
SQL Server:
UPDATE Student SET
Name = Person.Name,
Gender = Person.Gender,
Address = Person.Address
FROM Student, Person
WHERE Student.Code = Person.Code;

----------------------------------
PostgreSQL
UPDATE Student AS TT SET
Name = Person.Name,
Gender = Person.Gender,
Address = Person.Address
FROM Student, Person
WHERE Student.Code = Person.Code;
Thực tế đối với mỗi cơ sở sở dữ liệu sẽ có một chút ít điều chỉnh. Trong post này mình sử dụng hai cơ sở dữ liệu là SQL Server và PostgresSQL, nguyên tắc cơ bản là sau lệnh FROM ta sẽ liệt kê tên của hai bảng tham gia và trong điều kiện WHERE ta sẽ đặt các điều kiện ràng buộc giữa hai bảng và/hoặc đối với từng bảng.
Thực sự thì đây là một ví dụ rất đơn giản và thường chỉ hay xảy ra trong quá trình phát triền phần mềm (ví cấu trúc của các bảng là thay đổi liên tục) hoặc quá trình nâng cấp phần mềm. Tùy vào trường hợp của bạn mà có cách ứng sử cận thận nhất là trong quá trình cập nhật phiên bản (nếu không cẩn thận dữ liệu của khách hàng có thể bị ghi đè thì sẽ vô cùng nguy hiểm).

Không có nhận xét nào:

Đăng nhận xét