• 主页
  • 归档
所有文章 友链 关于我

  • 主页
  • 归档

SQLite 中的 Null

2017-11-20

绝大多数关系数据库都通过一种称为 Null 特殊占位符支持 未知 或 不可知 的概念,Null 是缺失信息的占位符,本身不是值。Null 表示该位置没有值:Null 不是什么其他值,Null 不是真,也不是假,不是零,也不是空字符串。简单地理解,Null 就是自己:Null。可能一些人不明白其中的含义。掌握 SQLite 中的 Null,需要了解一些关键规则和观点。

  • 第一:为了在逻辑表达式中使用 NULL,SQLite 使用所谓的三值(或三态)逻辑,Null 是真假值之一。下面的表格显示了逻辑与(And)和逻辑或(Or)与 Null 的关系。
X Y X AND Y X OR Y
True True True True
True False False True
True NULL NULL True
False False False False
False NULL False NULL
NULL NULL NULL NULL
  • 第二:可以通过 is null 或者 is not null 操作符检测 NULL 是否存在。如果试图使用其他操作符,例如 equal、greater than 等。你可能会惊呆,看看第三条关于 NULL 的规则。

  • 第三:记住 NULL 不等于其他任何值,包括 NULL,不可以将 NULL 与其他值进行比较,NULL 绝对不会大于或小于其他任何 NULL。像下面这样粗心的语句常常不能返回任何行。

1
select * from mtable where mvalue = null;

NULL 不等于任何值,所以该 SQL 语句不会返回任何值。应该感到庆幸的是,SQLite 提供了一些与 NULL 相关的额外功能。其中第一个功能就是对 NULL 不等于任何值 这一限制进行变通。从 SQLite v3.6.19 开始,is 操作符可以让一个 null 等于另一个 null。最基本的形式是可以执行简单查询 SQL,看看 NULL 是否是 NULL。

1
select NULL is NULL;

非零的任何值都表示真。改例中,SQLite 告诉我们 NULL 等于 NULL。但是不要依赖这种行为。SQLite 的三态逻辑可能有些不适用,如果你期望在其他系统和编程语言中与 is 操作符一起工作的三态逻辑出现这样的预期结果,可能会遇到问题,这是公认的规则。

coalesce 函数作为 SQL99 标注的一部分,将一组值作为输入并返回其中第一个非 NULL。如下例所示:

1
select coalesce(null, 7, null, 4);

在本例中,coalesce 将返回第一个非 NULL 值 7。这在执行一些算数运算时是有帮助的,可以检测是否有 NULL 返回,如果有,可以返回更有意义的值(例如 0)来代替。

相反,nullif 函数输入两个参数,如果两个参数值相同,则返回 NULL;否则,返回第一个参数:

1
2
3
4
select nullif(1, 1);
-- 输出结果 null
select nullif(1, 2);
-- 输出结果 1

注意: 如果使用 NULL,需要特别注意断言和聚合中引用可能存在的 NULL 值字段的查询,否则,NULL 可能在聚合中产生意想不到的效果。

赏

谢谢你请我吃糖果

  • SQLite

扫一扫,分享到微信

微信分享二维码
SQLite 触发器
SQLite 插入、更新或忽略
目录,不存在的…
© 2025 狮子
京ICP备14032650号
  • 所有文章
  • 友链
  • 关于我

tag:

  • Android
  • WebView
  • DataBinding
  • ActiveMQ
  • NDK
  • Android Studio
  • Error
  • Lombok
  • Room
  • SQLite
  • 组件化
  • Fragment
  • File
  • Theme
  • View
  • Java
  • Annotation
  • Fiddler
  • Glide
  • Hexo
  • Json
  • JitPack
  • Generics
  • Thread
  • Kotlin
  • MySQL
  • 算法
  • 面试
  • Python
  • FTP
  • ADB
  • Issue
  • 方案
  • 设计模式
  • Permission
  • SVN
  • Crack
  • Wireshark
  • Charles
  • Burpsuite
  • Version
  • Signature
  • ConstraintLayout
  • Bitmap
  • Application

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • 极简便签

    2035-04-28

    #Application

  • Android Studio 里有用的快捷键

    2025-08-12

    #Android

  • ExpiredTargetSdkVersion

    2025-07-16

    #Error

  • Android 启动画面的深色主题

    2025-04-20

    #Theme

  • 如何在 SQLite 中切换布尔值

    2025-02-27

    #SQLite

  • Kotlin 通过委托实现接口方法

    2025-01-15

    #Kotlin

  • Kotlin 中的中缀函数

    2025-01-14

    #Kotlin

  • 华为手机消息角标问题排查过程

    2024-08-21

    #Issue

  • 约束布局下的 Chains

    2024-05-23

    #Android#ConstraintLayout

  • 约束布局下的 Guideline

    2024-05-21

    #Android#ConstraintLayout

  • Android MQTT Client

    2024-04-08

    #ActiveMQ

  • ActiveMQ MQTT Server 搭建

    2024-04-08

    #ActiveMQ

  • Kotlin 中的内部类

    2023-08-09

    #Kotlin

  • Kotlin 中的扩展函数与属性

    2023-08-08

    #Kotlin

  • Kotlin 中的数据操作

    2023-06-06

    #Kotlin

  • 为什么 Fragment 需要一个无参构造函数

    2023-05-04

    #Fragment

  • 从 APK 签名包安装失败说起

    2023-03-21

    #Android#Issue

  • SQLite 中的 IFNULL() 函数

    2023-02-21

    #SQLite

  • Android 访问文件与目录

    2023-01-30

    #Android#File

  • 下载引擎的组件化之路

    2022-12-28

    #组件化

  • 后台弹出界面权限

    2022-11-24

    #Permission

  • SQLite 数据清洗

    2022-10-19

    #SQLite

  • Android 依赖模块分组

    2022-09-23

    #组件化

  • Java 8 Stream

    2022-03-08

    #Java

  • Android Studio 离线安装 Lombok 插件

    2022-03-07

    #Lombok

  • Android DataBinding(三)单向绑定-BaseObservable

    2021-11-19

    #DataBinding

  • Android DataBinding(二)进阶用法

    2021-11-18

    #DataBinding

  • Android DataBinding(一)基础

    2021-11-17

    #DataBinding

  • DataBinding 下的 EditText 绑定 TextChangedListener

    2021-11-16

    #DataBinding

  • Java 的同步化

    2020-06-17

    #Thread

  • 单例模式的安全性演进

    2020-06-14

    #设计模式

  • Android M 的 NDK 行为变更对 APK 包体积的影响

    2020-06-05

    #Android#NDK

  • 手机抓包的几种方式

    2020-03-27

    #Fiddler#Crack#Wireshark#Charles#Burpsuite

  • Java 泛型中 extends 和 super 的区别

    2020-03-11

    #Generics

  • Kotlin 中的 Constructor

    2020-01-12

    #Kotlin

  • Kotlin 中的 Elvis 操作符 ?:

    2020-01-08

    #Kotlin

  • Excel 数据导入 SQLite

    2019-05-09

    #Android#SQLite

  • Android P 行为变更对 WebView 的影响

    2019-04-18

    #Android#WebView

  • Time 在 Room 中的使用

    2019-02-28

    #Android#Room#SQLite

  • Android Room 使用指南

    2019-02-23

    #Android#Room#SQLite

  • Library 声明的 minSdkVersion 大于 Module 的怎么办?

    2019-02-21

    #Android

  • Android 中的调色板 Palette

    2019-01-31

    #Android

  • JitPack:Failed to install the following Android SDK packages as some licences have not been accepted

    2019-01-21

    #JitPack

  • 自定义 View 感知事件的几种方式

    2018-11-08

    #Android#View

  • Android Library 中 switch 语句的 case 不能访问资源 ID 的原因

    2018-08-12

    #Android

  • 标识应用所在的 Android 设备

    2018-08-07

    #Android

  • Windows 10 下配置 ADB 环境变量

    2018-08-01

    #ADB

  • 将 Android 项目托管到 SVN 上

    2018-05-27

    #SVN

  • Glide V4 API 变更指南

    2018-05-26

    #Glide

  • 将 Java 对象注入到 WebView 的 JavaScript 上下文

    2018-04-26

    #Android#WebView

  • Android 自定义控件-音频可视化

    2018-04-19

    #Android#View

  • Android 中的 Fragment 懒加载

    2018-04-18

    #Android#Fragment

  • N 个无序数中找出最大的 M 个数

    2018-03-30

    #算法#面试

  • 高效加载大图

    2018-03-22

    #Android#Bitmap

  • 管理 Android 设备唤醒状态

    2018-01-30

    #Android

  • Android 5.0 行为变更对 WebView 的影响

    2018-01-24

    #Android#WebView

  • SQLite 存储类

    2017-11-27

    #SQLite

  • SQLite 数据库管理

    2017-11-25

    #SQLite

  • SQLite 事务

    2017-11-24

    #SQLite

  • SQLite 索引

    2017-11-23

    #SQLite

  • SQLite 视图

    2017-11-22

    #SQLite

  • SQLite 触发器

    2017-11-20

    #SQLite

  • SQLite 中的 Null

    2017-11-20

    #SQLite

  • SQLite 插入、更新或忽略

    2017-11-19

    #SQLite

  • SQLite 修改数据

    2017-11-18

    #SQLite

  • 如何从 SQLite 的现有表中添加或删除列

    2017-11-17

    #SQLite

  • Python(2.4)重点复习

    2017-10-17

    #Python

  • Python(2.3)使用 IDE

    2017-10-14

    #Python

  • Python(2.2)模块与包

    2017-10-13

    #Python

  • MySQL数据库插入中文乱码的解决方案

    2017-10-10

    #MySQL

  • JSONArray 值为 NULL 时的容错处理

    2017-10-10

    #Json

  • Android Studio : Failed to open zip file

    2017-09-05

    #Android Studio#Error

  • 自定义 View(三)文字的绘制

    2017-08-24

    #Android#View

  • 自定义 View(二)Paint 详解

    2017-08-23

    #Android#View

  • 自定义 View(一)绘制基础

    2017-08-22

    #Android#View

  • 自定义 View 基础 - 角度与弧度

    2017-08-21

    #Android#View

  • 自定义 View 基础 - 坐标系

    2017-08-21

    #Android#View

  • Fiddler(四)状态栏

    2017-08-20

    #Fiddler

  • Fiddler(三)工具栏

    2017-08-20

    #Fiddler

  • Fiddler(二)主菜单

    2017-08-14

    #Fiddler

  • Fiddler(一)用户界面

    2017-08-10

    #Fiddler

  • TP-LINK 映射内网 FTP 服务到外网

    2017-08-09

    #FTP

  • Python(2.1)Python 学习之使用 REPL

    2017-08-07

    #Python

  • Python(1.1)下载与安装 Python 3.6

    2017-08-05

    #Python

  • 由 zipalign 导致的签名无效

    2017-08-03

    #Android#Signature

  • 版本号

    2017-08-02

    #Version

  • Windows 下 MySQL 数据库 Root 密码重置

    2017-07-29

    #MySQL

  • 泛型

    2017-07-28

    #Java#Generics

  • Annotation 概述

    2017-07-20

    #Java#Annotation

  • 使用 URL Scheme 唤起应用打开 Activity

    2017-07-18

    #方案

  • 面试题:反转

    2017-07-13

    #算法#面试

  • Java 字符串格式化 String.format() 的使用

    2017-07-05

    #Java

  • Hexo下删除文章

    2017-06-01

    #Hexo

  • Hexo下新建文章

    2017-05-31

    #Hexo

  • Google Developers Blog
  • Android 开发者 • 中国
  • Android 开发者 • 美国
  • Android 开发者 • 指南
  • Android 开发者 • 版本
  • Flutter 中文开发者网站
  • Kotlin 语言中文站
  • Java SE 6 技术手册
  • 阿里巴巴矢量图标库
  • 小松的技术博客
  • Quick Reference
  • ConstraintLayout
  • Chris Banes
  • HenCoder
  • GcsSloop
  • Gityuan
  • HuKai
  • 刘望舒
  • 于卫国
  • 木水川
  • 木水川@ChinaUnix
  • 魏超
  • 振兴
  • James Smith
  • Mastering Markdown
  • Dan Lew
  • Jeroen Mols
慢慢的
慢慢的
去改变世界