SQL update select结合语句详解及应用
SQL update select语句
最常用的update语法是:
1 2 |
UPDATETABLE_NAME SET column_name1 =VALUE WHRER column_name2 =VALUE |
如果我的更新值Value是从一条select语句拿出来,而且有很多列的话,用这种语法就很麻烦
第一,要select出来放在临时变量上,有很多个很难保存。
第二,再将变量进行赋值。
列多起来非常麻烦,能不能像Insert那样,把整个Select语句的结果进行插入呢?
就好象下面::
1 2 3 |
INSERTINTO 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 LEFTJOIN 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 LEFTJOIN 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
SQL update select结合语句详解及应用相关推荐
- 【转载】SQL update select结合语句详解及应用
最常用的update语法是: 1 2 UPDATE TABLE_NAME SET column_name1 = VALUE WHRER column_name2 = VALUE 如果我的更新值Valu ...
- SQL Server exec动态语句详解
之前在项目中偶尔看到exec动态语句,所以在网上找了一些资料,整理总结一下,还有在自己项目中使用的时候遇到的坑. exec语句的格式 SQL语句写在括号里面 exec('select * from t ...
- iif能用到mysql中吗_数据库基础知识:SQL中的IIF语句详解
IIf 返回由逻辑测试确定的两个数值或字符串值之一. 语法 数字 IIf(Logical EXPression, Numeric Expression1, Numeric Expression2) 如 ...
- sql中的iif语句详解
IIf 返回由逻辑测试确定的两个数值或字符串值之一. 语法 数字 IIf(«Logical Expression», «Numeric Expres ...
- mysql iif函数_sql中的iif语句详解_mysql
IIf 返回由逻辑测试确定的两个数值或字符串值之一. 语法 数字 IIf(«Logical Expression», «Numeric Expression1», «Numeric Expressio ...
- SQL语句 SELECT LIKE用法详解
在SQL结构化查询语言中,LIKE语句有着至关重要的作用. LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用 ...
- mysql切换用户sql语句,MySQL用户管理及SQL语句详解
[(none)]>select user,host frommysql.user; #查询用户和主机+---------------+-----------+ | user | host | + ...
- MyBatis SQL语句详解
MyBatis SQL语句详解 1 CRUD标签 1.1 select 1.2 insert 1.3 update 1.4 delete 1.5 #{ }和${ }的区别 2 动态SQL 2.1 if ...
- SQL语句详解(四)——SQL联表查询
今天我们继续给大家介绍MySQL相关知识,本文主要内容是SQL联表查询. 一.SQL联表查询简介 在前文SQL语句详解(三)--SQL子查询中,我们给大家介绍了SQL子查询的相关知识和使用示例.实际上 ...
最新文章
- 客快物流大数据项目(四):大数据项目为什么使用Docker
- AI公司为什么集体造“芯”?寻求商业变现新途径
- 【转载】插件自动升级
- eclipse奇淫技巧 (转)
- 飞鸽传书2011什么时候更新?
- VS|Qt工作笔记-修改pro文件生成目录清晰的项目结构并添加三方库
- python爬虫获取下一页url_Python爬虫获取页面所有URL链接过程详解
- python查看mongo库容量_mongo查看数据库空间大小
- WINDOWS系统最近使用的项目路径
- 关于React Hooks使用
- 字节码插桩技术---Transform配合ASM进行插桩(三)
- 彻底解决pycharm中用matplotlib表格绘制时图表中汉字设置
- 数据爬虫—全国一般纳税人企业数据采集
- 【解决】Yandex浏览器Bing搜索遭遇trovi.com劫持
- 小米平板4 Plus简单刷成开发版获取Root超级权限的流程
- 视频监控摄像头的互联网化实践思路
- Matlab代码:综合能源系统(IES)的优化调度 风力、光伏、燃气轮机、燃气内燃机、燃气锅炉、余热回收系统、吸收式制冷机、电制冷机
- 二分三分法--+++这一天的纪录
- [31期] 给自己的一个忠告
- java初级能干什么_小黄鸭系列java基础知识 | java能干什么?