首页 > 数据库 >SQL update select结合语句详解及应用

SQL update select结合语句详解及应用

时间:2023-09-19 10:26:32浏览次数:61  
标签:SET name UPDATE update SQL WHERE ID select

SQL update select结合语句详解及应用

 

QL update select语句

最常用的update语法是:

1
2
UPDATE TABLE_NAME
SET column_name1 = VALUE WHRER column_name2 = VALUE

如果我的更新值Value是从一条select语句拿出来,而且有很多列的话,用这种语法就很麻烦

第一,要select出来放在临时变量上,有很多个很难保存。 第二,再将变量进行赋值。

列多起来非常麻烦,能不能像Insert那样,把整个Select语句的结果进行插入呢? 就好象下面::

1
2
3
INSERT INTO table1
(c1, c2, c3)
(SELECT v1, v2, v3 FROM table2)

答案是可以的,具体的语法如下:

1
2
3
4
5
6
UPDATE table1 alias
SET (column_name,column_name ) = (
SELECT (column_name, column_name)
FROM table2
WHERE column_name = alias.column_name)
WHERE column_name = VALUE

下面是这样一个例子: 两个表a、b,想使b中的memo字段值等于a表中对应id的name值 表a:

1
2
3
4
id    name 
1     王 
2     李 
3     张

表b:

1
2
3
4
id    ClientName   
1 
2 
3

(MS SQL Server)语句:

1
UPDATE b   SET   ClientName    = a.name    FROM a,b    WHERE a.id = b.id

(Oralce)语句:

1
UPDATE b   SET   (ClientName)    =   (SELECT name FROM a WHERE b.id = a.id)

update set from 语句格式 当where和set都需要关联一个表进行查询时,整个update执行时,就需要对被关联的表进行两次扫描,显然效率比较低。

对于这种情况,Sybase和SQL SERVER的解决办法是使用UPDATE…SET…FROM…WHERE…的语法,实际上就是从源表获取更新数据。

在 SQL 中,表连接(left join、right join、inner join 等)常常用于 select 语句。 其实在 SQL 语法中,这些连接也是可以用于 update 和 delete 语句的,在这些语句中使用 join 还常常得到事半功倍的效果。

1
2
UPDATE T_OrderForm SET T_OrderForm.SellerID =B.L_TUserID
FROM T_OrderForm A LEFT JOIN T_ProductInfo   B ON B.L_ID=A.ProductID

用来同步两个表的数据!

Oralce和DB2都支持的语法:

1
UPDATE A SET (A1, A2, A3) = (SELECT B1, B2, B3 FROM B WHERE A.ID = B.ID)

MS SQL Server不支持这样的语法,相对应的写法为:

1
UPDATE A  SET A1 = B1, A2 = B2, A3 = B3  FROM A LEFT JOIN B ON A.ID = B.ID

个人感觉MS SQL Server的Update语法功能更为强大。MS SQL SERVER的写法:

1
UPDATE A SET A1 = B1, A2 = B2, A3 = B3 FROM A, B WHERE A.ID = B.ID

在Oracle和DB2中的写法就比较麻烦了,如下:

1
2
UPDATE A SET (A1, A2, A3) = (SELECT B1, B2, B3 FROM B WHERE A.ID = B.ID)
WHERE ID IN (SELECT B.ID FROM B WHERE A.ID = B.ID)
原创文章如转载请注明,转载自:www.aimks.com     --------------------------------------------------------------------------------------------------------------------------  

第一种:
语法:

UPDATE table1 SET column1 = (SELECT column FROM table2 [WHERE condition])
WHERE table1.column2 = value;
注:若不加where条件则是更新表中的所有数据,
故执行没有where子句的update要慎重再慎重。

第二种:
语法:

UPDATE table1 INNER/LEFT/RIGHT JOIN
table2
/
(
SELECT COLUMNS FROM table3
[INNER/LEFT/RIGHT JOIN ON CONDITION]
[WHERE conditions]
) AS t3
ON CONDITION
SET column1 = value1,column2 = value2,...
[WHERE conditions];
实例1:

UPDATE
$ table1 a
INNER JOIN $ table2 b
ON a.user_id = b.user_id
SET a.balance = a.balance + b.income,
b.status = 1
WHERE b.id = 1
AND b.status = 0;
实例2:

UPDATE
A
INNER JOIN
(SELECT
B.B1 AS B1,
B.B2 AS B2,
C.C1 AS C1
FROM
B
LEFT JOIN C
ON B.B3 = C.C3) AS t
ON A.A3 = t.B1 SET A.A1 = t.B2,
A.A2 = t.C1;
————————————————
版权声明:本文为CSDN博主「相思比梦长」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/netuser1937/article/details/121146827

标签:SET,name,UPDATE,update,SQL,WHERE,ID,select
From: https://www.cnblogs.com/Jamesblog/p/17713898.html

相关文章

  • MySQL篇:第八章_详解TCL语言
    事务一、含义事务:一条或多条sql语句组成一个执行单位,一组sql语句要么都执行要么都不执行二、特点(ACID)A原子性:一个事务是不可再分割的整体,要么都执行要么都不执行C一致性:一个事务可以使数据从一个一致状态切换到另外一个一致的状态I隔离性:一个事务不受其他事务的干扰,多个......
  • MySQLSQL查询的优化技巧及详细SQL语句和解释
    在实际的数据库应用中,复杂的SQL查询可能会导致性能下降,从而影响应用的响应时间和用户体验。为了提升查询性能,我们可以采用一些优化技巧。本文将介绍一些针对复杂SQL查询的优化技巧,并提供详细的SQL语句和解释,帮助您优化MySQL数据库中的复杂查询。使用索引:索引是提高查询性能的关键......
  • 关于使用LoadResource、EndUpdateResource的问题
    需要操作资源DLL中的资源,自作聪明的将其写成一个如下的类://---------------------------------------------------------------------------#ifndefUnit2H#defineUnit2H#include<windows.h>#include<assert.h>//-------------------------------------------------------......
  • SQL Server备份/还原 SQL注入
    SQL还原目标数据库 注:不能在目标数据库会话中执行alterdatabasetestsetsingle_userwithrollbackimmediate--(这里也可以延迟几秒回滚你的操作)restoredatabasetestfromdisk='d:\test.bak'alterdatabasetestsetmulti_user无意中看到的,有意思的SQL注入:--完整备份......
  • SQLite在VC下的使用
    一、SQLite简介SQLite是用C语言编写的开源数据库,主要用于嵌入式,你也可以把它集成在自己的桌面程序中,也有人将其替代Access,用作后台数据库。SQLite支持多数SQL92标准,例如:索引、限制、触发和查看支持。支持NULL、INTEGER、REAL、TEXT和BLOB数据类型,支持事务。二、下载SQLi......
  • SQL设置SQLServer最大连接数
    设置最大连接数下面的T-SQL语句可以配置SQLServer允许的并发用户连接的最大数目。execsp_configure'showadvancedoptions',1execsp_configure'userconnections',100第一句用以表示显示sp_configure系统存储过程高级选项,使用userconnections时,要求......
  • centos7使用mysql压缩包安装mysql5.7
    centos7使用mysql压缩包安装mysql5.71、安装相关的命令环境安装vim命令yum-yinstallvim*安装netstat命令yum-yinstallnet-tools2、上传mysql压缩包到/usr/local/并解压重名mysql-5.7.37-el7-x86_64.tar.gz解压mysql安装包tar-zxvfmysql-5.7.37-el7-x86_64.t......
  • centos7安装mysql8
    1.查看是否已经安装了mysqlrpm-qa|grepmysql#无输出说明没有安装2.下载rpm2.1手动下载打开网址:MySQLYum存储库选择linux7,点击下载2.2wget下载wgethttps://dev.mysql.com/get/mysql80-community-release-el7-10.noarch.rpm3.安装mysql源rpm-ivhmysql80-commun......
  • 2.MySQL存储引擎
    MySQL有Server层和存储引擎层,存储引擎层为插件式实现,redolog为InnoDB独有。1.MySQL支持哪些存储引擎?默认使用哪个?所有的存储引擎中只有InnoDB是事务性存储引擎,也就是说只有InnoDB支持事务。 2.MySQL存储引擎架构了解吗?MySQL存储引擎采用的是插件式架构,支持......
  • 3.MySQL索引
    1.索引:是一种用于快速查询和检索数据的数据结构,其本质可以看成是一种排序好的数据结构。常见的索引结构有:B树,B+树和Hash、红黑树。在MySQL中,无论是Innodb还是MyIsam,都使用了B+树作为索引结构。2.索引优缺点:优点:使用索引可以大大加快数据的检索速度(大大减少检索的数......