2012-06-29 281 views
0

解释SQL查询执行我使用SQL查询即在这种情况下

SELECT * FROM TABLE_NAME 

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

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

SELECT 8 FROM TABLE_NAME 

现在只返回一个列,但10行,这个单个列各行中,即具有相同的值8。

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

这两个查询和它的执行过程究竟有什么区别?

回答

1

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

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

1

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

SELECT 8, some_other_column FROM dbo.table_name; 

在这种情况下,你会得到一个列的每一行举办8,但你的另一列了。如果您没有指定任何其他列,SQL Server将扫描该表并为每行获取常量,但不会获取其他数据。

1

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

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

如果你仅仅传递一个常数,在你的情况下,在列表中,它将返回每一行的那个常量,从而产生10行,一列,其内容为8

您也可以结合这两个像

SELECT *, 8 FROM TABLE_NAME 

在你的情况下,这回你6列 - 从原始表和一个常数列5。

1

SELECT clause指定要返回的列。 *告诉服务器返回表中每条记录可用的所有列。 8意味着返回表中每个记录的值8。

1

SELECT子句就像循环遍历FROM子句中的所有行,受JOIN和GROUP BY的限制。

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

第二个版本是说‘返回值8表中的每一行’。

这是SQL如何工作的,并没有具体发动机的功能。

2

您选择列SELECT后像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

1

所有答案都具有非常好的方法,SQL是很好编程select *语法。 当我们写select 8它试图找到开发者的需求。只是根据表格,我们正在申请的条件。select 8将行为像*就行数而言就像只选择一些随机where条件并适用于这两个8 and *行数将相同,但在列*将是精确的表,并且在8的情况下它将只是一个,因为8不是sql的保留字面量,它需要8作为硬编码的列名,并且其值将由程序员由硬编码或由某些公式。

0

为此,你应该考虑你正在做一个查询表TABLE_NAME,这个表应该有10行,现在当你查询

SELECT * FROM TABLE_NAME 

你说,它必须将所有的从表和行显示的所有列,但如果你这样做

SELECT 8 FROM TABLE_NAME 

你说,它必须将所有的行从表中,但,而不是呈现出F栏或者它将显示一个表8,并且它会执行10次,因为该表有10行;您可以执行这个查询

SELECT 8 

而且它只会显示一排有8值,因为你没有做一个查询表,如果你做一个查询X表这个它会告诉你的N行为N行,但只有8行。