使用带关联子查询的Update更新 --1.创建测试表,INSERT INTO SELECT语句复制表数据

  • 栏目:数据 时间:2020-04-11 12:43
<返回列表

mssql sql高效关联子查询的update 批量更新

      Update是T-sql中再简单不过的语句了,update table set column=expression  [where condition],我们都会用到。但update的用法不仅于此,真正在开发的时候,灵活恰当地使用update可以达到事半功倍的效果。

 1.INSERT INTO SELECT语句
      语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1

/*使用带关联子查询的Update更新 --1.创建测试表

      假定有表Table1(a,b,c)和Table2(a,c),现在Table1中有些记录字段c为null,要根据字段a在Table2中查找,取出字段a相等的字段c的值来更新Table1。一种常规的思路,通过游标遍历Table1中字段c为null的所有记录,在循环体内查找Table2并进行更新,即用游标Cursor的形式。测试sql语句如下:

      要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。示例如下:

create TABLE Table1 ( a varchar(10), b varchar(10), c varchar(10), CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED ( a ASC ) ) ON [PRIMARY]

create TABLE Table2 ( a varchar(10), c varchar(10), CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED ( a ASC ) ) ON [PRIMARY] GO --2.创建测试数据 Insert into Table1 values('赵','asds',null) Insert into Table1 values('钱','asds','100') Insert into Table1 values('孙','asds','80') Insert into Table1 values('李','asds',null)

Insert into Table2 values('赵','90') Insert into Table2 values('钱','100') Insert into Table2 values('孙','80') Insert into Table2 values('李','95') GO select * from Table1

--3.通过Update方式更新 Update Table1 set c = (select c from Table2 where a = Table1.a) where c is null GO

--4.显示更新后的结果 select * from Table1 GO --5.删除测试表 drop TABLE Table1 drop TABLE Table2

图片 1图片 2使用游标遍历方式更新
    --1.创建测试表
    create TABLE Table1
    (
        a varchar(10),
        b varchar(10),
        c varchar(10),
        CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
        (
            a ASC
        )
    ) ON [PRIMARY]

INSERT INTO SELECT语句复制表数据
   --1.创建测试表
    create TABLE Table1
    (
        a varchar(10),
        b varchar(10),
        c varchar(10),
        CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
        (
            a ASC
        )
    ) ON [PRIMARY]

    create TABLE Table2
    (
        a varchar(10),
        c varchar(10),
        CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED
        (
            a ASC
        )
    ) ON [PRIMARY]
    GO
    --2.创建测试数据
    Insert into Table1 values('赵','asds',null)
    Insert into Table1 values('钱','asds','100')
    Insert into Table1 values('孙','asds','80')
    Insert into Table1 values('李','asds',null)

    create TABLE Table2
    (
        a varchar(10),
        c varchar(10),
        d int,
        CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED
        (
            a ASC
        )
    ) ON [PRIMARY]
    GO
    --2.创建测试数据
    Insert into Table1 values('赵','asds','90')
    Insert into Table1 values('钱','asds','100')
    Insert into Table1 values('孙','asds','80')
    Insert into Table1 values('李','asds',null)
    GO
    select * from Table2

    Insert into Table2 values('赵','90')
    Insert into Table2 values('钱','100')
    Insert into Table2 values('孙','80')
    Insert into Table2 values('李','95')
    GO
    select * from Table1

    --3.INSERT INTO SELECT语句复制表数据
    Insert into Table2(a, c, d) select a,c,5 from Table1
    GO

    --3.通过游标方式更新
    declare @name varchar(10)
    declare @score varchar(10)
    declare mycursor cursor for select a from Table1 where c is null
    open mycursor
    fetch next from mycursor into @name
    while(@@fetch_status = 0)
    BEGIN
        select @score=c from Table2 where a=@name
        update Table1 set c = @score where a = @name
        fetch next from mycursor into @name    
    END
    close mycursor
    deallocate mycursor
    GO
    --4.显示更新后的结果
    select * from Table1
    GO
    --5.删除测试表
    drop TABLE Table1
    drop TABLE Table2

    --4.显示更新后的结果
    select * from Table2
    GO
    --5.删除测试表
    drop TABLE Table1
    drop TABLE Table2

 
     虽然用游标可以实现,但代码看起来很复杂,其实用Update根据子关联来更新只要一条语句就可以搞定了,测试代码如下:

      2.SELECT INTO FROM语句

图片 3图片 4使用带关联子查询的Update更新
    --1.创建测试表
    create TABLE Table1
    (
        a varchar(10),
        b varchar(10),
        c varchar(10),
        CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
        (
            a ASC
        )
    ) ON [PRIMARY]

      语句形式为:SELECT vale1, value2 into Table2 from Table1

    create TABLE Table2
    (
        a varchar(10),
        c varchar(10),
        CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED
        (
            a ASC
        )
    ) ON [PRIMARY]
    GO
    --2.创建测试数据
    Insert into Table1 values('赵','asds',null)
    Insert into Table1 values('钱','asds','100')
    Insert into Table1 values('孙','asds','80')
    Insert into Table1 values('李','asds',null)

      要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。示例如下:

    Insert into Table2 values('赵','90')
    Insert into Table2 values('钱','100')
    Insert into Table2 values('孙','80')
    Insert into Table2 values('李','95')
    GO
    select * from Table1

SELECT INTO FROM创建表并复制表数据
   --1.创建测试表
    create TABLE Table1
    (
        a varchar(10),
        b varchar(10),
        c varchar(10),
        CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
        (
            a ASC
        )
    ) ON [PRIMARY]
    GO

    --3.通过Update方式更新
    Update Table1 set c = (select c from Table2 where a = Table1.a) where c is null
    GO

    --2.创建测试数据
    Insert into Table1 values('赵','asds','90')
    Insert into Table1 values('钱','asds','100')
    Insert into Table1 values('孙','asds','80')
    Insert into Table1 values('李','asds',null)
    GO

    --4.显示更新后的结果
    select * from Table1
    GO
    --5.删除测试表
    drop TABLE Table1
    drop TABLE Table2

    --3.SELECT INTO FROM语句创建表Table2并复制数据
    select a,c INTO Table2 from Table1
    GO

 
      参考资料:也许是被忽略的update语句,update 子查询

    --4.显示更新后的结果
    select * from Table2
    GO
    --5.删除测试表
    drop TABLE Table1
    drop TABLE Table2

上一篇:Server中除了对拥有十几条记录的表进行人工删除外 下一篇:没有了

更多阅读

使用带关联子查询的Update更新 --1.创建测

数据 2020-04-11
mssql sql高效关联子查询的update 批量更新       Update是T-sql中再简单不过的语句了,update tab...
查看全文

韦德体育SQL和PL/SQL运行引擎的一体化,在

数据 2020-04-10
内部PL/SQL的增强 测试环境:Oracle9i,PL/SQL Developer 8.0,PL/SQL Developer 7.0 一体化SQL和PL/SQL解析器...
查看全文

Server中除了对拥有十几条记录的表进行人

数据 2020-04-10
删除重复记录 想必每一位开发人员都有过类似的经历,在对数据库进行查询或统计的时候不时...
查看全文

友情链接: 网站地图

Copyright © 2015-2019 http://www.koi-bumi.com. 韦德体育有限公司 版权所有