在SQL SELECT语句中对数字感到困惑

时间:2011-09-21 12:34:14

标签: mysql sql select

我正在阅读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查询,后面跟着列名。有人可以帮我理解这是做什么的吗?谢谢!

7 个答案:

答案 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的表格中插入一行,其值为colcol2
将所有其他列设置为其默认值(如果没有,则为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是字面值。