select * 排除字段_编写 SQL 的排除联接

有两个表,就叫作源表和目标表吧。它们有一个相同的字段,通过该字段可以把源表和目标表关联在一起,我们希望从源表中检索到的记录里的关联字段的值没有存在目标表中。举个例子,源表 dept,目标表 emp,获取 dept 表中部门编号不在 emp 表中的记录。检查两张表的数据,我们发现 emp 表中没有部门编号 40 的数据。

c60df525eb9b024e0e1475b03eebbda4.png
图1 emp 表的数据

cc0c12d01993b7b8f8f182f23c9942f1.png
图2 dept 表的数据

实现这种的查询的方法有很多,不同的实现方式的性能也会不一样。我们就来看看都有哪些方法?

NOT IN

SELECT * 
FROMdept 
WHERE deptno NOT IN (SELECT deptno FROMemp)

这种实现方式需要注意一个点,就是在 not in 里面不能出现 NULL,如果出现 NULL 就会查不到结果。比如下面这条 SQL,没有数据返回。

SELECT dname 
FROMdept 
WHERE deptno NOT IN (SELECT deptno FROMemp UNION ALL SELECT NULL)

为什么是这样呢?

因为在逻辑运算中,涉及到 NULL 的操作的结果仍为 NULLnot in 可以改写成 or 的形式,比如 deptno not in(10,NULL) 展开成 or 的表达式是:not (deptno = 10 or deptno = NULL),最终的表达式是 not NULL

NOT EXISTS

使用 not exists 可以避免由于目标表的关联列上出现 NULL 而查不出数据。

WITH e AS 
(SELECT deptno 
FROMemp 
UNION ALL 
SELECT NULL) 
SELECT * 
FROMdept 
WHERE NOT EXISTS (SELECT NULL FROMe WHERE e.deptno = dept.deptno)

使用 not exists 的 SQL 的一般形式:

SELECT 选择列 
FROM源表 
WHERE NOT EXISTS (SELECT NULL FROM目标表 WHERE 关联字段)

在 MySQL 5.6 之前,子查询的性能表现得比较差,因而就有人想着把子查询改成连接的方式以提高查询性能。

LEFT JOIN

通常,我们会想到使用 NOT INNOT EXISTS 做排除操作。其实,使用 LEFT JOIN 也可以达到相同的目的。

SELECT d.* 
FROMdept d LEFT JOIN emp e ON e.deptno = d.deptno 
WHERE e.deptno IS NULL 

对于表达式 a left join b ,不管 b 表中是否有数据可以和 a 表匹配得上,a 表总是能返回所有数据。如果 b 表中没有数据能匹配得上 a 表,在查询结果中会使用 NULL 填充 b 表的列。因此,通过过滤条件 b.关联列 is NULL 可以找到只存在于 a 表中的数据。

总结

  1. 使用 not in 时要考虑到排除的值中是否有 NULL ,如果有,需要提前做过滤处理。
  2. not existsleft join 都可以用来做排除操作,可以任选一种方式实现,如果 SQL 的性能表现不佳,则可以换另外一种方式试试。

来源:SQL实现

作者:zero

原文:编写 SQL 的排除联接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS中调用bignumber处理高精度小数运算

ignumber.js用于数字精度要求较高的计算。 bignumber.js源码地址&#xff1a;https://github.com/MikeMcl/bignumber.js 1.下载bignumber.js。 下载地址&#xff1a;https://github.com/MikeMcl/bignumber.js/releases 2.引入js。 3.示例 html: <div><label>数1&am…

centos8安装搜狗输入法_搜狗拼音输入法去广告版

搜狗输入法是搜狗公司2006年6月推出的一款汉字输入法工具。与传统输入法不同&#xff0c;搜狗输入法是第一款为互联网而生的输入法——它通过搜索引擎技术&#xff0c;将互联网变成了一个巨大的“活”词库。应该有许多人电脑上都装了吧&#xff0c;不过一般下载的版本天天弹广告…

Project查看资源分配情况

选择 资源图表&#xff0c;点击 格式&#xff0c;在图表里选择

webbrowser实现input tab事件_如何合理构造一个Uploader工具类(设计到实现)

作者&#xff1a;Chaser (本文来自作者投稿) 原文地址&#xff1a;https://juejin.im/post/5e5badce51882549652d55c2源码地址&#xff1a;https://github.com/impeiran/Blog/tree/master/uploader前言本文将带你基于ES6的面向对象&#xff0c;脱离框架使用原生JS&#xff…

小达人点读笔的任我贴贴纸怎么使用?

小达人点读笔是一款高性能、高容量点读笔。其自身的开放性、共享性、传播性让可读书籍及音频资源真正的达到了海量且优质有用。 下面我们来认识一下标配中任我贴上的贴纸&#xff1a; 智能贴 用于已经布有二维码的有声图书的封面&#xff0c;比如律动英语&#xff0c;成长一线&…

vscode必备插件_10个必备的Visual Studio Code (VS code)插件

我基本上每天都用vs code&#xff0c;我喜欢的小巧&#xff0c;开源&#xff0c;免费并且非常强大。尤其它非常多的插件可以免费使用。这里我把经常用插件介绍给大家&#xff0c;希望大家留言讨论我把VS code 插件分两类&#xff0c;一类是处理可视化的&#xff0c;比如说颜色&…

软考官方教材:信息系统项目管理师教程(第三版)

2020年下半年信息系统项目管理师考试官方教材将继续使用清华大学出版社出版的信息系统项目管理师教程第3版&#xff08;特别注意&#xff0c;有某些辅导资料也打着信息系统项目管理师教程第3版的旗号&#xff0c;各位考生一定要看准官方指定教材是由全国计算机专业技术资格考试…

centos挂载windows共享目录

2019独角兽企业重金招聘Python工程师标准>>> 在windows中创建一个共享文件夹记住这个网络路径&#xff0c; 在centos上新建文件夹/mnt/MyShare $> mkdir /mnt/MyShare挂载 username用户名.password登录密码 $> Sudo mount -t cifs -o username用户名,pass…

博阅likebook alita专用pdf制作

适合博阅likebook alita带手写的。 先上效果图&#xff0c;左边是正文&#xff0c;右边有留白可以写读书笔记 这样做有什么好处&#xff1f; pdf从阅读器里复制出来&#xff0c;在电脑打开&#xff0c;笔记也会有。笔记是直接记录在pdf上的&#xff0c;相当于pdf上的批注。 …

esc键没反应_有机人名反应——Brown 硼氢化反应(Brown Hydroboration)

Brown 硼氢化反应&#xff08;Brown Hydroboration&#xff09;反应机理链接&#xff1a;http://chem.kingdraw.cn/Shortlink?id20200624161301Brown硼氢化反应&#xff0c;是指乙硼烷在醚类溶液中离解成的甲硼烷以B-H键与烯烃、炔烃的不饱和键加成&#xff0c;生成有机硼化合…

修改Navicat数据库自动备份目录

1.右键连接&#xff0c;选择“编辑连接” 2. 选择“高级”&#xff0c;设置位置

python图形界面编程库_Python支持哪些图形界面的第三方库

Python支持哪些图形界面的第三方库 发布时间&#xff1a;2020-11-09 10:37:56 来源&#xff1a;亿速云 阅读&#xff1a;58 作者&#xff1a;小新 这篇文章给大家分享的是有关Python支持哪些图形界面的第三方库的内容。小编觉得挺实用的&#xff0c;因此分享给大家做个参考。一…

成为中国特色项目经理,走上人生巅峰

今天是秋分&#xff0c;写在项目经理6周年的总结 落叶知秋&#xff0c;情谊如酒&#xff0c;风渐凉时有喜无忧&#xff1b; 岁月流走&#xff0c;蓦然回首&#xff0c;一声问候醇绵依旧&#xff1b; 有情相守&#xff0c;不离左右&#xff0c;含笑送出这份问候。 -----------…

项目经理到底要不要懂技术?

不难发现&#xff0c;高薪项目经理岗位&#xff0c;往往对项目经理有技术要求。为什么会这样&#xff1f; 存在即合理&#xff0c;一定是现实中需要&#xff0c;项目实施过程中有必要。 想起了自己以前有次面试&#xff0c;二面是公司总经理&#xff0c;总经理说&#xff1a;…

git 可视化工具_Git的基本使用(二)

通过前文Git的基本使用(一)的学习&#xff0c;相信大家对如何将iOS项目通过Git传到GitHub账户上有了一个基本的了解&#xff0c;其过程是相对繁琐和容易出错的。本文将告诉大家借助工具来帮助我们实现这些操作&#xff0c;并对前文进行进一步补充。一、两个软件Visual Studio C…

小米8配哪个版本的MIUI?

小米8之前我是忠实的魅粉&#xff0c;魅族手机用过M8&#xff0c;MX3&#xff0c;note5&#xff0c;MX6 pro。 魅族真的是被联发科的cpu坑了&#xff0c;一核有难&#xff0c;八核围观。 入手小米8&#xff0c;miui是9&#xff0c;一路跟着系统自动更新&#xff0c;更新到了12。…

3D设计桌面云

榕力3D设计桌面云方案&#xff0c;为使用GPU高负载应用的设计师们提供强大支持&#xff0c;如3D建模、光线追踪、渲染计算等领域&#xff0c;带来极致流畅的3D设计桌面体验&#xff0c;同时提升工作效率、可管理性和安全性。 3D设计桌面云方案满足了工业客户在专业设计场景中的…

PDF图片文字识别

工具 adobe acrobat XI PRO 没有安装该软件的&#xff0c;需下载安装&#xff0c;有了此软件&#xff0c;pdf随意改&#xff0c;必备&#xff01; 步骤 1.打开pdf文件&#xff0c;点击工具---文本识别---在本文件中 2.选择“所有页面”&#xff0c;点击“编辑” 3.选择语言&a…

python中import的作用_python使用import报错是什么原因

在练习Python中package的相对导入时&#xff0c;即from . import XXX 或者from .. import XXX 有时会遇到这样两个错误&#xff1a;SystemError: Parent module not loaded, cannot perform relative import 和ValueError: attempted relative import beyond top-level packag…

win10卓越性能模式,提升电脑性能

Win10隐藏了一个电源模式“卓越性能”&#xff0c;是比“高性能”模式更强性能的电源模式。 这个模式开启后&#xff0c;电脑到底有没有变快呢&#xff1f;心理上是快了。 开启步骤 1.鼠标移到开始按钮图标上&#xff0c;别动&#xff01;&#xff01;&#xff01;&#xff…