在约束 * 键 *等方面,它们之间有什么区别。
选择进入声明
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
答案 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
已存在。
如果约束存在任何差异,那将是因为第二个语句取决于您已经创建的内容(以及表格是否已填充等)。
顺便说一句,第三个语句是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要求源表和目标表中的数据类型匹配 目标表中的现有记录不受影响