JOIN 和 NULL

Posted Jesse_Li

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JOIN 和 NULL相关的知识,希望对你有一定的参考价值。

NULL值得数据出现在数据库发展的最初阶段的确给开发和使用者带来了很大的便利,这是因为它为我们节省了太多的磁盘空间,而且在那个年代磁盘是相当昂贵的。但是随着科技的发展,硬件系统的改进突飞猛进,NULL又给我们带来了很大的困扰。

下面我们来看下当我们进行JOIN操作时候,NULL值给我们带来的困扰。

CREATE TABLE dbo.Student
(
 Sno int  null
,Name nvarchar(23) 
)
CREATE TABLE dbo.Score
(
 Sno int 
,Score INT
)
INSERT INTO dbo.Student(Sno,Name)VALUES(1,\'Jesse\');
INSERT INTO dbo.Student(Sno,Name)VALUES(2,\'Jessca\');
INSERT INTO dbo.Student(Sno,Name)VALUES(3,\'June\');
INSERT INTO dbo.Student(Sno,Name)VALUES(4,\'Supper\');

INSERT INTO dbo.Score(Sno,Score)VALUES (1,45)
INSERT INTO dbo.Score(Sno,Score)VALUES (1,56)
INSERT INTO dbo.Score(Sno,Score)VALUES (2,100)
INSERT INTO dbo.Score(Sno,Score)VALUES (3,25)  
INSERT INTO dbo.Score(Sno,Score)VALUES (5,99)  

SELECT * FROM dbo.Student
SELECT * FROM dbo.Score

 下面向学生表中插入一条id 为NULL的值。

INSERT INTO dbo.Student(Sno,Name)VALUES(NULL,\'Mike\');

 看下几种JOIN 的结果

SELECT * FROM dbo.Student
SELECT * FROM dbo.Score

SELECT *
FROM dbo.Student a
LEFT JOIN dbo.Score b
ON a.Sno=b.Sno

SELECT *
FROM dbo.Student a
INNER JOIN dbo.Score b
ON a.Sno=b.Sno

SELECT *
FROM dbo.Student a
RIGHT JOIN dbo.Score b
ON a.Sno=b.Sno

SELECT *
FROM dbo.Student a
FULL JOIN dbo.Score b
ON a.Sno=b.Sno

  

这条NULL的值完全被作为一条新的id 值处理。

下面我们再为score插入一条NULL

 

INSERT INTO dbo.Score(Sno,Score)VALUES (NULL,98)  

  

SELECT * FROM dbo.Student
SELECT * FROM dbo.Score

SELECT *
FROM dbo.Student a
LEFT JOIN dbo.Score b
ON a.Sno=b.Sno

SELECT *
FROM dbo.Student a
INNER JOIN dbo.Score b
ON a.Sno=b.Sno

SELECT *
FROM dbo.Student a
RIGHT JOIN dbo.Score b
ON a.Sno=b.Sno

SELECT *
FROM dbo.Student a
FULL JOIN dbo.Score b
ON a.Sno=b.Sno

  wi

此时,已经出来了好多的NULL,左表的NULL和右表的NULL都没有同时出现在一条记录里面,这意味着,NULL和NULL不是相等的。

 

 

 

 

 

以上是关于JOIN 和 NULL的主要内容,如果未能解决你的问题,请参考以下文章

EasyClick 运行代码片段出Null

spark关于join后有重复列的问题(org.apache.spark.sql.AnalysisException: Reference '*' is ambiguous)(代码片段

Android 使用两个不同的代码片段获取当前位置 NULL

如何重构这个 Java 代码片段

android片段getArguments()返回null

sql sql join片段