在这种情况下解释SQL Query执行

时间:2012-06-29 13:04:44

标签: sql sql-server sql-server-2008 sql-server-2005

我正在使用sql查询,即。

SELECT * FROM TABLE_NAME

在此Table_Name表中有10行和5列。当我运行上面的查询它运行正常并返回10行和5列。

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

SELECT 8 FROM TABLE_NAME

现在它只会返回一列但只有10行,而这一列的值相同,即每行8个。

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

两个查询及其执行过程之间究竟有什么区别?

8 个答案:

答案 0 :(得分: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 :(得分:1)

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

如果您定义8而不是*,那么每行将返回数字8*是所有列名称的通配符,就像执行SELECT col1, col2, ..., col10 FROM TABLE_NAME

一样

答案 2 :(得分:1)

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

SELECT 8, some_other_column FROM dbo.table_name;

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

答案 3 :(得分:1)

SELECT之后指定要返回的列。

*这是一个简单的占位符,用于“给我所有的东西”,因此返回所有列。

如果在列列表中传递一个常量(在您的情况下为8),它将为每一行返回该常量,从而产生包含一列的十行,其内容为{{1} }。

您也可以将这两者合并为

8

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

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

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

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

答案 6 :(得分:1)

所有答案都有非常好的方法,sql编程为select *语法。 当我们写select 8时,它试图找到开发人员的需要。只是基于表格,我们正在应用的条件.. select 8在行数方面的行为与*相同,只需选择一些随机where条件并应用于{{1} *行数将相同,但8 and的情况下列的数量与表格完全相同;如果是*,则8只有一个,8不是保留文字的sql,它将8作为硬编码列名称,其值将由程序员硬编码或通过某种公式定义。

答案 7 :(得分:0)

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

SELECT * FROM TABLE_NAME

你说它必须带来表格中的所有行,显示所有列,但如果你这样做

SELECT 8 FROM TABLE_NAME

你说它必须带来表格中的所有行,但是而不是显示表格的列,它将显示8 ,并且它将执行10次,因为表格有10行;你可以执行这个查询

SELECT 8 

它只显示一行8值,因为你没有对表进行查询,如果你用X查询X表它会显示N行,因为N行有表但是只有8。