我对SQL很新,当从表中选择时,我无法找到描述*和NULL之间差异的资源。
例如:
SELECT null, null, *, null FROM items
这有什么不同于:
SELECT null, null, null, null FROM items
这与以下任何不同:
SELECT * FROM items
如果只有四列开头?
答案 0 :(得分:0)
是的,每一个都不同。当您从表中选择您提供的查询时,表中的列数无关紧要。查看每个查询的差异。
SELECT null,null,*,null FROM items;
SELECT null,null,null,null FROM items;
SELECT * FROM items;
答案 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} }值。
<强>然而强>
NULL
将选择包含此表SELECT * FROM items
中所有值的所有列。
在您的情况下,由于只有四列,第一列将 始终 选择四个items
列,其中第二列将选择它们包含的值。