SQL更新连接简介
SQL更新连接语句用于更新SQL中特定表的记录的列值,这涉及到两个或多个表之间的交叉连接所产生的值,这些表在更新查询语句中使用内连接或左连接子句进行连接,原表被更新的列值可以从其他表的列值中分配,这些表是在更新查询语句中被连接的表。
语法:
UPDATE table_to_update
JOIN
another_table1
ON table_to_update.column_name1 = another_table2.column_name2
[JOIN
another_table 2
ON table_to_update.column_name3 = another_table2.column_name4 ....] SET table_to_update.column_name5 = another_table.column_name6
[WHERE any_restrictions];
table_to_update是原表的名称,我们希望更新其列值。 another_table是表的名称,我们必须根据某些匹配的列值将原表连接起来,这些列值在JOIN的ON子句中指定。该连接可以是内连接或左连接。在查询语句中定义了与多个表的连接后,我们要分配给原始表的列的值应该在SET语句中指定。我们可以根据自己的需要设置表_to_update表的列值,并为它们分配可能由其他连接表的列值产生的值。
在SQL中更新连接的工作
- 当在SQL中写一个简单的更新语句时,我们可以更新一个表的记录,并将我们想要的值分配给该表的列,在其中我们可以通过在where子句中指定条件来更新所有或部分的列。
- 但是,在我们想把一个表的列值分配给另一个表的列值的情况下,我们可以使用更新连接语句。
- 请注意,在一个更新连接语句中,一次只能更新一个表的列。其优势在于对来自不同表的列值进行分配。
- 更新连接的工作方式是内连接,它考虑到两个表的共同匹配记录,或者是左连接,它在更新时考虑左侧表的所有记录和匹配记录。
- 我们可以通过在where子句中指定条件来更新更新连接查询中的全部或部分记录。
SQL更新连接的例子
让我们创建两个名为educba_writers和educba_learning的表用于演示。我们将使用下面的创建表查询来创建这些表。 educba_writers表将包含所有编写学习材料的作者的名字,这些学习材料是学习educba_learning表中提到的科目所需要的。
首先,我们将使用以下查询语句创建educba_writers表。
代码:
CREATE TABLE `educba_writers` (
`id` int(11) NOT NULL,
`firstName` varchar(10) COLLATE latin1_danish_ci NOT NULL,
`rate` decimal(5,2) DEFAULT NULL,
`joining_date_time` datetime DEFAULT NULL
);
输出:
现在,我们将使用以下查询语句创建educba_ learning表。
代码:
CREATE TABLE `educba_learning` (
`topic_id` int(11) NOT NULL,
`subject` varchar(100) DEFAULT NULL,
`sessions` int(5) DEFAULT '0',
`expert_name` varchar(100) DEFAULT NULL,
`charges` decimal(7,2) DEFAULT '0.00'
);
输出:
让我们在两个表中插入一些记录。为了演示,我们将在educba_writers表中插入以下记录。
代码:
INSERT INTO `educba_writers` (`id`, `firstName`, `rate`, `joining_date_time`) VALUES
(1, 'Payal', '750.00', '2020-05-28 16:02:34'),
(2, 'Vyankatesh', '700.00', NULL),
(3, 'Omprakash', '600.00', '2020-05-28 20:32:50'),
(4, 'Parineeta', '980.00', NULL);
输出:
现在,我们将在以下查询语句的帮助下,在educba_learning表中插入几条记录。
代码:
INSERT INTO `educba_learning` (`topic_id`, `subject`, `sessions`, `expert_name`, `charges`) VALUES
(1, 'SQL', 750, 'Payal', '75000.00'),
(2, 'MySQL', 700, 'Vyankatesh', '35000.00'),
(3, 'PostgreSQL', 600, 'Omprakash', '45000.00'),
(4, 'Hadoop', 980, 'Parineeta', '65000.00');
输出:
让我们从两个表中检索记录并研究它们的内容。我们将使用下面提到的简单的选择语句来做这件事。
代码:
SELECT * FROM educba_writers;
输出:
现在,我们将使用下面的语句来检索educba_learning表中的记录。
代码:
SELECT * FROM educba_learning;
输出:
现在,假设我们想用相当于educba_writers表的费率列的列值乘以例如5的值来更新educba_learning表的费率列。为此,我们首先需要根据educba_writers表的作者名字和educba_learning表的专家名字列来连接这两个表。然后,我们可以看到将educba_writers表中的rate列的值乘以5,并将其设置为educba_learning表中的charge列。我们将在这里使用内部连接和更新连接语句,使用下面的查询语句将educba_writers表的列值分配给educba_learning的列值。
代码:
UPDATE educba_learning
INNER JOIN educba_writers
ON educba_learning.expert_name = educba_writers.firstName
SET educba_learning.charges = (educba_writers.rate * 5);
输出:
让我们检索一下educba_learning表中的记录,观察一下使用下面的select语句更新查询引起的变化。
代码:
SELECT * FROM educba_learning;
输出:
我们可以从输出中观察到,SQL科目的收费是Payal作家的费率,即750*5,相当于3750,这是给SQL科目分配的。同样地,你可以交叉验证其他记录的收费列值。
总结
我们可以使用SQL中的更新连接语句来更新一个表的列的记录,并通过对它们进行连接,给它们分配可以是列值或从其他表的记录的列值中得到的表达式。在这篇文章中,我们看到了如何在SQL中使用更新连接,它的实现,与简单更新语句的比较,以及更新连接与左连接和内连接的使用,同时还有一些例子使实现概念变得清晰。