收藏 分享(赏)

好用的updateselect,insertselect.docx

上传人:hyngb9260 文档编号:7784674 上传时间:2019-05-25 格式:DOCX 页数:8 大小:24.92KB
下载 相关 举报
好用的updateselect,insertselect.docx_第1页
第1页 / 共8页
好用的updateselect,insertselect.docx_第2页
第2页 / 共8页
好用的updateselect,insertselect.docx_第3页
第3页 / 共8页
好用的updateselect,insertselect.docx_第4页
第4页 / 共8页
好用的updateselect,insertselect.docx_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、update select最常用的 update 语法是:UPDATE SET = , SET = 如果我的更新值 Value 是从一条 select 语句拿出来,而且有很多列的话,用这种语法就很麻烦第一,要 select 出来放在临时变量上,有很多个哦第二,再将变量进行赋值。列多起来非常麻烦,能不能像 Insert 那样,把整个 Select 语句的结果进行插入呢?就好象下面insert into table1(c1, c2, c3)(select v1, v2, v3 from table2)答案是可以的,具体的语法如下:UPDATE SET (, ) = (SELECT (, )FROM

2、 WHERE = )WHERE ;下面是这样一个例子:两个表 a、b,想使 b 中的 memo 字段值等于 a 表中对应 id 的 name 值 表 a:id , name 1 王 2 李 3 张 表 b:id,ClientName 1 2 3 (MS SQL Server)语句:update b set ClientName = a.name from a,b where a.id = b.id (Oralce)语句:update b set (ClientName) = (SELECT name FROM a WHERE b.id = a.id)update set from 语句格式当

3、where 和 set 都需要关联一个表进行查询时,整个 update 执行时,就需要对被关联的表进行两次扫描,显然效率比较低。对于这种情况,Sybase 和 SQL SERVER 的解决办法是使用 UPDATE.SET.FROM.WHERE.的语法,实际上就是从源表获取更新数据。在 SQL 中,表连接( left join、right join、inner join 等)常常用于 select 语句,其实在 SQL 语法中,这些连接也是可以用于 update 和 delete 语句的,在这些语句中使用 join 还常常得到事半功倍的效果。Update T_OrderForm SET T_Or

4、derForm.SellerID =B.L_TUserIDFROM T_OrderForm A LEFT JOIN T_ProductInfo B ON B.L_ID=A.ProductID用来同步两个表的数据!Oralce 和 DB2 都支持的语法:UPDATE A SET (A1, A2, A3) = (SELECT B1, B2, B3 FROM B WHERE A.ID = B.ID)MS SQL Server 不支持这样的语法,相对应的写法为:UPDATE A SET A1 = B1, A2 = B2, A3 = B3 FROM A LEFT JOIN B ON A.ID = B.I

5、D个人感觉 MS SQL Server 的 Update 语法功能更为强大。MS SQL SERVER 的写法:UPDATE A SET A1 = B1, A2 = B2, A3 = B3 FROM A, B WHERE A.ID = B.ID在 Oracle 和 DB2 中的写法就比较麻烦了,如下: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)=SELECT.INTO 以及 insert into

6、.select 总结SELECT.INTO 语句 创建制表检索. 语法 SELECT field1, field2, .INTO 新表IN 外部数据库 FROM 源 SELECT.INTO 语句可分为以下几个部分:部分 说明 field1, field2 欲复制至新表的字段的名称。 NewTable 欲创建的表的名称。它应遵循标准命名公约.如果 NewTable 的名称与现存表的名称相同时,将会发生可以捕捉到的错误。 Externaldatabase 进入外部数据库的路径。有关路径的描述,请参阅 IN 子句。 source 从其中选择记录的现存表的名称。它可以是单一表或多重表或一个查询。 查看

7、:http:/ SELECT 复制记录和表)说明 可以使用生成表查询来存档记录、生成表的复制备份、或生成输出至另一个数据库的表的副本、或用作定期显示数据的报表的依据。例如,可以每月运行一次同样的生成表查询,生成地区的销售月报。 注意 或许你想要为新表定义一个主键。创建新表时,新表中的字段将继承查询基本表中每一个字段的数据类型及大小,但不传递其他的字段或表属性。 使用 INSERT INTO 语句 而不用创建追加检索来把数据加入当前表中。 在运行生成表查询之前,若要知道会选择哪些记录,可以先看一看使用相同选择条件的 SELECT 语句的结果。SELECT.INTO 语句示例 此示例选择在员工表中

8、的所有记录,然后复制到命名为 Emp Backup 的新表中。 Sub SelectIntoX() Dim dbs As Database Dim qdf As QueryDef 在您的计算机中修改此行使其正确指到 Northwind 的路径。 Set dbs = OpenDatabase(“Northwind.mdb“) 对运费超过 $100 的订单, 选择员工表中的所有记录, 并且复制到称作员工备份的新表中。 dbs.Execute “SELECT Employees.* INTO “ _ “ 删除 QueryDef 因为这是一个演示。 dbs.Execute “DROP TABLE Em

9、p Backup;“ dbs.Close End Sub在 access 中插入数据到另外的表: (蓝色理想 萧萧小雨)大家都知道 Select into 吧。 比如: = select into tableB select * from tableA where userName=abc = 会创建新表 tableB,把 tableA 中符合条件的纪录插入到 tableB 中。 这是在一个 mdb 文件里操作的。 现在我想把 A.mdb 里的表 tableA 里的符合条件的纪录插入到 B.mdb 里的 tableB 中, 你有什么好办法吗? 哈哈,我开始想的也是先检索 tableA 的 A.

10、mdb,然后循环记录集插入到 B.mdb。 这需要打开两个 Connection。 后来我发现一招(高手不要说 OLD 啊) 首先得知道 B.mdb 的物理地址。这里用 toDBFile 变量表示(可以用 Server.MapPath 取得) = sql=“insert into tableB IN “ Table created SQL insert into (select id,mc from test where id=1) values(1,111111); 1 row inserted SQL select * from test; ID MC - - 1 111111 SQL i

11、nsert into (select id,mc from test where id=1) values(1,111111); insert into (select id,mc from test where id=1) values(1,111111) ORA-00001: 违反唯一约束条件 (ROME.SYS_C0027236) SQL insert into (select id,mc from test where id=1) values(2,222222); 1 row inserted SQL insert into (select id,mc from test where

12、 id=10) values(3,333333); 1 row inserted SQL select * from test; ID MC - - 1 111111 2 222222 3 333333 SQL insert into (select id,mc from test where id=10 with check option) values(5,555555); insert into (select id,mc from test where id=10 with check option) values(5,555555) ORA-01402: 视图 WITH CHECK

13、OPTIDN where 子句违规 SQL insert into (select id,mc from test where 1=1 with check option) values(5,555555); 1 row inserted SQL select * from test; ID MC - - 1 111111 2 222222 3 333333 5 555555-PostgreSQL名称 SELECT INTO 从当前表或视图中创建一个新表 SELECT ALL | DISTINCT ON ( expression , . ) expression AS name , . INT

14、O TEMPORARY | TEMP TABLE new_table FROM table alias , . WHERE condition GROUP BY column , . HAVING condition , . UNION ALL | INTERSECT | EXCEPT select ORDER BY column ASC | DESC | USING operator , . FOR UPDATE OF class_name , . LIMIT count | ALL OFFSET | , start 输入 所有输入的域都在 SELECT 中有详细描述。 输出 所有输入的域都

15、在 SELECT 中有详细描述。 描述 SELECT INTO 从一个查询中创建一个新表。 比较典型的是这个查询从一个现存的表中提取数据,但实际上任何 SQL 查询都可以。 注意: CREATE TABLE AS 功能上和 SELECT INTO 命令相等。-常见用途制作备份 下面的示例制作一个“Persons“ 表的备份。SELECT * INTO Persons_backup FROM Persons IN 子句可用于复制表到另一个数据库。SELECT Persons.* INTO Persons IN Backup.mdb FROM Persons 如果你只希望复制一些字段,你也可以在

16、SELECT 语句后列出字段清单。SELECT LastName,FirstName INTO Persons_backup FROM Persons 你也可以添加一个子句。下面的示例通过从“Persons“ 表筛选居住于 “Sandnes“ 的人,用两列 (FirstName and LastName) 创建一个“Persons_backup“ SELECT LastName,Firstname INTO Persons_backup FROM Persons WHERE City=Sandnes 从多于一个表选择数据也是可能的。下面的示例创建一个包含 Employees 和 Orders

17、两个表数据的新表 “Empl_Ord_backup“。SELECT Employees.Name,Orders.Product INTO Empl_Ord_backup FROM Employees INNER JOIN Orders ON Employees.Employee_ID=Orders.Employee_ID-select into 和 insert into select 两种表复制语句之间的差别select * into destTbl from srcTbl insert into destTbl(fld1, fld2) select fld1, 5 from srcTbl 以上两句都是将 srcTbl 的数据插入到 destTbl,但两句又有区别的。 第一句(select into from)要求目标表(destTbl)不存在,因为在插入时会自动创建。 第二句(insert into select from)要求目标表(destTbl)存在,由于目标表已经存在,所以我们除了插入源表(srcTbl)的字段外,还可以插入常量,如例中的:5。SELECT.INTO 以及 insert into.select

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报