1. 程式人生 > >JOIN 和 NULL

JOIN 和 NULL

student value 但是 nbsp ble 現在 處理 har 硬件

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