6

这些在约束**等方面有什么区别?

选择进入语句

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

4

7 回答 7

10

我将在这里假设 MySQL。

正如文档所述,前两个是相同的。

第三条语句允许创建表填充表,尽管您的语法在那里是错误的;查看正确的语法以获取更多信息。

更新

这是 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),与第一条语句相同。

于 2012-05-17T07:10:44.980 回答
6

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>
于 2012-05-17T11:25:10.950 回答
4

Select Into -> 在选择执行时动态创建表

尽管

Insert Into -> 假定 Table DB 已经存在

最后

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

于 2012-05-17T07:21:35.390 回答
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

进入表1(复制)

第三个创建一个新表“ramm”作为表“rammayan”的副本

于 2012-05-17T07:10:22.723 回答
1

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

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

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

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

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

于 2012-05-17T08:37:23.600 回答
0

INSERT INTO SELECT 插入到现有表中。

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

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

插入选择

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

选择插入

SELECT ColumnName INTO NewTableName
FROM   ExistingTableName1;
GO
于 2017-04-25T21:20:25.550 回答
0

SQL SELECT INTO 语句

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

SELECT INTO 语法

SELECT column1, column2, column3, ...
INTO newtable [IN externaldb]
FROM oldtable
WHERE condition;

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

SQL INSERT INTO SELECT 语句

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

INSERT INTO SELECT 语法

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

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

于 2018-05-19T11:18:39.003 回答