SQL点滴之编辑数据(转)
2013-12-01 01:36
435 查看
数据库中的数据编辑是我们遇到的最频繁的工作,这一个随笔中我来总结一下最常用的数据编辑。
select into
经常遇到一种情况是,我们希望创建一个新表,表中的数据来源于原有的一个表;原有一个表,但是这个表中的数据已经很混乱,我们希望把这些数据备份出来,然后把原有的表中的数据清除,重新导入;在这些情况下我们可以使用select into语句。
如果当前用户拥有建表权限,在select语句使用关键字into可以在数据库中创建新的 表。这个语句只需要把into new_table_name加到选择出的列名之后,from关键字之前,当然数据可以来源于一个或多个表中。需要说明的是在新表中只包含select字 句中查询的到的数据,没有任何键,约束,关系。下面实例:
select top(10) *
into new_intervalwaitssample
from IntervalWaitsSample
select * from new_intervalwaitssample
这个语句就将IntervalWaitsSample表中的前10行数据放在一个新建的表new_intervalwaitssample中。
insert into select
现在已经有这个新表了,如果我们想再从原表IntervalWaitsSample中选择一些数据插入到这个新表中呢,这时候就需要使用insert into select语句了,下面实例:
insert into new_intervalwaitssample
select * from IntervalWaitsSample where wait_type='ASSEMBLY_LOAD'
这个语句就将原表IntervalWaitsSample中的所有wait_type='ASSEMBLY_LOAD'的数据插入到新表中了。
insert into select union
现在如果我们有一些已知的数据,想把这些数据一次性写入到目标表里面,应该怎么办呢,这时候union语句就很有用了,可以使用insert
into select union语句,注意这个语句和insert into
select很相似,差别就在于后面的select语句使用了union把多个select连接起来。
insert into select value11 , value12 , value13
union select value21 , value22 , value23
union select value31 , value32 , value33
下面是实例:
insert into new_intervalwaitssample
select 'ASYNC_NETWORK_IO','2011-05-09 16:50:00.973','0.00' union
select 'ASYNC_NETWORK_IO','2011-05-09 17:00:00.020','0.00' union
select 'ASYNC_NETWORK_IO','2011-05-09 17:15:00.123','0.00' union
select 'ASYNC_NETWORK_IO','2011-05-09 17:25:00.190','0.00'
使用表值构造函数
我们还可以直接使用表值构造函数,这个更加简单直接,代码如下:
insert into new_intervalwaitssample
values
('ASYNC_NETWORK_IO','2011-05-09 16:50:00.973','0.00'),
('ASYNC_NETWORK_IO','2011-05-09 17:00:00.020','0.00'),
('ASYNC_NETWORK_IO','2011-05-09 17:15:00.123','0.00'),
('ASYNC_NETWORK_IO','2011-05-09 17:25:00.190','0.00')
从表中剪切数据
还有一种情况,假设我们想从一个表中的数据删除几条数据,然后把这些删除的数据放到另外一个表中。这个动作就像使用剪切,粘贴一样。不过这种情况要注意,他只能从用户表中剪切数据,不能从视图中剪切数据。它的语法如下
Delete sourcetable
output deleted.value1,deleted.value2,deleted.value3
into targettable
from targettable where
下面是实例
delete WaitStats
output
deleted.dt,
deleted.wait_type,
deleted.waiting_tasks_count,
deleted.wait_time_ms,
deleted.max_wait_time_ms,
deleted.signal_wait_time_ms
into new_waitestats
where WaitStats.wait_type='ABR'
要注意的是这里有一个很少见的关键字deleted,它是当前要删除的表的别名,这个有点像类中的this关键字。
可见即可得的编辑
如果我们是应用程序开发,我相信大多数人还是更愿意使用SQL Server Management
Studio中的图像化界面来操作数据,毕竟提供了这么多强大的功能,为什么不用呢。记得我曾经提到过Oracle中可以直接修改sql语句选择得到的数
据,当时质问Microsoft SQL Server为何没有提供这样强大的功能。呵呵,今天发现SQL
Server还是提供了这样的功能。不过这种修改只能是单独一个表,如果在这个查询语句中有内连接之类的估计就不行了。废话不说,上图:
点击要修改的表右击选择Edit top 200 rows
当打开编辑界面的时候,SQL server上面会多出一个标签
,鼠标滑到这个标签上,再滑到Panel上,再滑到SQL上,点击SQL,或者在编辑界面右击也能看到。如图1
这时候在上面的文字区就可以编写自己想要修改的数据的查询语句如下列:
SELECT TOP (1000) dt, wait_type, waiting_tasks_count, wait_time_ms, max_wait_time_ms, signal_wait_time_ms
FROM new_waitestats
WHERE (wait_type ='ABR')
这里我们想要修改wait_type=ABR的数据,点击查询按钮 ,在下面的表格内就可以看到所有符合条件的数据,这时候就可以修改这些数据了,注意改好之后按回车键才会写到数据库里面。这样做是不是很偷懒呢呵呵,不用写update语句,直接在里面修改。
使用编辑器复制粘贴数据
还有一种情况可以使用编辑器代替上面的insert into select语句, 如果两个表的字段完全一样,我们从一个表中查询得到数据,然后复制到另外一个表中。
首先点击数据行的开头,选中整行,然后点击copy如图2
然后右击想要插入数据的第二个表,鼠标拖动滚动条到最后,直到显示一行全部都是空值的一行,然后右击paste,按回车键,这样一条数据就插入进去了。如图3
这些都是在平时工作中见到的,觉得很有意思在这里记录下来。这些雕虫小技对于数据库技术大牛来时不值得一提,还望大牛们看到了不要笑我班门弄斧啊。
select into
经常遇到一种情况是,我们希望创建一个新表,表中的数据来源于原有的一个表;原有一个表,但是这个表中的数据已经很混乱,我们希望把这些数据备份出来,然后把原有的表中的数据清除,重新导入;在这些情况下我们可以使用select into语句。
如果当前用户拥有建表权限,在select语句使用关键字into可以在数据库中创建新的 表。这个语句只需要把into new_table_name加到选择出的列名之后,from关键字之前,当然数据可以来源于一个或多个表中。需要说明的是在新表中只包含select字 句中查询的到的数据,没有任何键,约束,关系。下面实例:
select top(10) *
into new_intervalwaitssample
from IntervalWaitsSample
select * from new_intervalwaitssample
这个语句就将IntervalWaitsSample表中的前10行数据放在一个新建的表new_intervalwaitssample中。
insert into select
现在已经有这个新表了,如果我们想再从原表IntervalWaitsSample中选择一些数据插入到这个新表中呢,这时候就需要使用insert into select语句了,下面实例:
insert into new_intervalwaitssample
select * from IntervalWaitsSample where wait_type='ASSEMBLY_LOAD'
这个语句就将原表IntervalWaitsSample中的所有wait_type='ASSEMBLY_LOAD'的数据插入到新表中了。
insert into select union
现在如果我们有一些已知的数据,想把这些数据一次性写入到目标表里面,应该怎么办呢,这时候union语句就很有用了,可以使用insert
into select union语句,注意这个语句和insert into
select很相似,差别就在于后面的select语句使用了union把多个select连接起来。
insert into select value11 , value12 , value13
union select value21 , value22 , value23
union select value31 , value32 , value33
下面是实例:
insert into new_intervalwaitssample
select 'ASYNC_NETWORK_IO','2011-05-09 16:50:00.973','0.00' union
select 'ASYNC_NETWORK_IO','2011-05-09 17:00:00.020','0.00' union
select 'ASYNC_NETWORK_IO','2011-05-09 17:15:00.123','0.00' union
select 'ASYNC_NETWORK_IO','2011-05-09 17:25:00.190','0.00'
使用表值构造函数
我们还可以直接使用表值构造函数,这个更加简单直接,代码如下:
insert into new_intervalwaitssample
values
('ASYNC_NETWORK_IO','2011-05-09 16:50:00.973','0.00'),
('ASYNC_NETWORK_IO','2011-05-09 17:00:00.020','0.00'),
('ASYNC_NETWORK_IO','2011-05-09 17:15:00.123','0.00'),
('ASYNC_NETWORK_IO','2011-05-09 17:25:00.190','0.00')
从表中剪切数据
还有一种情况,假设我们想从一个表中的数据删除几条数据,然后把这些删除的数据放到另外一个表中。这个动作就像使用剪切,粘贴一样。不过这种情况要注意,他只能从用户表中剪切数据,不能从视图中剪切数据。它的语法如下
Delete sourcetable
output deleted.value1,deleted.value2,deleted.value3
into targettable
from targettable where
下面是实例
delete WaitStats
output
deleted.dt,
deleted.wait_type,
deleted.waiting_tasks_count,
deleted.wait_time_ms,
deleted.max_wait_time_ms,
deleted.signal_wait_time_ms
into new_waitestats
where WaitStats.wait_type='ABR'
要注意的是这里有一个很少见的关键字deleted,它是当前要删除的表的别名,这个有点像类中的this关键字。
可见即可得的编辑
如果我们是应用程序开发,我相信大多数人还是更愿意使用SQL Server Management
Studio中的图像化界面来操作数据,毕竟提供了这么多强大的功能,为什么不用呢。记得我曾经提到过Oracle中可以直接修改sql语句选择得到的数
据,当时质问Microsoft SQL Server为何没有提供这样强大的功能。呵呵,今天发现SQL
Server还是提供了这样的功能。不过这种修改只能是单独一个表,如果在这个查询语句中有内连接之类的估计就不行了。废话不说,上图:
点击要修改的表右击选择Edit top 200 rows
当打开编辑界面的时候,SQL server上面会多出一个标签
,鼠标滑到这个标签上,再滑到Panel上,再滑到SQL上,点击SQL,或者在编辑界面右击也能看到。如图1
这时候在上面的文字区就可以编写自己想要修改的数据的查询语句如下列:
SELECT TOP (1000) dt, wait_type, waiting_tasks_count, wait_time_ms, max_wait_time_ms, signal_wait_time_ms
FROM new_waitestats
WHERE (wait_type ='ABR')
这里我们想要修改wait_type=ABR的数据,点击查询按钮 ,在下面的表格内就可以看到所有符合条件的数据,这时候就可以修改这些数据了,注意改好之后按回车键才会写到数据库里面。这样做是不是很偷懒呢呵呵,不用写update语句,直接在里面修改。
使用编辑器复制粘贴数据
还有一种情况可以使用编辑器代替上面的insert into select语句, 如果两个表的字段完全一样,我们从一个表中查询得到数据,然后复制到另外一个表中。
首先点击数据行的开头,选中整行,然后点击copy如图2
然后右击想要插入数据的第二个表,鼠标拖动滚动条到最后,直到显示一行全部都是空值的一行,然后右击paste,按回车键,这样一条数据就插入进去了。如图3
这些都是在平时工作中见到的,觉得很有意思在这里记录下来。这些雕虫小技对于数据库技术大牛来时不值得一提,还望大牛们看到了不要笑我班门弄斧啊。
相关文章推荐
- SQL点滴14—编辑数据
- SQL点滴14—编辑数据
- PL/SQL编辑数据"这些查询结果不可更新,请包括ROWID或使用SELECT...FOR UPDATE获得可更新结果"处理
- SQL点滴积累3--detete 删除的目标表数据与其他表有关联关系
- SQL点滴4—筛选数据列的类型,字段大小,是否可为空,是否是主键,约束等等信息
- sql学习笔记3--编辑数据
- 【转】PL/SQL编辑数据"这些查询结果不可更新,请包括ROWID或使用SELECT...FOR UPDATE获得可更新结果"处理
- sql点滴38—SQL Server 2008和SQL Server 2008 R2导出数据的选项略有不同
- (转)PL/SQL编辑数据"这些查询结果不可更新,请包括ROWID或使用SELECT...FOR UPDATE获得可更新结果"处理
- SQL : 在SQL Server 2008(Or Express)中如何Open并编辑数据表【转】
- 分享[ASP.NET] SQL语句统计每天、每月、每年的数据 编辑:吴立星
- sql之编辑数据
- SQL 点滴:附加数据失败
- 点滴积累【other】---存储过程删除所有表中的数据(sql)
- sql点滴38—SQL Server 2008和SQL Server 2008 R2导出数据的选项略有不同
- SQL-Server使用点滴(一-数据对象篇)
- SQL点滴4—筛选数据列的类型,字段大小,是否可为空,是否是主键,约束等等信息
- php+sql创建本地项目详细步骤4——编辑更新数据库数据
- 记录学习的点滴(树形结构数据SQL检索语句)
- 使用PL/SQL Dev 编辑数据的技巧