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不是相等的。

 

时间: 2024-11-05 15:02:28

JOIN 和 NULL的相关文章

SQL Server-聚焦NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL性能分析(十八)

前言 本节我们来综合比较NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL的性能,简短的内容,深入的理解,Always to review the basics. NOT IN.NOT EXISTS.LEFT JOIN...IS NULL性能分析 我们首先创建测试表 USE TSQL2012 GO CREATE SCHEMA [compare] CREATE TABLE [compare].t_left ( id INT NOT NULL PRIMARY KE

SQL Server-聚焦LEFT JOIN...IS NULL AND NOT EXISTS性能分析(十七)

前言 本节我们来分析LEFT JOIN和NOT EXISTS,简短的内容,深入的理解,Always to review the basics. LEFT JOIN...IS NULL和NOT EXISTS分析 之前我们已经分析过IN查询在处理空值时是基于三值逻辑,只要子查询中存在空值此时则没有任何数据返回,而LEFT JOIN和NOT EXISTS无论子查询中有无空值上处理都是一样的,当然比较重要的是利用LEFT JOIN...IS NULL来检查NULL.基于二者返回的结果集是一样的,下面我们

hive 配置文件以及join中null值的处理

一.Hive的参数设置 1.  三种设定方式:配置文件 ·   用户自定义配置文件:$HIVE_CONF_DIR/hive-site.xml ·   默认配置文件:$HIVE_CONF_DIR/hive-default.xml 用户自定义配置会覆盖默认配置.另外,Hive也会读入Hadoop的配置,因为Hive是作为Hadoop的客户端启动的,Hadoop的配置文件包括 ·   $HADOOP_CONF_DIR/hive-site.xml ·   $HADOOP_CONF_DIR/hive-de

mysql的join操作

一.Join语法概述 join 用于多表中字段之间的联系,语法如下: ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1:左表:table2:右表. JOIN 按照功能大致分为如下三类: INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录. LEFT JOIN(左连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录. RIGHT JOIN(右连接):与 LEF

Mysql Join语法解析与性能分析详解

一.Join语法概述 join 用于多表中字段之间的联系,语法如下: ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1:左表:table2:右表. JOIN 按照功能大致分为如下三类: INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录. LEFT JOIN(左连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录. RIGHT JOIN(右连接):与 LEF

Mysql Join语法解析与性能分析

一.Join语法概述 join 用于多表中字段之间的联系,语法如下: ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1:左表:table2:右表. JOIN 按照功能大致分为如下三类: INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录. LEFT JOIN(左连接):取得左表(table1)完全记录,即使右表(table2)并无对应匹配记录. RIGHT JOIN(右连接):与 LEF

数据库基础-JOIN

JOIN分类 三.JOIN分类详解 INNER JOIN: 仅仅返回两个表中,匹配列相同的列值,所在行的数据. SELECT * FROM Table1 t1 INNER JOIN Table2 t2 ON t1.Col1 = t2.Col1 LEFT OUTER JOIN: 左外连接:返回左表的所有数据,并且在右表中不能匹配的列值,其坐在行则使用空值. SELECT * FROM Tables1 t1 LEFT OUTER JOIN Table2 t2 on t1.Col1 = t2.Col2

mysql JOIN要点

基础概念: 内外联结的区别是内联结将去除所有不符合条件的记录,而外联结则保留其中部分.外左联结与外右联结的区别在于如果用A左联结B则A中所有记录都会保留在结果中,此时B中只有符合联结条件的记录,而右联结相反,这样也就不会混淆了. 差集: select table1.* from table1 left join table2 using(id) where table2.id is null 交集: select table1.* from table1 left join table2 usi

Mysql Join语法以及性能优化

引言 内外联结的区别是内联结将去除所有不符合条件的记录,而外联结则保留其中部分.外左联结与外右联结的区别在于如果用A左联结B则A中所有记录都会保留在结果中,此时B中只有符合联结条件的记录,而右联结相反,这样也就不会混淆了. 一.Join语法概述 join 用于多表中字段之间的联系,语法如下: 代码如下: FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1:左表:table2:右表. JOIN 按照功能大致分为如下三类: IN