Tóm Tắt
UPDATE trong SQL Server
- Trung Nguyen
-
17/05/2020
-
7 min read
Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng câu lệnh UPDATE
trong SQL Server để thay đổi dữ liệu hiện có trong một bảng.
Để sửa đổi dữ liệu hiện có trong một bảng, bạn sử dụng cú pháp câu lệnh UPDATE
như sau:
Bạn đang đọc: UPDATE trong SQL Server | Comdy
UPDATE table_name
SET c1 = v1, c2 = v2, ... cn = vn
[WHERE condition]
Trong cú pháp này :
- Đầu tiên, chỉ định tên của bảng mà dữ liệu sẽ được cập nhật.
- Thứ hai, chỉ định danh sách cột c1, c2, … cn và các giá trị v1, v2, … vn sẽ được cập nhật.
- Thứ ba, chỉ định các điều kiện trong mệnh đề
WHERE
để chọn các bản ghi được cập nhật. Mệnh đềWHERE
này là tùy chọn. Nếu bạn bỏ qua mệnh đềWHERE
, tất cả các bản ghi trong bảng sẽ được cập nhật.
Đầu tiên, chúng tôi sẽ tạo một bảng mới có tên taxes
để minh họa câu lệnh UPDATE trong SQL Server.
CREATE TABLE sales.taxes (
tax_id INT PRIMARY KEY IDENTITY (1, 1),
state VARCHAR (50) NOT NULL UNIQUE,
state_tax_rate DEC (3, 2),
avg_local_tax_rate DEC (3, 2),
combined_rate AS state_tax_rate + avg_local_tax_rate,
max_local_tax_rate DEC (3, 2),
updated_at datetime
);
Thứ hai, thực hiện các câu lệnh sau để INSERT dữ liệu vào bảng taxes
:
INSERT INTO sales.taxes
(
state,
state_tax_rate,
avg_local_tax_rate,
max_local_tax_rate
)
VALUES('Alabama',0.04,0.05,0.07),
VALUES('Alaska',0,0.01,0.07),
VALUES('Arizona',0.05,0.02,0.05),
VALUES('Arkansas',0.06,0.02,0.05),
VALUES('California',0.07,0.01,0.02),
VALUES('Colorado',0.02,0.04,0.08),
VALUES('Connecticut',0.06,0,0),
VALUES('Delaware',0,0,0),
VALUES('Florida',0.06,0,0.02),
VALUES('Georgia',0.04,0.03,0.04),
VALUES('Hawaii',0.04,0,0),
VALUES('Idaho',0.06,0,0.03),
VALUES('Illinois',0.06,0.02,0.04),
VALUES('Indiana',0.07,0,0),
VALUES('Iowa',0.06,0,0.01),
VALUES('Kansas',0.06,0.02,0.04),
VALUES('Kentucky',0.06,0,0),
VALUES('Louisiana',0.05,0.04,0.07),
VALUES('Maine',0.05,0,0),
VALUES('Maryland',0.06,0,0),
VALUES('Massachusetts',0.06,0,0),
VALUES('Michigan',0.06,0,0),
VALUES('Minnesota',0.06,0,0.01),
VALUES('Mississippi',0.07,0,0.01),
VALUES('Missouri',0.04,0.03,0.05),
VALUES('Montana',0,0,0),
VALUES('Nebraska',0.05,0.01,0.02),
VALUES('Nevada',0.06,0.01,0.01),
VALUES('New Hampshire',0,0,0),
VALUES('New Jersey',0.06,0,0),
VALUES('New Mexico',0.05,0.02,0.03),
VALUES('New York',0.04,0.04,0.04),
VALUES('North Carolina',0.04,0.02,0.02),
VALUES('North Dakota',0.05,0.01,0.03),
VALUES('Ohio',0.05,0.01,0.02),
VALUES('Oklahoma',0.04,0.04,0.06),
VALUES('Oregon',0,0,0),
VALUES('Pennsylvania',0.06,0,0.02),
VALUES('Rhode Island',0.07,0,0),
VALUES('South Carolina',0.06,0.01,0.02),
VALUES('South Dakota',0.04,0.01,0.04),
VALUES('Tennessee',0.07,0.02,0.02),
VALUES('Texas',0.06,0.01,0.02),
VALUES('Utah',0.05,0,0.02),
VALUES('Vermont',0.06,0,0.01),
VALUES('Virginia',0.05,0,0),
VALUES('Washington',0.06,0.02,0.03),
VALUES('West Virginia',0.06,0,0.01),
VALUES('Wisconsin',0.05,0,0.01),
VALUES('Wyoming',0.04,0.01,0.02),
VALUES('D.C.',0.05,0,0);
Cập nhật một cột trong tất cả các bản ghi
Câu lệnh sau đây cập nhật một cột duy nhất cho tất cả các bản ghi trong bảng taxes
:
UPDATE sales.taxes
SET updated_at = GETDATE();
Trong ví dụ này, câu lệnh đã thay đổi các giá trị trong cột updated_at
thành thời gian ngày hệ thống được trả về bởi hàm GETDATE()
.
SQL Server đã đưa ra thông tin sau :
(51 rows affected)
Nó có nghĩa là 51 bản ghi đã được update thành công xuất sắc .Hãy xác định update trên như sau :
SELECT
*
FROM
sales.taxes;
Đây là đầu ra một phần :
Như bạn có thể thấy kết quả đầu ra, cột updated_at
đã được cập nhật với giá trị ngày hiện tại.
Cập nhật nhiều cột
Câu lệnh sau đây làm tăng mức thuế suất địa phương tối đa thêm 2 % và mức thuế suất địa phương trung bình thêm 1 % so với những tiểu bang có mức thuế suất địa phương tối đa 1 % .
UPDATE sales.taxes
SET max_local_tax_rate += 0.02,
avg_local_tax_rate += 0.01
WHERE
max_local_tax_rate = 0.01;
Đây là thông tin được trả về bởi SQL Server :
(7 rows affected)
Nó có nghĩa là thuế của 7 tiểu bang đã được update .
Trong phần này, bạn sẽ tìm hiểu cách sử dụng câu lệnh UPDATE JOIN
trong SQL Server để thực hiện cập nhật một bảng dựa trên các giá trị từ một bảng khác bằng mệnh đề JOIN.
Để truy vấn dữ liệu từ các bảng có liên quan, bạn thường sử dụng các mệnh đề JOIN
, INNER JOIN
hoặc LEFT JOIN
. Trong SQL Server, bạn có thể sử dụng các mệnh đề JOIN
trong câu lệnh UPDATE
để thực hiện cập nhật một bảng dựa trên các giá trị từ một bảng khác.
Sau đây minh họa cú pháp của mệnh đề UPDATE JOIN
:
UPDATE
t1
SET
t1.c1 = t2.c2,
t1.c2 = expression,
...
FROM
t1
[INNER | LEFT] JOIN t2 ON join_predicate
WHERE
where_predicate;
Trong cú pháp này:
Xem thêm: Từ đồng nghĩa cho “Far Away” và ví dụ
- Đầu tiên, chỉ định tên của bảng (t1) mà bạn muốn cập nhật trong mệnh đề
UPDATE
. - Thứ hai, chỉ định giá trị mới cho mỗi cột của bảng được cập nhật.
- Thứ ba, một lần nữa chỉ định bảng mà bạn muốn cập nhật trong mệnh đề
FROM
. - Thứ tư, sử dụng mệnh đề
INNER JOIN
hoặcLEFT JOIN
để join vào một bảng khác (t2) bằng cách sử dụng một biểu thức join được chỉ định sau từ khóaON
. - Cuối cùng, thêm một mệnh đề
WHERE
tùy chọn để chỉ định các bản ghi sẽ được cập nhật.
Chúng ta hãy xem một số ví dụ về việc sử dụng câu lệnh UPDATE JOIN
.
Tạo bảng dữ liệu mẫu
Đầu tiên, tạo một bảng mới có tên là sales.targets
để lưu trữ các mục tiêu bán hàng:
DROP TABLE IF EXISTS sales.targets;
CREATE TABLE sales.targets
(
target_id INT PRIMARY KEY,
percentage DECIMAL(4, 2)
NOT NULL DEFAULT 0
);
INSERT INTO
sales.targets(target_id, percentage)
VALUES
(1,0.2),
(2,0.3),
(3,0.5),
(4,0.6),
(5,0.8);
Nếu nhân viên cấp dưới bán hàng đạt được tiềm năng 1, họ sẽ nhận được tỷ suất hoa hồng bán hàng 0,2 hoặc 20 %, v.v.
Thứ hai, tạo một bảng khác có tên là sales.commissions
để lưu trữ hoa hồng bán hàng:
CREATE TABLE sales.commissions
(
staff_id INT PRIMARY KEY,
target_id INT,
base_amount DECIMAL(10, 2)
NOT NULL DEFAULT 0,
commission DECIMAL(10, 2)
NOT NULL DEFAULT 0,
FOREIGN KEY(target_id)
REFERENCES sales.targets(target_id),
FOREIGN KEY(staff_id)
REFERENCES sales.staffs(staff_id),
);
INSERT INTO
sales.commissions(staff_id, base_amount, target_id)
VALUES
(1,100000,2),
(2,120000,1),
(3,80000,3),
(4,900000,4),
(5,950000,5);
Bảng sales.commissions
lưu trữ thông tin định danh nhân viên bán hàng, target_id
, base_amount
và commission
. Bảng này liên kết với bảng sales.targets
thông qua cột target_id
.
Mục tiêu của chúng tôi là thống kê giám sát hoa hồng của toàn bộ nhân viên cấp dưới bán hàng dựa trên tiềm năng bán hàng của họ .
Ví dụ về UPDATE INNER JOIN trong SQL Server
Câu lệnh sau đây sử dụng UPDATE INNER JOIN
để tính hoa hồng bán hàng cho tất cả nhân viên bán hàng:
UPDATE
sales.commissions
SET
sales.commissions.commission =
c.base_amount * t.percentage
FROM
sales.commissions c
INNER JOIN sales.targets t
ON c.target_id = t.target_id;
Đây là đầu ra :
(5 rows affected)
Nếu bạn truy vấn lại bảng sales.commissions
, bạn sẽ thấy các giá trị trong cột hoa hồng được cập nhật:
SELECT
*
FROM
sales.commissions;
Giả sử chúng tôi có thêm hai nhân viên cấp dưới bán hàng mới tham gia và họ chưa có tiềm năng nào :
INSERT INTO
sales.commissions(staff_id, base_amount, target_id)
VALUES
(6,100000,NULL),
(7,120000,NULL);
Chúng tôi giả định rằng hoa hồng cho nhân viên bán hàng mới là 0,1 hoặc 10%, chúng tôi có thể cập nhật hoa hồng của tất cả nhân viên bán hàng bằng cách sử dụng UPDATE LEFT JOIN
như sau:
UPDATE
sales.commissions
SET
sales.commissions.commission =
c.base_amount * COALESCE(t.percentage,0.1)
FROM
sales.commissions c
LEFT JOIN sales.targets t
ON c.target_id = t.target_id;
Trong ví dụ này, chúng tôi đã sử dụng COALESCE()
để trả về 0,1 nếu tỷ lệ phần trăm là NULL.
Lưu ý: nếu bạn sử dụng mệnh đề
UPDATE INNER JOIN
, chỉ năm hàng của bảng có mục tiêu không phải là NULL sẽ được cập nhật.
Hãy xem dữ liệu trong bảng sales.commissions
:
SELECT
*
FROM
sales.commissions;
Tập kết quả như sau:
Trong hướng dẫn này, bạn đã học cách sử dụng câu lệnh UPDATE
trong SQL Server để sửa đổi dữ liệu hiện có trong một bảng.
Nếu Comdy hữu ích và giúp bạn tiết kiệm thời gian làm việc
Bạn hoàn toàn có thể vui vẻ đưa Comdy vào whitelist của trình chặn quảng cáo ❤ ️ để tương hỗ chúng tôi trong việc trả tiền cho dịch vụ tàng trữ web để duy trì hoạt động giải trí của website .
Source: https://final-blade.com
Category: Kiến thức Internet