我对 SQL 很陌生,在从表中选择时,我无法找到描述 * 和 NULL 之间区别的资源。
例如:
SELECT null, null, *, null FROM items
这与以下有什么不同:
SELECT null, null, null, null FROM items
这与以下有什么不同:
SELECT * FROM items
如果开始时只有四列?
我对 SQL 很陌生,在从表中选择时,我无法找到描述 * 和 NULL 之间区别的资源。
例如:
SELECT null, null, *, null FROM items
这与以下有什么不同:
SELECT null, null, null, null FROM items
这与以下有什么不同:
SELECT * FROM items
如果开始时只有四列?
第一个查询将显示与表中相同数量的记录。但是在选择查询中这些值将被替换为空值。
SELECT null, null, null, null FROM items
这类似于
SELECT 5, 5, 5, 5 FROM items
第二个查询,
SELECT * FROM items
显示带有值的行。
添加到 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 添加到结果集中。
我知道这个例子没有多大意义,但我希望你理解使用空值的意义。
当然有。
第一个:
SELECT null, null, null, null FROM items
将选择四列,NULL
每列都有值,无论此表中的值和列是什么items
。但是返回的行数将等于items
表中的行数,如果表中有 n 行items
,它将返回 n 行,所有列都有NULL
值。
然而:
SELECT * FROM items
将选择具有此表中所有值的所有列items
。
Se 他们是完全不同的。
在您的情况下,因为只有四列,所以第一列将始终选择四NULL
列,第二列将使用包含的值选择它们。