2013-04-07 72 views
0

我对SQL很陌生,从表中选择时无法找到描述*和NULL之间区别的资源。从SQL中的表中选择时,*和NULL之间有什么区别?

例如:

SELECT null, null, *, null FROM items 

那是比任何不同:

SELECT null, null, null, null FROM items 

,是这个有什么不同比:

SELECT * FROM items 

如果只有四列开始?

+0

你正在使用什么RDBMS? – 2013-04-07 06:44:26

+0

我不知道,这不是我的服务器 – Ci3 2013-04-07 06:47:04

+4

我不是说任何冒犯,但你应该找到一个关于SQL的教程。这是一个非常基本的问题,如果你需要问它,你将需要学习很多来完成任何事情。 :-) – 2013-04-07 06:54:30

回答

-2

当然有。

第一招:

SELECT null, null, null, null FROM items 

将选择在每个NULL值,四列无论此表items值和列。但是返回的行数将等于items表中的行数,如果items表中有n行,它将返回n行,所有列的值都为NULL

SQL Fiddle Demo


但是:

SELECT * FROM items 

将选择所有与此表items所有值的列。

硒它们是完全不同的。

在你的情况,因为只有四列,第一个将总是选择四种NULL列,其中是第二个将包含价值选择。

+0

但是我说如果表格中只有4列......他们还会给出不同的结果吗? – Ci3 2013-04-07 06:49:22

+0

@ChrisHarris - 第一个将***总是选择四个可为空的列,每个列都有一个“NULL”值,但第二个选择列中包含所有值的列。 – 2013-04-07 06:51:41

+0

您不应将它们称为“可空列”,这意味着它们包含值,但其基础表允许NULL。实际上,它们是“包含所有NULLL的列”中真正的“NULL列”。 – ErikE 2013-04-07 08:09:32

0

的第一个查询将显示相同数量的记录如在表格中。但是这些值将在选择查询中被替换为空值。

SELECT null, null, null, null FROM items 

这类似于

SELECT 5, 5, 5, 5 FROM items 

第二个查询,

SELECT * FROM items 

Diplays与价值观行。

0

添加到马哈茂德的回答,我可以解释一种情况,当你需要一个SELECT NULL。

假设你有2个表,T1 3列和t2有4列。你决定写一个涉及这些表的UNION的查询。

SELECT * FROM t1 
UNION 
SELECT * FROM t2 

以上查询不起作用,因为每个表中的列数不同,因此联合操作不能由SQL引擎执行。为了解决这个问题,您需要从t1中选择一个空列,并在访问查询结果集时在应用代码中正确处理它。

SELECT *, null FROM t1 
UNION 
SELECT * FROM t2 

现在无论是单个查询上面会有4列,从而导致一个成功的UNION操作。

也就是说,如果使用UNION ALL,相同的查询将会正常工作,因为如果列数不同,它会自动将NULLS添加到结果集。

我知道的例子并没有太大的意义,但我希望你明白使用空值的点。

+0

谢谢,这是也有帮助。 – Ci3 2013-04-07 07:19:41

相关问题