2

我的查询是这样的

select 5 from mytable_name;

然后输出就像列名 5 并且值是 5 打印该表中存在的最大行数。任何人都可以说出这个查询为什么会这样工作的原因吗?

4

5 回答 5

4

任何人都可以说出这个查询为什么会这样工作的原因吗?

您正在'5'为表中的每一行选择一个字符串文字值:

select 5 from mytable_name;

这很好用。因为在SELECT语句中你可以选择:

  • 列参考,
  • 像你的情况一样的字面价值。
  • 功能。
  • 价值表达。
  • 选择表达式。

如标准 SQL 1所定义:

在此处输入图像描述

更新:

但是,如果您有一列的名称是一个数字,就像您的情况一样,您必须对其进行转义才能选择其中的值,如下所示:

 SELECT `143` FROM Table1;

这将选择列中的所有行143

但是这个:

 SELECT 143 FROM Table1;

将为表中找到的每一行选择字符串文字 143。

请注意:如果可能,尽量不要以这种方式命名这些列,建议和最佳实践不要这样做。

SQL 小提琴演示


更新 2:

请注意,如果您选择143or '143',甚至"143"这将选择文字值143而不是列日期。以下是相同的:

SELECT 143 FROM Table1;
SELECT '143' FROM Table1;
SELECT "143" FROM Table1;

所有这些SELECT都不会选择列中的数据,它们将选择文字值143而不是列数据。看这个演示:

演示

您必须使用以下两个来转义列名:

``

像这样:

SELECT `143` FROM table1;

不是:

SELECT '143' FROM table1'

就像我在这里所做的那样:

正确的演示


1图片来自:对于普通人的 SQL 查询

于 2012-12-03T13:49:28.533 回答
1
from mytable

如果没有where缩小该结果的条件,将从您的表中选择所有行。和

select 5

将为每条记录选择常数5。如果您在部件中使用列名,select那么将为每条记录选择该值。

数据库引擎将命名结果5,因为它会自动生成一个列名,而 5 是它的逻辑名称。

于 2012-12-03T13:48:03.433 回答
1

你可能想要'SELECT * FROM mytable_name LIMIT 0,5'?

于 2012-12-03T13:48:39.190 回答
0

使用该命令select 5 ...,您正在查看一个固定值。运行以下命令的相同操作:select "test",您将显示一个固定的字符串。
使用... from mytable_name您正在查找此表的所有记录。

有了这个我们可以得出结论,对于表中的每条记录都mytable_name显示了固定值"5"

于 2012-12-03T13:52:23.063 回答
0

由于您的 where 子句中没有任何内容,因此它正在选择表中的所有行。您没有选择任何列的事实是无关紧要的 - 您仍然会得到表中每一行的结果。

于 2012-12-03T13:48:41.210 回答