`
kedou
  • 浏览: 5619 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

sql null讲解

阅读更多

NULL值的概念是造成SQL的新手的混淆的普遍原因,他们经常认为NULL是和一个空字符串''的一样的东西。不是这样的!例如,下列语句是完全不同的:

mysql> INSERT INTO my_table (phone) VALUES (NULL);
mysql> INSERT INTO my_table (phone) VALUES ("");

两个语句把值插入到phone列,但是第一个插入一个NULL值而第二个插入一个空字符串。第一个的含义可以认为是“电话号码不知道”,而第二个则可意味着“她没有电话”。

在SQL中,NULL值在于任何其他值甚至NULL值比较时总是假的(FALSE)。包含NULL的一个表达式总是产生一个NULL值,除非在包含在表达式中的运算符和函数的文档中指出。在下列例子,所有的列返回NULL

mysql> SELECT NULL,1+NULL,CONCAT('Invisible',NULL);

如果你想要寻找值是NULL的列,你不能使用=NULL测试。下列语句不返回任何行,因为对任何表达式,expr = NULL是假的:

mysql> SELECT * FROM my_table WHERE phone = NULL;

要想寻找NULL值,你必须使用IS NULL测试。下例显示如何找出NULL电话号码和空的电话号码:

mysql> SELECT * FROM my_table WHERE phone IS NULL;
mysql> SELECT * FROM my_table WHERE phone = "";

MySQL中,就像很多其他的SQL服务器一样,你不能索引可以有NULL值的列。你必须声明这样的列为NOT NULL,而且,你不能插入NULL到索引的列中。

当用LOAD DATA INFILE读取数据时,空列用''更新。如果你想要在一个列中有NULL值,你应该在文本文件中使用\N。字面上的词'NULL'也可以在某些情形下使用。见7.16 LOAD DATA INFILE句法。

当使用ORDER BY时,首先呈现NULL值。如果你用DESC以降序排序,NULL值最后显示。当使用GROUP BY时,所有的NULL值被认为是相等的。

为了有助于NULL的处理,你能使用IS NULLIS NOT NULL运算符和IFNULL()函数。

对某些列类型,NULL值被特殊地处理。如果你将NULL插入表的第一个TIMESTAMP列,则插入当前的日期和时间。如果你将NULL插入一个AUTO_INCREMENT列,则插入顺序中的下一个数字。

在《SQL-3参考大全》中,作者这样解释NULL的含义:未知或未定义。对NULL来说,有很多有趣的特性。

NULL是一个数据值,而且它属于一个域(?)。是的,例如一个字符串字段,其中的空值只能是一个字符串。尽管它的内容没有定义,或者未知,但它是字符串,这一点无可置疑。

NULL不是非法数据,这一点SQL-3 标准也说的很清楚。我们没有办法保存零分之一,但可以保存空值。虽然它是空值,是未定义,是未知,可它也的确是 一个合法的信息。

运算黑洞:对于NULL,一般的运算都会返回NULL。比如加减乘除,这简直就是一个黑洞一样。永远不会有什么数据等于NULL。当然,1不等于NULL,2也一样。可是,NULL也不等于NULL。说一个NULL等于NULL是错误的。所以我们只能比较它“是”或“不是”。为了避免混乱,SQL-3标准有一些约定。比如表达式 x=NULL,结果应当是UNKOWN 。 而表达式“x is NULL”,就得看情况,如果x是NULL或 False,就返回Ture(?);x是非NULL,返回False。有点奇怪是不是,它基于NULL不等于NULL。 这个规则的确为SQL标准所支持,遇到这样的数据库系统,可不要感到惊讶。

三值逻辑:《鹿鼎记》中的韦小宝,整人的秘诀之一就是“我问你话,是就点头,不是就摇头,不许你出声!”的确,通常我们的逻辑观点,总是基于这种二值逻辑体系,对就是对,错就是错。可在关系理论中,没有这么简单。有一种没有绝对是非的情况存在:NULL。这就是关系理论的三值逻辑。

还有一些常见的与NULL相关的情况。比如,统计函数(也有的文档称之为聚集函数、集函数)通常会忽略NULL。不过,假设有这样一个表T:

C

-----

1

2

NULL

NULL

我们分别执行两个查询:SELECT COUNT(*) FROM T和SELECT COUNT(C) FROM T, 猜猜会有什么不同?起初,我以为两个结果应当一样。结果,前一个是4,后一个是2。前一个等于4,显然基于NULL也是数据这个事实;而后一个结果为2,是由于统计C列时,COUNT忽略了NULL。

SQL-3标准中,搜索条件(WHERE和HAVING)只接受TRUE,而约束却只拒绝FALSE,二者对NULL的接受态度相反。所以我们前面见到的ROOMS表才可以把空值写入人员字段。而在排序时,却又没什么规律。SQL标准只作出了一个补充定义,所以每个DBMS的处理 ORDER BY的方法并不相同,当然NULL不是高于所有值就是低于所有值。

在《SQL-3参考大全》中介绍了更详细的关于NULL的内容。另外,书中还介绍了两位数据库专家C.J.Date和E.f.Codd关于NULL的不同论点(E.F.Codd甚至希望有四值逻辑)有兴趣的朋友可以找来一读。在实践中,我们还会遇到一些有趣的事,特别是联接查询中, NULL让我们的人生变得 “丰富多彩”。

评论

相关推荐

    sql语句详细讲解及实例

    以下是对给定文件中SQL语句的详细讲解和实例分析: 1. **复制表结构:** ```sql SELECT * INTO b FROM a WHERE 1<>1 ``` 这个命令会创建一个新的表`b`,并从表`a`中复制所有的列定义,但不复制任何数据。`WHERE...

    SQL简明讲解教程

    ### SQL简明讲解教程 #### 一、SQL简介与重要性 **结构化查询语言**(Structured Query Language),简称**SQL**,是一种专为管理和处理关系型数据库而设计的语言。SQL不仅是进行数据存取的基础工具,也是数据库管理...

    数据库SQL语句讲解.pptx

    SQL Server支持的约束包括:空值约束(NULL或NOT NULL)、主键约束(PRIMARY KEY)、外键约束(FOREIGN KEY)、默认值约束(DEFAULT)、唯一性约束(UNIQUE)以及检查约束(CHECK)。 对于已创建的表,可以进行的...

    SQL语句大全讲解

    5. **空值检查**:`IS NULL`或`IS NOT NULL`。 **四、排序与分组** `ORDER BY`子句用于对结果集进行排序,`GROUP BY`子句用于对数据进行分组,常与聚合函数如`COUNT`, `SUM`, `AVG`, `MIN`, `MAX`一起使用。 1. **...

    sql server 语句语法应用讲解

    `lab833-4-2 joindb 中实现数据完整性的各种约束.sql`和`lab833-4-2 joindb 实现constraint(default,rule)约束.sql`这两文件可能专注于数据完整性,这是数据库设计的重要部分,包括实体完整性(如NOT NULL约束)、...

    OracleSQL精妙SQL语句讲解[定义].pdf

    本文将深入讲解Oracle SQL的一些核心概念和语句,帮助你更好地理解和运用它。 首先,SQL*PLUS是Oracle数据库的命令行工具,用于交互式访问数据库。登录Oracle SQL*PLUS需要输入SQLPLUS命令,接着输入Oracle用户的...

    SQL触发器实例讲解.pdf

    SQL 触发器实例讲解 SQL 触发器是一种特殊的存储过程,用于在数据库中执行某些操作时自动触发某些事件。触发器可以应用于 Insert、Update、Delete 事件等。 什么是触发器? 触发器是一个特殊的存储过程,在 SQL ...

    ORACLE数据库教程-SQL使用讲解.ppt

    ### ORACLE数据库教程-SQL使用讲解 #### 一、SQL简介 SQL,全称为Structured Query Language,即结构化查询语言,是由IBM公司在1970年代为其System R项目设计的一种数据库查询语言。自那时起,SQL迅速发展并成为...

    SQL2000实例教程讲解

    【SQL2000实例教程讲解】 SQL2000是一种基于SQL标准的数据库管理系统,由微软公司开发,主要用于管理和处理关系型数据库。本教程旨在为初学者提供基础的SQL知识,涵盖创建数据库表格、数据查询、数据操作等方面。 ...

    sql优化讲解

    【SQL优化讲解】 SQL优化是数据库管理中至关重要的一步,旨在提高查询效率,减少资源消耗,从而提升整体系统性能。以下是一些优化SQL语句的原则和技巧: 1. **使用LIKE语句时的注意事项**: - 当使用LIKE操作符时...

    SQL SERVER CLR 讲解及小例

    SQL Server CLR(Common Language Runtime)是微软SQL Server数据库引擎中的一个功能,允许开发人员使用.NET Framework的任何语言(如C#、VB.NET或F#)编写存储过程、触发器、用户定义函数(UDFs)、类型和其他...

    数据库SQL语句讲解PPT学习教案.pptx

    数据库SQL语句讲解PPT学习教案 这份PPT学习教案主要讲解了数据库SQL语句的基础知识,包括约束、基本查询、多表联合查询、子查询、数据操作等内容。下面是对该PPT学习教案的详细知识点解释: 一、约束 在数据库中...

    SQL数据库基础讲解

    本篇文章将详细讲解SQL数据库的基础知识,以SQL Server为例。 首先,基本的SELECT语句是SQL中最常用的命令,用于从数据库中检索数据。基本格式如下: ```sql SELECT 字段名 FROM 表名 WHERE 条件; ``` 例如,要查询...

    数据库编程期末答疑,卷子讲解,SQL server相关操作讲解,如有侵权请联系删除

    乐山师范学院数据库编程期末答疑,卷子讲解,SQL server相关 如下是一个简化的员工考勤应用E-R图,请在SQL Server中创建名为YQKG的数据库,包括两个数据文件,一个日志文件,文件名按SQL Server对象命名规范定义,...

    Sql 语句详解

    全网最全的SQL 讲解,带实例描述 目录概要: 1. SQL 简介 3 2. SQL 语法 4 3. SQL SELECT 语句 5 4. SQL WHERE 子句 7 5. SQL AND & OR 运算符 8 6. SQL ORDER BY 子句 9 7. SQL INSERT INTO 语句 11 8. SQL UPDATE...

    SQL Server 2005 讲解

    例如,NOT NULL约束确保字段不能为NULL,UNIQUE约束确保数据的唯一性,FOREIGN KEY约束则维护了表之间的参照完整性。 3. **视图**:视图是虚拟表,基于一个或多个表的SELECT查询结果。它提供了一种方式来封装特定的...

    程序员的SQL金典完整版

    的 SQL 语法差异、SQL 调优、NULL 值处理、事务、开窗函数等高级技术;通过对实际案例 开发过程的详细分析,使读者掌握 SQL的综合应用技巧。 内容提要 本书主要介绍SQL以及在实际开发中的应用,并且对SQL在MYSQL、...

Global site tag (gtag.js) - Google Analytics