《Oracle SQL疑难解析》——.13 在语句中找到和消除空值

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介:

本节书摘来自异步社区出版社《Oracle SQL疑难解析》一书中的第1章,第1.13节,作者: 【美】Grant Allen , Bob Bryla , Darl Kuhn,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.13 在语句中找到和消除空值

Oracle SQL疑难解析

1.13.1 要解决的问题

我们需要统计出公司中,有多少员工的薪酬里含销售提成(commission percentage),有多少员工的薪酬是固定工资。我们可以用HR.EMPLOYEES表中的COMMISSION_PCT字段来获得数据。

1.13.2 解决方法

HR.EMPLOYEES表的结构允许COMMISSION_PCT字段为空值。有两个查询语句可以分别查找commission percent为空值的人和为非空值的人。首先,查找commission percentage为空值的员工:

select first_name, last_name
from hr.employees
where commission_pct is null;
FIRST_NAME      LAST_NAME
-------------------- -------------------------
Donald        OConnell
Douglas        Grant
Jennifer        Whalen
Michael        Hartstein
Pat          Fay
…

72 rows selected.

现在查找commission percentage为非空值的人员:

select first_name, last_name
from hr.employees
where commission_pct is not null;
FIRST_NAME      LAST_NAME
-------------------- -------------------------
John          Russell
Karen        Partners
Alberto        Errazuriz
Gerald        Cambrault
Eleni        Zlotkey
…
35 rows selected.

1.13.3 数据库如何工作

第一个SELECT语句用“COMMISSION_PCT IS NULL”子句测试NULL项。这只会出现两个结果:要么字段为空,即没有值,满足查询条件;要么字段有值。

第二个语句用“COMMISSION_PCT IS NOT NULL”子句,这将找出COMMISSION_PCT 实际值对应的所有EMPLOYEE。

Oracle对空字符串的非标准处理

SQL标准做法是用空或零长度的字符串来代表NULL值,而Oracle并非如此。其中历史的、地域的原因我们无需深究,但一定要记住,Oracle对NULL的规定和用法。对于几乎所有的其他数据库,SQL都把空字符串当作一个独立的、已知的值。

有编程背景的人会发现一些类似的规定,一个0长度的字符串只有一个字符串终结符(0)作为其内容。相反,一个加密的字符串没有确定的状态……即使是一个终结符。我们不能把0长度和未知状态的字符串进行互换,这类似于Oracle如何对待NULL。

1.13.4 NULL不跟任何值相等

在SQL中涉及NULL值的使用诀窍,也是每天必须面对的功课,这经常让人不知所措。每个SQL表达式的结果都是三个值选一:“真”、“假”或“空”。在各种比较、逻辑操作和判断中都是如此。但为避免偶尔的遗忘,我们还是要一再地强调:NULL不跟任何值相等,任何值不跟NULL相等,NULL不等于NULL。试着运行下面的语句,看看你能预猜到答案吗?

select first_name, last_name
from hr.employees
where commission_pct = NULL;

结果是没有任何行返回。即使从前面的SELECT查询中看到EMPLOYEE_ID是72的员工的COMMISSION_PCT为NULL,但因为NULL不等于NULL,所以COMMISSION_PCT=NULL是不成立的,所以查询的结果是没有记录返回。记住,不要用“=”号,而是永远用“IS NULL”或“IS NOT NULL”来寻找或排除NULL值。

相关文章
|
1月前
|
SQL IDE 数据库连接
IntelliJ IDEA处理大文件SQL:性能优势解析
在数据库开发和管理工作中,执行大型SQL文件是一个常见的任务。传统的数据库管理工具如Navicat在处理大型SQL文件时可能会遇到性能瓶颈。而IntelliJ IDEA,作为一个强大的集成开发环境,提供了一些高级功能,使其在执行大文件SQL时表现出色。本文将探讨IntelliJ IDEA在处理大文件SQL时的性能优势,并与Navicat进行比较。
34 4
|
1月前
|
负载均衡 Oracle 网络协议
Oracle中TAF与SCANIP全面解析
通过本文的解析,读者可以清晰地理解Oracle中TAF与SCAN IP的概念、工作原理及其在实际应用中的优势和局限性。TAF通过自动故障转移提升了会话的高可用性,而SCAN则通过简化客户端连接和负载均衡提升了集群的可管理性和扩展性。这两种技术在现代企业数据库架构中扮演着重要角色,能够显著提高系统的稳定性和可用性。
67 6
|
1月前
|
SQL Java 数据库连接
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
|
2月前
|
SQL 监控 数据库
SQL语句是否都需要解析及其相关技巧和方法
在数据库管理中,SQL(结构化查询语言)语句的使用无处不在,它们负责数据的查询、插入、更新和删除等操作
|
1月前
|
SQL 监控 安全
员工上网行为监控软件:SQL 在数据查询监控中的应用解析
在数字化办公环境中,员工上网行为监控软件对企业网络安全和管理至关重要。通过 SQL 查询和分析数据库中的数据,企业可以精准了解员工的上网行为,包括基础查询、复杂条件查询、数据统计与分析等,从而提高网络管理和安全防护的效率。
30 0
|
2月前
|
SQL 监控 Oracle
Oracle SQL性能优化全面指南
在数据库管理领域,Oracle SQL性能优化是确保数据库高效运行和数据查询速度的关键
|
2月前
|
SQL 数据可视化 BI
SQL语句及查询结果解析:技巧与方法
在数据库管理和数据分析中,SQL语句扮演着至关重要的角色
|
2月前
|
SQL 监控 关系型数据库
SQL错误代码1303解析与处理方法
在SQL编程和数据库管理中,遇到错误代码是常有的事,其中错误代码1303在不同数据库系统中可能代表不同的含义
|
2月前
|
SQL 存储 关系型数据库
SQL默认索引是什么:深入解析与技巧
在SQL数据库中,索引是一种用于提高查询性能的重要数据结构
|
2月前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:实现过程与关键细节解析an3.021-6232.com
随着互联网技术的快速发展,ASP.NET作为一种广泛使用的服务器端开发技术,其与数据库的交互操作成为了应用开发中的重要环节。本文将详细介绍在ASP.NET中如何连接SQL数据库,包括连接的基本概念、实现步骤、关键代码示例以及常见问题的解决方案。由于篇幅限制,本文不能保证达到完整的2000字,但会确保

推荐镜像

更多