SQL NULL Values(空值)


什么是SQL NULL值?

SQL 中, NULL 用于表示缺失的值。数据表中的 NULL 值表示该值所处的字段为空。

具有NULL值的字段是没有值的字段。

如果表中的字段是可选的,则可以插入新记录或更新记录而不向该字段添加值。然后,该字段将被保存为NULL值。

值为 NULL 的字段没有值。尤其要明白的是,NULL 值与 0 或者包含空白(spaces)的字段是不同的。

注意 :理解NULL值与零值或包含空格的字段不同是非常重要的。具有NULL值的字段是在记录创建期间留空的字段!

如何测试NULL值?

使用比较运算符(例如=,<或<>)来测试NULL值是不可行的。

我们将不得不使用IS NULL和IS NOT NULL运算符。

IS NULL语法

SELECT column_names
FROM table_name
WHERE column_name IS NULL;

IS NOT NULL语法

SELECT column_names
FROM table_name
WHERE column_name IS NOT NULL;

演示数据库

假设我们有以下的“人员”表:

ID

LastName

FirstName

Address

City

1

Doe

John

542 W. 27th Street

New York

2

Bloggs

Joe

London

3

Roe

Jane

New York

4

Smith

John

110 Bishopsgate

London

假设“人员”表中的“Address”列是可选的。如果插入的记录没有“Address”值,则“Address”列将以空值保存。

IS NULL运算符

以下SQL语句使用IS NULL运算符来列出所有没有地址的人员:

SELECT LastName, FirstName, Address FROM Persons
WHERE Address IS NULL;

结果集将如下所示:

LastName

FirstName

Address

Bloggs

Joe

Roe

Jane

提示 :始终使用IS NULL来查找空值。

IS NOT NULL运算符

以下SQL语句使用IS NOT NULL运算符来列出所有具有地址的人员:

SELECT LastName, FirstName, Address FROM Persons
WHERE Address IS NOT NULL;

结果集将如下所示:

LastName

FirstName

Address

Doe

John

542 W. 27th Street

Smith

John

110 Bishopsgate

语法:

创建表的时候,NULL 的基本语法如下:

SQL> CREATE TABLE CUSTOMERS(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25) ,
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);

这里, NOT NULL 表示对于给定列,必须按照其数据类型明确赋值。有两列并没有使用 NOT NULL 来限定,也就是说这些列可以为 NULL。

值为 NULL 的字段是在记录创建的过程中留空的字段。

示例:

NULL 值会给选取数据带来麻烦。不过,因为 NULL 和其他任何值作比较,其结果总是未知的,所以含有 NULL 的记录不会包含在最终结果里面。

必须使用 IS NULL 或者 IS NOT NULL 来检测某个字段是否为 NULL。

考虑下面的 CUSTOMERS 数据表,里面包含的记录如下所示:

+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | |
| 7 | Muffy | 24 | Indore | |
+----+----------+-----+-----------+----------+

下面是 IS NOT NULL 运算符的用法:

SQL> SELECT  ID, NAME, AGE, ADDRESS, SALARY
FROM CUSTOMERS
WHERE SALARY IS NOT NULL;

上面语句的运行结果如下:

+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
+----+----------+-----+-----------+----------+

下面是 IS NULL 运算符的用法:

SQL> SELECT  ID, NAME, AGE, ADDRESS, SALARY
FROM CUSTOMERS
WHERE SALARY IS NULL;

其运行结果如下:

+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 6 | Komal | 22 | MP | |
| 7 | Muffy | 24 | Indore | |
+----+----------+-----+-----------+----------+

本文转自:http://codingdict.com/article/6955

SQL 空值的更多相关文章

  1. 关于Oracle数据库中SQL空值排序的问题

    在Oracle中进行查询排序时,如果排序字段里面有空值的情况下,排序结果可能会达不到自己想要的结果.   如 select * from tableTest order by VISITS desc ...

  2. sql 空值设置默认值

    ifnull(a.discountsign, ') AS "discountsign"

  3. JDBC之数据库操作

    JDBC重要界面有: java.sgl.DriverManager:完成驱动程序的装载和建立新的数据库连接. java.sgl.Connection:表示对某一指定数据库的连接. java.sgl.S ...

  4. PostgreSQL 数据类型

    数值类型 数值类型由两个字节,4字节和8字节的整数,4字节和8字节的浮点数和可选精度的小数.下表列出了可用的类型. www.yiibai.com Name Storage Size Descripti ...

  5. 【LeetCode刷题】SQL-Second Highest Salary 及扩展以及Oracle中的用法

    转载于:https://www.cnblogs.com/contixue/p/7057025.html Write a SQL query to get the second highest sala ...

  6. Oracle学习(四):组函数

    1.知识点:能够对比以下的录屏进行阅读 SQL> --组函数类型:avg,count,max.min,sum SQL> --工资总额 SQL> select sum(sal) fro ...

  7. Oracle学习(一):基本操作和基本查询语句

    文中以"--"开头的语句为凝视,即为绿色部分 1.知识点:能够对比以下的录屏进行阅读 SQL> --录屏工具spool,開始录制,并指定保存路径为c:\基本查询.txt SQ ...

  8. MySQL执行计划值type,强烈推荐

    表结构: create table user ( id int primary key, name varchar(), sex varchar(), index(name) )engine=inno ...

  9. .NET和SQL Server中“空值”辨析 (DBNull与Null的区别)

    对表进行插入操作,如datetime和int类型的两个字段,都允许为null,用“sqlcmd.Parameters.Add("@t12",tb12.Text)”参数绑定时.dat ...

随机推荐

  1. Tomcat6 只允许指定域名访问,禁用IP地址访问,防止恶意解析

    运维网监控突然同事反应,在百度上搜索其他域名,竟然打开了和我们P2P一模一样的网站,我第一个反应是源代码被盗用了.后来发现,是域名被恶意解析了,解决方法 1.禁止IP地址访问项目 2.只允许指定的域名 ...

  2. 【leetcode】662. Maximum Width of Binary Tree

    题目如下: Given a binary tree, write a function to get the maximum width of the given tree. The width of ...

  3. AI加持的阿里云飞天大数据平台技术揭秘

    摘要:2019云栖大会大数据&AI专场,阿里云智能计算平台事业部研究员关涛.资深专家徐晟来为我们分享<AI加持的阿里云飞天大数据平台技术揭秘>.本文主要讲了三大部分,一是原创技术优 ...

  4. 切换路由时取消全部或者部分axios请求,并将一些从不需要取消的加入白名单

    1. axios拦截器进行配置,除了白名单中的接口,统统保存到全局变量canCancelAxios中 window.canCancelAxios = []; // http request 拦截器 a ...

  5. 【Docker】docker常用命令

    1.批量删除无tag镜像 docker images|grep none|awk '{print $3}'|xargs docker rmi 2.以特权模式运行容器 docker run --priv ...

  6. sql语句采用数字方式的排序

    select  z.xymc 省份,y.xm  办理人,s.bt 标题,x.createtime 创建时间,          nvl2(t.jssj,t.jssj,'未接收')   接收时间  fr ...

  7. tp5.0如何获取header的Authorization值

    tp5.0如何获取header的Authorization值$request->header();好像没有这个值的但是发送请求头部有的 解决方案: 在.htaccess 文件中加入 设置 Set ...

  8. 解决ubuntu 18更换wifi vnc 连接不了的问题

    解决ubuntu 18更换wifi vnc 连接不了的问题 问题: ubuntu18上更换了wifi热点,windows上的vnc连接不上. 解决方法: 1.ubuntu18系统上执行“共享”——“屏 ...

  9. Hexo next博客的pjax一个Bug引发的关于pjax用法的小技巧-----pjax后图片点击放大的js失效

    文章目录 广告: 背景 发现 解决 get技能 广告: 本人博客地址:https://mmmmmm.me 源码:https://github.com/dataiyangu/dataiyangu.git ...

  10. Apache—httpd服务创建个人用户主页功能

    创建个人用户主页功能 第1步:开启个人用户主页功能  UserDir disabled前加# UserDir public_html 去掉前面# UserDir参数表示的是需要在用户家目录中创建的网站 ...