The SQL Server UPDATE JOIN Statement – A Comprehensive Guide
When it comes to updating data in a SQL Server database, the UPDATE statement is the primary tool for modifying existing data. But what happens when the data that needs to be updated is spread across multiple tables?
In such cases, the SQL Server UPDATE JOIN statement comes into play.
In this article, we will explore how to use the UPDATE JOIN statement to perform cross-table updates in SQL Server with the help of practical examples.
SQL Server UPDATE JOIN Syntax
Firstly, let’s take a look at the UPDATE JOIN statement syntax:
UPDATE table1
JOIN table2
ON table1.column = table2.column
SET table1.column = 'value', table2.column = 'value';
In the above syntax, we can see that we are performing an UPDATE statement on table1
and joining it with table2
using the JOIN
clause. We can specify the join type as INNER
, LEFT
, RIGHT
, or FULL OUTER
join, as per our requirements.
The ON
clause specifies the join condition between the two tables. Here, we are joining table1
and table2
based on a common column named column
.
Finally, the SET
clause specifies the columns that need to be updated for both tables.
SQL Server UPDATE JOIN Examples
To demonstrate how the UPDATE JOIN statement is used in practice, let’s consider two sample tables: sales.targets
and sales.commissions
.
Creating the sales.targets
Table
CREATE TABLE sales.targets (
id INT NOT NULL PRIMARY KEY,
month VARCHAR(10) NOT NULL,
year INT NOT NULL,
target_amt DECIMAL(10,2) NOT NULL
);
INSERT INTO sales.targets VALUES
(1, 'Jan', 2021, 100000.00),
(2, 'Feb', 2021, 90000.00),
(3, 'Mar', 2021, 110000.00),
(4, 'Apr', 2021, 95000.00),
(5, 'May', 2021, 105000.00),
(6, 'Jun', 2021, 85000.00);
Creating the sales.commissions
Table
CREATE TABLE sales.commissions (
id INT NOT NULL PRIMARY KEY,
sale_amt DECIMAL(10,2) NOT NULL,
commission DECIMAL(10,2),
month VARCHAR(10) NOT NULL,
year INT NOT NULL
);
INSERT INTO sales.commissions VALUES
(1, 120000.00, NULL, 'Jan', 2021),
(2, 80000.00, NULL, 'Feb', 2021),
(3, 130000.00, NULL, 'Mar', 2021),
(4, 100000.00, NULL, 'Apr', 2021),
(5, 90000.00, NULL, 'May', 2021),
(6, 75000.00, NULL, 'Jun', 2021);
Now that we have our sample tables set up, let’s look at some practical examples of how to use the UPDATE JOIN statement.
Example 1: Updating Commissions based on Sales Targets
Suppose we have a requirement to update the commission
column of the sales.commissions
table based on the given sales targets. We can achieve this using an INNER JOIN between sales.commissions
and sales.targets
.
UPDATE sales.commissions
INNER JOIN sales.targets
ON sales.commissions.month = sales.targets.month
AND sales.commissions.year = sales.targets.year
SET sales.commissions.commission =
CASE
WHEN sales.commissions.sale_amt >= sales.targets.target_amt * 1.25
THEN sales.commissions.sale_amt * 0.15
WHEN sales.commissions.sale_amt >= sales.targets.target_amt * 1.1
THEN sales.commissions.sale_amt * 0.1
ELSE sales.commissions.sale_amt * 0.05
END;
In the above example, we are updating the sales.commissions
table based on the sales target data from the sales.targets
table. We can see that we are using an INNER JOIN between the two tables based on the month and year columns.
The SET
clause specifies that we need to update the commission
column of the sales.commissions
table based on a specific calculation. Here, we are using a CASE
statement to determine the commission rate based on the achieved sales target.
Example 2: Updating Sales Targets for a Specific Month
Let’s consider another example, where we need to update the sales target data for a specific month. We can achieve this using a LEFT JOIN between sales.targets
and a temporary table with the desired values.
UPDATE sales.targets
LEFT JOIN (
SELECT 'Jun' AS month, 2021 AS year, 90000.00 AS target
) AS temp
ON sales.targets.month = temp.month
AND sales.targets.year = temp.year
SET sales.targets.target_amt = temp.target
WHERE sales.targets.month = 'Jun' AND sales.targets.year = 2021;
In the above example, we are updating the sales.targets
table for the month of June, 2021. We can see that we are using a LEFT JOIN between sales.targets
and a temporary table with the desired target value.
The SET
clause specifies that we need to update the sales target data for the given month and year. The WHERE
clause is used as an additional filter to ensure that we only update the specific month and year records.
Conclusion
The SQL Server UPDATE JOIN statement is a powerful tool for performing cross-table updates. With the examples provided in this article, we hope that you now have a deeper understanding of how to use the UPDATE JOIN statement in practical scenarios.
By using the right JOIN type and specifying the correct conditions, we can update data across multiple tables with ease.
3) SQL Server UPDATE INNER JOIN Example
The SQL Server INNER JOIN combines rows from two or more tables based on a related column between them. When it comes to updating data using the INNER JOIN, we can update multiple columns in one or more tables simultaneously.
One practical example of using the UPDATE INNER JOIN statement is to calculate commissions for sales staff.
Lets say we have two tables: sales
and commissions
, where the sales
table contains the sales data, and commissions
table contains the sales commission data for sales staff.
We want to join these tables and calculate commissions using a formula.
Creating the sales
Table
CREATE TABLE sales (
id INT NOT NULL PRIMARY KEY,
salesperson VARCHAR(100) NOT NULL,
sale_amt DECIMAL(10,2) NOT NULL,
sale_date DATE NOT NULL
);
INSERT INTO sales VALUES
(1, 'John Doe', 1500.00, '2021-09-14'),
(2, 'Jane Doe', 3500.00, '2021-09-15'),
(3, 'Bob Smith', 2000.00, '2021-09-15'),
(4, 'Mary Johnson', 1000.00, '2021-09-16');
Creating the commissions
Table
CREATE TABLE commissions (
id INT NOT NULL PRIMARY KEY,
salesperson VARCHAR(100) NOT NULL,
commission DECIMAL(10,2)
);
Now, let’s assume that the sales commission is calculated based on a fixed percentage of the sale amount. In our case, the commission rate is 10%.
So, we need to calculate the commission amount for each sale and update the commissions
table accordingly.
We can achieve this using an UPDATE INNER JOIN statement.
UPDATE commissions
INNER JOIN sales ON commissions.salesperson = sales.salesperson
SET commissions.commission = sales.sale_amt * 0.1;
In the above example, we have used an INNER JOIN to join the commissions
table with the sales
table. We have matched the salesperson
column of both tables to link the sales data to the appropriate salesperson in the commissions
table.
The SET
clause specifies that we need to update the commission
column of the commissions
table using a calculation. As we need to calculate sales commission as 10% of the sale_amt
column from the sales
table, we have multiplied the sale_amt
column by 0.1 (which represents the 10% rate) to calculate the commission amount.
4) SQL Server UPDATE LEFT JOIN Example
The SQL Server LEFT JOIN returns all the rows from the left table and matching rows from the right table. When used along with the UPDATE statement, we can update data in the left table and insert nulls in columns where corresponding data is not found in the right table.
One practical example of using the UPDATE LEFT JOIN statement is to update new sales staff commissions.
Lets say we have two tables: staff
and commissions
, where the staff
table contains the sales staff data, and commissions
table contains the sales commission data for all sales staff.
We want to update the commissions
table with the commissions for new sales staff.
Creating the staff
Table:
CREATE TABLE staff (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
INSERT INTO staff VALUES
(1, 'John Doe'),
(2, 'Jane Doe'),
(3, 'Bob Smith'),
(4, 'Mary Johnson'),
(5, 'Emily Brown'),
(6, 'Tom Allen');
Creating the commissions
Table:
CREATE TABLE commissions (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
commission DECIMAL(10,2)
);
INSERT INTO commissions VALUES
(1, 'John Doe', 2350.00),
(2, 'Jane Doe', 4750.00),
(3, 'Bob Smith', 2760.00),
(4, 'Mary Johnson', 1230.00);
Now let’s say we need to update the commissions
table to add commission data for our two new sales staff members, Emily Brown and Tom Allen.
We can achieve this using an UPDATE LEFT JOIN statement.
UPDATE commissions
LEFT JOIN (SELECT id, name FROM staff) AS s ON commissions.name = s.name
SET commissions.commission = COALESCE(commissions.commission, 0);
In the above example, we have used a LEFT JOIN to join the commissions
table with a temporary table created from the staff
table. We have used the COALESCE
function to avoid updating a null value in the commission
column.
The SET
clause specifies that we need to update the commission
column of the commissions
table by setting the default value of 0 if the value is null.
As we are doing a LEFT JOIN, it means that if the name
in the commissions
table does not match any name
in the staff
table, then that particular row from the commissions
table will be updated with the default value of 0 in the commission
column.
Conclusion
The SQL Server UPDATE statement is a powerful tool that can update data across multiple tables as per our requirements. By using the appropriate JOIN type, we can join the tables based on matching columns and update the columns that need modification.
We have provided practical examples of using the UPDATE INNER JOIN statement to calculate sales commissions and the UPDATE LEFT JOIN statement to update new sales staff commissions. With these examples, you can now update data efficiently in your SQL Server databases.
In conclusion, the SQL Server UPDATE JOIN statement is an essential tool for updating data in multiple tables simultaneously. By using the appropriate JOIN type, we can join the tables based on matching columns and update the columns that need modification.
The examples provided in this article demonstrate how to use this statement, including the UPDATE INNER JOIN to calculate sales commissions and the UPDATE LEFT JOIN to update new sales staff commissions. These practical examples highlight the significance of this topic for database management and provide useful takeaways for database developers and administrators.
With these tools and concepts in mind, developers and administrators can effectively update data in their SQL Server databases, saving time and resources.