0

我正在使用 sql 查询,即

SELECT * FROM TABLE_NAME

在这个 Table_Name 表中有 10 行和 5 列。当我运行上面的查询时,它运行良好并返回 10 行和 5 列。

现在我正在运行一个新查询,即

SELECT 8 FROM TABLE_NAME

现在它将只返回一列但 10 行,并且这一列具有相同的值,即每行 8 个。

我想知道为什么它返回我 10 行和一列只有 8 个值,当我使用 * 而不是 8 在这种情况下它将返回 10 行和 5 列。

查询及其执行过程之间到底有什么区别?

4

8 回答 8

2

您选择SELECTlike之后的列SELECT col1, col2, col3 FROM table。如果您键入8“只是得到一个常数 8”。

如果您只想要 8 行,请在 sql server 中使用SELECT TOP 8 col1, col2 FROM table.

如果您想了解更多关于一般 sql 的信息,这里是一个好的开始:http ://www.w3schools.com/sql/default.asp

于 2012-06-29T13:13:40.153 回答
1

SELECT您指定要返回的列之后。

*这是一个简单的“给我所有的”占位符,所以所有存在的列都会被返回。

如果您仅在列列表中传递一个常量,在您的情况下是一个8,它将只为每一行返回该常量,从而产生十行一列,其内容为8

您也可以将这两者结合起来

SELECT *, 8 FROM TABLE_NAME

在您的情况下,这将返回 6 列 - 原始表中的 5 列和一个常量列。

于 2012-06-29T13:08:48.040 回答
1

SELECT 子句指定要返回的列。* 告诉服务器返回表中每条记录可用的所有列。8 表示为表中的每条记录返回值 8。

于 2012-06-29T13:09:00.867 回答
1

SELECT 子句就像一个循环,它遍历 FROM 子句中的所有行,受 JOIN 和 GROUP BY 的影响。

在您的简单查询中,第一个版本是说“为表中的每一行返回行中的所有值”。

第二个版本是说“为表中的每一行返回值 8”。

这就是 SQL 的工作方式,而不是特定引擎的功能。

于 2012-06-29T13:09:55.047 回答
1

所有答案都有很好的方法,sql 的select *语法编程很好。当我们编写select 8它时,它会试图找到开发人员的需求。仅基于表格,我们正在应用的条件..在行数方面select 8将表现相同*,例如只需选择一些随机where条件并应用于两者8 and*行数将相同,但列数*将完全相同表有并且如果8它只是一个,因为8它不是 sql 的保留文字,它采用8硬编码的列名,其值将由程序员硬编码或通过某种公式定义。

于 2012-06-29T13:26:48.890 回答
1

如果您没有定义where子句,则将获取所有行。

如果您定义8而不是,*则数字8将在每一行中返回。*是所有列名的通配符,就像做SELECT col1, col2, ..., col10 FROM TABLE_NAME

于 2012-06-29T13:08:32.447 回答
1

SELECT 8只是选择一个常数。它为表中的每一行返回该值。这就像说:

SELECT 8, some_other_column FROM dbo.table_name;

在这种情况下,您会在每一行中保留8一列,但您也会获得另一列。如果不指定任何其他列,SQL Server 会扫描表并获取每一行的常量,但不获取其他数据。

于 2012-06-29T13:08:39.810 回答
0

为此,您应该考虑正在对表进行查询TABLE_NAME,该表应该有 10 行,现在当您进行查询时

SELECT * FROM TABLE_NAME

您是说它必须从表中提取所有行并显示所有列,但是如果您这样做

SELECT 8 FROM TABLE_NAME

您是说它必须从表中获取所有行,但它不会显示表的列,而是显示 8,并且会执行 10 次,因为表有 10 行;你可以执行这个查询

SELECT 8 

它只会显示一个值为 8 的行,因为您没有对表进行查询,如果您使用此表对 X 表进行查询,它将显示为 N 行,因为 N 行有该表,但只有 8 .

于 2012-06-29T13:55:01.120 回答