我正在使用sql查询,即。
SELECT * FROM TABLE_NAME
在此Table_Name表中有10行和5列。当我运行上面的查询它运行正常并返回10行和5列。
现在我正在运行一个新的查询,即
SELECT 8 FROM TABLE_NAME
现在它只会返回一列但只有10行,而这一列的值相同,即每行8个。
我想知道为什么它会返回10行和一个只有8个值的列,当我使用*而不是8时,它将返回10行和5列。
两个查询及其执行过程之间究竟有什么区别?
答案 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。