从旧表中选择入和插入之间的区别?

时间:2012-05-17 07:05:15

标签: sql sql-server-2008

约束 * *等方面,它们之间有什么区别。

选择进入声明

SELECT column1, column2, someInt, someVarChar 
INTO ItemBack1 
FROM table2
WHERE table2.ID = 7

插入声明

INSERT INTO table1 ( column1, column2, someInt, someVarChar )
SELECT  table2.column1, table2.column2,
FROM    table2
WHERE   table2.ID = 7

以及

Create table ramm as select * from rammayan

修改1:

数据库SQL Server 2008

7 个答案:

答案 0 :(得分:10)

我将在这里假设MySQL。

前两个是相同的,如documentation个状态。

第三个语句允许创建表两者,尽管你的语法错误了;请查看right syntax以获取更多信息。

<强>更新

这是SQL Server = p

SELECT column1, column2, someInt, someVarChar 
INTO ItemBack1 
FROM table2
WHERE table2.ID = 7

第一个语句将根据ItemBack1自动创建table2表。

INSERT INTO table1 ( column1, column2, someInt, someVarChar )
SELECT  table2.column1, table2.column2,
FROM    table2
WHERE   table2.ID = 7

第二个声明要求table1已存在。

另请参阅:http://blog.sqlauthority.com/2007/08/15/sql-server-insert-data-from-one-table-to-another-table-insert-into-select-select-into-table/


如果约束存在任何差异,那将是因为第二个语句取决于您已经创建的内容(以及表格是否已填充等)。

顺便说一句,第三个语句是Oracle(tm),与第一个语句相同。

答案 1 :(得分:4)

选择进入 - &gt;在选择执行时动态创建表

,而

Insert Into - &gt;假设表DB已存在

最后

创建,只需根据查询的返回结果创建表

答案 2 :(得分:2)

我真的不明白你的问题。我们试试吧:

第一个选择列“someVarChar”的值到一个名为“ItemBack1”的变量中。根据您的SQL-Server(mysql / oracle / mssql / etc.),您现在可以使用此var执行一些逻辑。

第二个插入

的结果
SELECT  table2.column1, table2.column2, 8, 'some string etc.'
FROM    table2
WHERE   table2.ID = 7

进入table1(复制)

并且第3个创建了一个新表“ramm”作为“rammayan”表的副本

答案 3 :(得分:2)

SELECT INTO和INSERT之间存在一些非常重要的区别。

首先,对于INSERT,您需要预定义目标表。 SELECT INTO创建表作为语句的一部分。

其次,作为第一个条件的结果,您可以使用INSERT在加载到表中的类型转换错误。 SELECT INTO不会发生这种情况(尽管基础查询可能会产生错误)。

第三,使用SELECT INTO,您需要提供所有列名称。使用INSERT,您无需为其命名。

第四,SELECT INTO在处理过程中锁定了一些元数据。这意味着数据库上的其他查询可能会被锁定,无法访问表。例如,由于此锁定,您无法在同一数据库上同时运行两个SELECT INTO语句。

第五,在非常大的插入中,有时可以看到INSERT的进度,但SELECT INTO看不到。至少,这是我的经历。

当我有一个复杂的查询并且我想将数据放入表格时,我经常使用:

SELECT top 0 *
INTO <table>
FROM <query>

INSERT INTO <table>
    SELECT * FROM <query>

答案 4 :(得分:1)

Generally speaking 每个都有自己的特点,一个创建一个临时表,另一个使用以前存在的表,第三个创建一个具有完全相同的结构和格式的新表

SELECT ... INTO在默认文件组中创建一个新表,并将查询中的结果行插入其中

INSERT INTO:填充已存在的表 INSERT...INTO

第三个选项称为CTAS(Create Table As Select)进行搜索,您将获得大量有用的链接。基本上它使用SELECT语句中使用的结构和类型创建一个表,而不是临时表。

我想添加更多链接,但由于我是新用户,我只允许发布2个链接以防止垃圾邮件。

答案 5 :(得分:0)

INSERT INTO SELECT插入到现有表中。

SELECT INTO创建一个新表并将数据放入其中。 必须对查询中的所有列进行命名,以使表中的每个列都具有名称。这是我在这个命令中看到的最常见的错误。

数据类型和可空性来自源查询。 如果其中一个源列是标识列并且满足某些条件(例如,查询中没有JOIN),则新表中的列也将是标识。

INSERT INTO SELECT

CREATE TABLE ExistingTableName1 (ColumnName VARCHAR(255));
GO
INSERT 
INTO   ExistingTableName1
SELECT ColumnaName
FROM   ExistingTableName2;
GO

SELECT INTO INSERT

SELECT ColumnName INTO NewTableName
FROM   ExistingTableName1;
GO

答案 6 :(得分:0)

SQL SELECT INTO语句

SELECT INTO语句将数据从一个表复制到一个新表中。

SELECT INTO语法

INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition;

将使用旧表中定义的列名和类型创建新表。您可以使用AS子句创建新的列名。

SQL INSERT INTO SELECT语句

INSERT INTO SELECT语句从一个表复制数据并将其插入另一个表中。

INSERT INTO SELECT语法

{{1}}

INSERT INTO SELECT要求源表和目标表中的数据类型匹配 目标表中的现有记录不受影响