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) |
本文链接:http://www.aimks.com/sql-update-the-select-statement-application.html
相关推荐
【DBeaver Oracle驱动】是DBeaver数据库管理工具与Oracle数据库进行连接的关键组件。DBeaver是一款跨平台且开源的通用SQL编辑器,它支持多种数据库系统,包括Oracle。Oracle驱动则是专为连接到Oracle数据库而设计的...
DBeaver oracle数据库驱动
Oracle各版本驱动包,有需要的可以下载使用,支持目前常用的不同版本oracle和JDK,根据自己需要调整和使用 主要包括的jar有: ojdbc5.jar 适用JDK版本:JDK 1.5 对应Oracle数据库版本:Oracle数据库版本(如Oracle ...
Oracle客户端是数据库管理和开发人员用来连接到Oracle数据库服务器的重要工具,尤其在进行PL/SQL开发时,它扮演着不可或缺的角色。"instantclient_11_2"是Oracle提供的一种轻量级客户端,允许用户在无需完整Oracle...
在Ubuntu系统上安装Oracle数据库需要遵循一定的步骤,因为Oracle数据库对操作系统环境有一定的要求,并且需要安装一系列的依赖包来确保其稳定运行。本教程将详细解释如何在Ubuntu上准备环境并解决可能出现的问题。 ...
oracle dockerfile
oracle 11g client 安装包 客户端
E版本
Oracle 19c 客户端简版, 适合开发应用服务器安装部署
Oracle 32位 Windows ODBC客户端
nacos2.2.3 适配 oracle 19c, nacos的oracle脚本在conf目录下面oracle.sql,部署包
Oracle从入门到精通资料-pdf
Oracle数据库备份和恢复操作手册
oracle常用操作,讲解从入门到精通,常见的oracle问题详解
oracle的索引,非常适合初学者,介绍索引的分类,如何创建,修改等
安装oracle11g所需的依赖包
1.oracle sql文件路径 nacos-server-2.2.0-oracle\nacos\conf 2.已经测试单机版启动无问题 3.测试版本nacos2.2.0+oracle12c 4.RuoYi-Cloud-Oracle实测可用
Oracle expdp/exp dump备份文件恢复工具OraDumpReader可以直接读取查看oracle导出工具(包括exp和expdp)所产生的dump文件中的数据。 当这些dmp文件被病毒软件加密破坏后,仍可以通过扫描整个文件,找出剩余的数据。
oracle中insert, 插入批量插入及union
Oracle 11g是一款强大的关系型数据库管理系统,由甲骨文公司(Oracle Corporation)开发,是全球广泛应用的企业级数据库解决方案之一。在这个“Oracle11g 百度盘下载”资源中,用户可以获取到Oracle 11g的安装包,...