0

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

例如:

SELECT null, null, *, null FROM items

这与以下有什么不同:

SELECT null, null, null, null FROM items

这与以下有什么不同:

SELECT * FROM items

如果开始时只有四列?

4

4 回答 4

0

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

  1. 从项目中选择空、空、*、空;

    点击这里查看输出

  2. 从项目中选择空、空、空、空;

    点击这里查看输出

  3. 选择 * 从项目;

    点击这里查看输出

于 2013-04-07T07:03:49.593 回答
0

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

SELECT null, null, null, null FROM items

这类似于

SELECT 5, 5, 5, 5 FROM items

第二个查询,

SELECT * FROM items

显示带有值的行。

于 2013-04-07T07:11:10.720 回答
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 添加到结果集中。

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

于 2013-04-07T07:13:25.710 回答
-2

当然有。

第一个:

SELECT null, null, null, null FROM items

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

SQL 小提琴演示


然而:

SELECT * FROM items

将选择具有此表中所有值的所有列items

Se 他们是完全不同的。

在您的情况下,因为只有四列,所以第一列将始终选择四NULL列,第二列将使用包含的值选择它们。

于 2013-04-07T06:47:47.320 回答