从SQL中的表中选择时,*和NULL之间有什么区别?

时间:2013-04-07 06:43:36

标签: sql

我对SQL很新,当从表中选择时,我无法找到描述*和NULL之间差异的资源。

例如:

SELECT null, null, *, null FROM items

这有什么不同于:

SELECT null, null, null, null FROM items

这与以下任何不同:

SELECT * FROM items

如果只有四列开头?

4 个答案:

答案 0 :(得分:0)

是的,每一个都不同。当您从表中选择您提供的查询时,表中的列数无关紧要。查看每个查询的差异。

  1. SELECT null,null,*,null FROM items;

    Click here to see the output

  2. SELECT null,null,null,null FROM items;

    Click here to see the output

  3. SELECT * FROM items;

    Click here to see the output

答案 1 :(得分:0)

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

SELECT null, null, null, null FROM items

这类似于

SELECT 5, 5, 5, 5 FROM items

第二个查询,

SELECT * FROM items

Diplays row with Values。

答案 2 :(得分:0)

添加Mahmoud的答案,我可以解释一种情况,当你需要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添加到结果集。

我知道这个例子没有多大意义,但我希望你理解使用空值的意义。

答案 3 :(得分:-2)

当然有。

第一个:

SELECT null, null, null, null FROM items

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

SQL Fiddle Demo


<强>然而

NULL

将选择包含此表SELECT * FROM items 中所有值的所有列。

他们完全不同。

在您的情况下,由于只有四列,第一列将 始终 选择四个items列,其中第二列将选择它们包含的值。