我正在阅读SQL“cookbook”类型参考,我发现了一个我以前从未遇到过的声明:
INSERT INTO table (col1, col2)
SELECT t.col1, 8
FROM table AS t
WHERE t.col2 = 5
UNION ALL
SELECT 8, 8
现在令我困惑的是紧跟在SELECT语句之后的一个数字(在本例中为8)。在我有限的SQL经验中,我只遇到了SELECT查询,后面跟着列名。有人可以帮我理解这是做什么的吗?谢谢!
答案 0 :(得分:3)
SELECT 8, 8
完全按照它的样子行事;它返回一个包含2个未命名列的结果集,每个列包含8
- 如果你自己只运行该语句,你就会看到它。
您可以自由选择文字值&表达式就像你是列,函数结果等;
SELECT 'cake', 123 + 456
第一个表中的UNION ALL
合并(非重复)行选择第二个选择的结果,以便在表格中插入一个额外的(8,8)
行。
答案 1 :(得分:2)
您可以向select语句添加文字值。
在这种情况下,它只会在结果中添加一个附加列,其值为8。
您也可以使用不类似地引用列的函数。 e.g。
SELECT t.col1, NOW() AS t
AS t
定义额外列的列别名。这在您的示例中并不重要,因为它仅用作insert
的源。
我不会打扰UNION ALL
,因为这不是你的困惑。
答案 2 :(得分:2)
它选择文字8和8.语句将从表中插入col1和8的值,其中table = 5的col2和另一个值为8和8的行
答案 3 :(得分:2)
INSERT INTO table1 (col1, col2)
在名为table1
的表格中插入一行,其值为col
和col2
。
将所有其他列设置为其默认值(如果没有,则为null)。
SELECT t.col1, 8
FROM table AS t
WHERE t.col2 = 5
插入此select语句的输出
请注意,select 8
将替换输出的每一行中的文字8。
UNION ALL
SELECT 8, 8
在结果中加上col1 = 8,col2 = 8的额外行。
<强>链接强>:
http://dev.mysql.com/doc/refman/5.0/en/insert-select.html
http://dev.mysql.com/doc/refman/5.0/en/select.html
从上一个链接:
SELECT也可用于检索在不参考任何表的情况下计算的行 例如:
mysql> SELECT 1 + 1;
-> 2
答案 4 :(得分:1)
您可以选择所需的任何内容,从表字段开始,以可由SQL引擎评估的自定义表达式结束(例如table.field * 2)。在此查询中,您将有8个作为每个返回记录的字段。
答案 5 :(得分:1)
这是关系操作,称为'extend'(有趣的是,Codd最初省略了他的关系代数,可能是因为他设想在'前端'完成计算)。
虽然通常用于计算,但从语言设计的角度来看,允许涉及文字的扩展,虽然不是非常有用,但没有理由不允许它。
答案 6 :(得分:0)
您可以将值直接放在SELECT语句中。 t.col1实际上是一个变量,它在不同的返回寄存器中具有不同的值。 8是字面值。