首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在where子句中包含null的情况下,记录仍从左连接中删除

在where子句中包含null的情况下,记录仍从左连接中删除的原因是因为null在数据库中表示缺失或未知的值,它与其他任何值都不相等,包括自身。在进行比较操作时,如果其中一个操作数为null,结果将始终为未知,即不确定是否满足条件。

左连接是一种连接操作,它返回左表中的所有记录,同时返回与右表中匹配的记录。当在where子句中包含null时,由于null与其他值的比较结果为未知,因此无法确定是否满足连接条件。根据连接操作的定义,如果连接条件不满足,则左表中的记录将不会与右表中的记录匹配,因此会从左连接的结果中删除。

举例来说,假设有两个表A和B,A表中有一列a,B表中有一列b。如果我们执行以下查询:

SELECT * FROM A LEFT JOIN B ON A.a = B.b WHERE B.b IS NULL;

其中B.b IS NULL表示在where子句中包含null的情况。这个查询的目的是找出在A表中存在但在B表中不存在的记录。由于null与任何值的比较结果为未知,所以无法确定哪些记录满足连接条件。因此,无法确定哪些记录在B表中不存在,这些记录将会被从左连接的结果中删除。

腾讯云相关产品和产品介绍链接地址:

  • 云数据库 TencentDB:https://cloud.tencent.com/product/tencentdb
  • 云服务器 CVM:https://cloud.tencent.com/product/cvm
  • 云原生应用引擎 TKE:https://cloud.tencent.com/product/tke
  • 人工智能平台 AI Lab:https://cloud.tencent.com/product/ailab
  • 物联网平台 IoT Hub:https://cloud.tencent.com/product/iothub
  • 移动开发平台 MDP:https://cloud.tencent.com/product/mdp
  • 云存储 COS:https://cloud.tencent.com/product/cos
  • 区块链服务 BaaS:https://cloud.tencent.com/product/baas
  • 元宇宙服务 Metaverse:https://cloud.tencent.com/product/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL-多表操作

此时可以使用WHERE完成条件限定,效果与ON一样。但由于WHERE是限定已全部查询出来记录,那么在数据量很大情况下,此操作会浪费很多性能,所以此处推荐使用ON实现内连接条件匹配。...它用于返回关键字(LEFT JOIN)表中所有的记录,以及右表符合连接条件记录。当某行记录在右表没有匹配记录时,右表相关记录将会设为NULL。...它用于返回连接关键字(RIGHT JOIN)右表(主表)中所有的记录,以及表(表)符合连接条件记录。 当右表某行记录没有匹配记录时,相关记录将设为空值。...含有查询句中查询必须书写在圆括号()内。 ➢SQL语句首先会执行查询语句。 ➢然后再将返回结果作为外层SQL语句过滤条件。...判断指定条件是否查询语句返回结果集中。 然后根据比较结果完成相关需求操作。 行查询 当查询结果是一条包含多个字段记录(一行多列)时,称为行查询。

3.2K20

MySQL数据篇之多表操作-----保姆级教程

--返回两张表都满足条件部分记录 多表查询之外连接 连接 注意 右外连接 注意 小总结 可以update语句中使用inner join和left join delet语句中使用join语句...,有匹配上,就在对应行后面加上右表数据,没有匹配上时候,也要在对应行后面加上右表数据,但是数据都为null 这样对应数据全部通过on条件匹配完成之后,就会生成一张临时表,这个临时表包含字段就是...---- 右外连接 恰与连接相反,返回右表所有行,如果右表中行在没有匹配行,则结果列返回空值。...,那就使用where条件 如果是为了筛选右表数据,也要使用where条件(因为右表数据必定存在于临时表,所以筛选右表和筛选整个临时表一样) ---- 可以update语句中使用inner...=2; ---- delet语句中使用join语句—替代级联删除 多表删除: delete 表1别名,表2别名 from 表1 别名,表2 别名 where 连接条件 and 筛选条件; delete

1.2K10

《深入浅出SQL》问答录

NULL是未定义值。它不等于0,也不是空值。值可以是NULL,但绝非等于NULL。 没有INSERT语句中被赋值列默认为NULL。...有办法确定外键已经连接到父键了吗? A:外键为NULL,表示父表没有相符主键。但我们可以确认外键包含有意义、已经存储父表值,请通过约束实现。...数据模式:一对多 A表某一条记录可以对应到B表多条记录,但B表一条记录只能对应A表某一条记录。 ? 连接线应该带有黑色箭头来表示一对多连接关系。 ? 数据模式:多对多 ?...,所以查询里只会返回单一值,特定行和列交叉点,这一个值将是WHERE句中比对数据列条件。...外联接一定会提供数据行,无论该行能否另一个表找出相匹配行。 外联接结果为NULL表示右表没有找到与表相符记录。 ? 具体流程概览(图有点小瑕疵): ?

2.9K50

Oracle数据库增删改查

,部门名称,部门位置,薪资等级 第一种内连接查询:FROM 子句中查询多个数据来源,WHERE句中去掉笛卡尔积 第二种内连接查询:使用INNER JOIN 连接数据来源,ON关键字之后去掉笛卡尔积...WHERE子句GROUP BY 子句之前执行,不能在WHERE句中使用统计函数 HAVING子句GROUP BY 子句之后执行,可以HAVING子句中对统计函数进行过滤 查询 查询就是讲一个...WHERE查询就是WHERE句中继续使用查询,就是讲一个查询结果放在WHERE句中再和另外一个字段进行过滤 DEMO:查询出低于平均工资雇员信息 HAVING子句是对分组统计函数进行过滤子句...条件,表示更新所有的记录,所以需要慎用 2、oracle判断数据库为空,使用IS NULL,不为NULL是IS NOT NULL 3、同时更新多个字段时候需要把更新字段列表和查询出来字段列表顺序类型个数要保持一致...2、delete删除数据时候,是现将数据保存到内存,可以回滚,而truncate删除数据不能够撤销,直接硬盘删除,所以慎用 3、truncate删除不可以带WHERE条件 发布者:全栈程序员栈长

1.5K10

【MySQL系列】- MySQL执行计划一览

为了向后兼容,仍然可以识别该语法,但现在默认启用分区输出,因此PARTITIONS关键字是多余,已弃用。使用它会导致一个警告,并且MySQL 8.0EXPLAIN语法删除了它。...「关联/相关子查询」:查询执行依赖于外部查询。多数情况下查询 WHERE句中引用了外部查询包含列。 ❞ id SELECT查询系列号,可以为NULL。...那什么情况下id相同,什么情况下不同呢? 单表、连接查询(内连、连、右连)语句中,id相同 单表就不用过多说了,就一张表,id就一个肯定是相同。...对于连接查询来说,一个 SELECT关键字后边 FROM 子句中可以跟随多个 表,所以连接查询执行计划,每个表都会对应一条记录,但是这些记录 id 值都是相同,比如: EXPLAIN SELECT...有查询语句id可能相同也可能不同 为什么有可能相同也有可能不同,那是因为查询优化器觉得这条包含查询语句可以使用连接查询进行优化, 就会对这条语句进行重写为连接查询,所以想知道查询优化器是否重写了查询语句

72220

MySQL常用SQL语句:插入更新删除查询

删除 (1) 删除某行记录 delete from student where sno = '218005' (2) 删除所有记录 delete from student 或 delete...数学角度讲就是求两个表交集,笛卡尔积角度讲就是笛卡尔积挑出ON子句条件成立记录。...外连接:分为连接,右外连接 ,全外连接 连接 以JOIN关键字左边表为基准,没有匹配记录则置NULL。...笛卡尔积角度讲,就是先从笛卡尔积挑出ON子句条件成立记录,然后加上剩余记录 #两个表 select * from student left join sc on student.sno...笛卡尔积角度讲就是笛卡尔积挑出ON子句条件成立记录,然后加上剩余记录,最后加上右表剩余记录

5.4K30

【MySQL 系列】MySQL 语句篇_DQL 语句

连接连接处理逻辑相反,右连接以右表数据行为基础,根据条件匹配数据。如果匹配不到数据,则列为 NULL 值。...使用括号更改计算顺序;⑦ WHERE句中 OR 连接两个比较条件,过滤那些至少满足其中一个比较条件记录行。...employees WHERE last_name like "%ok%"; # 查询 LasrName 包含 ok 员工 2.3.7、运算符 NULL MySQL NULL...查询经常用在 WHERE句中。 例如,我前面提到操作符 EXISTS 就属于查询范畴。...但大多数情况下,使用 IN 自查询性能不如使用操作符 EXISTS 性能。最后,还存在一种 FROM 中使用查询方式,即当一个查询位于 FORM 子句中时,这个子查询被称为派生表。

13410

Oracle高级查询-imooc

注意:select列表中所有未包含在组函数列都应该包含在GROUP BY子句中;包含在GROUP BY子句中列不必包含在SELECT列表。...select列表,而未包含于组函数列都必须包含在GROUP BY子句中。...2000; where和having区别:不能在where句中使用组函数,可以having子句中使用组函数。...e.sal between s.losal and s.hisal 3、外连接 通过外连接,把对于连接条件不成立记录,仍然包含在最好结果,分为连接和右外连接。...连接:当条件不成立时候,等号左边表仍然被包含。右外连接:当条件不成立时候,等号右边表仍然被包含。 特别注意连接和右外连接写法,位置与名字相反,符号用‘(+)’表示。

2K40

MySQL 数据库基础知识(系统化一篇入门)

但是,有时还需要在返回查询结果不仅包含符合条件数据,而且还包括表、右表或两个表所有数据,此时我们就需要使用外连接查询。外连接又分为(外)连接和右(外)连接。...RIGHT JOIN 右(外)连接:返回包括右表所有记录符合连接条件记录。...关键字左边表被称为表,关键字右边表被称为右表. 7.4.3.1、外链接查询 连接结果包括LEFT JOIN子句中指定所有记录,以及所有满足连接条件记录。...如果某条记录在右表不存在则在右表显示为null。...如果右表某条记录没有匹配,则表将返回null

3.4K60

SQL 语法速成手册

删除指定数据 DELETE FROM user WHERE username = 'robot'; 清空表数据 TRUNCATE TABLE user; 查询数据 SELECT 语句用于数据库查询数据...可以 WHERE句中使用操作符 运算符 描述 = 等于 不等于。注释: SQL 一些版本,该操作符可被写成 !...= 'Kids Place'; IN 和 BETWEEN IN 操作符 WHERE句中使用,作用是指定几个特定值任选一个值。...内连接又称等值连接,使用 INNER JOIN 关键字。没有条件语句情况下返回笛卡尔积。 自连接可以看成内连接一种,只是连接表是自身而已。...外连接返回一个表所有行,并且仅返回来自次表满足连接条件那些行,即两个表列是相等。外连接分为连接、右外连接、全外连接(Mysql 不支持)。 连接就是保留表没有关联行。

17.1K40

SQL常见面试题总结

user where userName = 'admin' and password = '123' -- 多表关联查询 -- 连接 left join 或 left outer join 连接包含...=course.ID -- 右连接 右外连接包含right join右表所有行,如果某行在右表没有匹配,则结果对应部分全部为空(NULL)。...请说出sql语句中 left join ,inner join 和right join区别 left join(左联接) :返回包括所有记录和右表中联结字段相等记录 right join...(右联接) :返回包括右表所有记录表中联结字段相等记录 inner join(等值连接) :只返回两个表中联结字段相等行 分库分表问题如何实现分布式全局唯一ID 分库分表环境...服务器、MySQL也会崩溃,也有可能遭受入侵,数据有可能被删除。只有为最糟糕情况做好了充分准备,才能够事后快速地灾难恢复。企业最好把备份过程作为服务器一项日常工作。

2.3K30

【MySQL】多表联合查询、连接查询、查询「建议收藏」

连接查询 内连接查询是最常见连接查询,内连接查询可以查询两张或两张以上表 内连接:[inner] join:取出每一条记录,去右表与所有的记录进行匹配: 匹配必须是某个条件与右表相同最终才会保留结果...以某张表为主,取出里面的所有记录, 然后每条与另外一张表进行连接: 不管能不能匹配上条件,最终都会保留: 能匹配,正确保留; 不能匹配,其他表字段都置空NULL。...,正确保留; 若不能匹配,字段都置NULL。...【3】查询 通常我们查询SQL嵌套查询,称为查询。...例:查询成绩大于80学生所有信息, 先在查询查出成绩大于80结果集,然后将原成绩表成绩与结果集进行比较,如果存在,就输出这条学生记录

4.2K20

SQL 语法速成手册

删除指定数据 DELETE FROM user WHERE username = 'robot'; 清空表数据 TRUNCATE TABLE user; 查询数据 SELECT 语句用于数据库查询数据...可以 WHERE句中使用操作符 运算符 描述 = 等于 不等于。注释: SQL 一些版本,该操作符可被写成 !...= 'Kids Place'; IN 和 BETWEEN IN 操作符 WHERE句中使用,作用是指定几个特定值任选一个值。...内连接又称等值连接,使用 INNER JOIN 关键字。没有条件语句情况下返回笛卡尔积。 自连接可以看成内连接一种,只是连接表是自身而已。...外连接返回一个表所有行,并且仅返回来自次表满足连接条件那些行,即两个表列是相等。外连接分为连接、右外连接、全外连接(Mysql 不支持)。 连接就是保留表没有关联行。

16.8K20

SQL语法速成手册,建议收藏!

删除指定数据 DELETE FROM user WHERE username = 'robot'; 清空表数据 TRUNCATE TABLE user; 查询数据 SELECT 语句用于数据库查询数据...可以 WHERE句中使用操作符 运算符 描述 = 等于 不等于。注释: SQL 一些版本,该操作符可被写成 !...= 'Kids Place'; IN 和 BETWEEN IN 操作符 WHERE句中使用,作用是指定几个特定值任选一个值。...内连接又称等值连接,使用 INNER JOIN 关键字。没有条件语句情况下返回笛卡尔积。 自连接可以看成内连接一种,只是连接表示自身而已。...外连接返回一个表所有行,并且仅返回来自次表满足连接条件那些行,即两个表列是相等。外连接分为连接、右外连接、全外连接(Mysql 不支持)。 连接就是保留表没有关联行。

8K30

MySQL基础SQL编程学习1

(3) NOT IN 该式根据使用关键字是包含在列表内还是排除列表外,指定表达式搜索,搜索表达式可以是常量或列名,而列名可以是一组常量,但更多情况下查询 (4) NOT LIKE 匹配显示不满足条件行...不同 SQL JOIN 分类: INNER JOIN (内连接):如果表中有至少一个匹配,则返回行 OUTER JOIN (外连接): LEFT JOIN(连接):即使右表没有匹配,也表返回所有的行...RIGHT JOIN(右连接):即使没有匹配,也右表返回所有的行 FULL JOIN(全连接):只要其中一个表存在匹配,则返回行 INNER JOIN(内连接-笛卡尔积) 描述:SQL INNER...RIGHT JOIN 关键字 描述:RIGHT JOIN 关键字右表(table2)返回所有的行,即使表(table1)没有匹配。如果没有匹配,则结果为 NULL。...连接与右连接左右指的是以两张表哪一张为基准它们都是外连接

4.6K20

Mysql 快速指南

示例 删除指定数据 DELETE FROM user WHERE username = 'robot'; 清空表数据 TRUNCATE TABLE user; 查询数据 要点 SELECT 语句用于数据库查询数据...可以 WHERE句中使用操作符 运算符 描述 = 等于 不等于。注释: SQL 一些版本,该操作符可被写成 !...WHERE 和 HAVING 可以相同查询。 HAVING vs WHERE WHERE 和 HAVING 都是用于过滤。 HAVING 适用于汇总记录;而 WHERE 适用于单个记录。...内连接又称等值连接,使用 INNER JOIN 关键字。没有条件语句情况下返回笛卡尔积。 自连接可以看成内连接一种,只是连接表是自身而已。...外连接返回一个表所有行,并且仅返回来自次表满足连接条件那些行,即两个表列是相等。外连接分为连接、右外连接、全外连接(Mysql 不支持)。 连接就是保留表没有关联行。

6.8K20

MySQL 查询优化源码分析

简介:查询定义一个完整查询语句中包含查询块被称为查询。...本篇将会结合源码介绍MySQL针对子查询几种优化策略。 1 查询定义 查询定义一个完整查询语句中包含查询块被称为查询。...与普通join会将表和右表记录连接在一起不同,semijoin/antijoin仅关心右表是否存在可以与记录连接记录,而返回记录。...fix_fields()过程依次里往外。仅支持IN和EXISTS查询,且内层sj_candidates为空。...prepare阶段IN->EXISTS转换主要是将IN语法表达式与右表达式中子查询输出列对应组合,加入到查询WHERE或者HAVING条件SQL语义上表示为: outer_expr

2K20

MySQL必知必会分页whereupdatelimit字符串截取order by排序ength和char_lengthreplace函数1 键2 数据库事务ACID3 视图4 删除连接

4 删除 drop直接删掉表 truncate删除数据,再插入时自增长id又从1开始 delete删除数据,可以加where字句 (1) DELETE 每次删除一行,并同时将该行删除操作作为事务记录在日志中保存...,以便回滚 TRUNCATE TABLE 一次性地删除所有的数据,并不把单独删除操作记录记入日志保存,删除行是不能恢复,删除过程不会激活与表有关删除触发器。...(8) 没有备份情况下,谨慎使用 drop 与 truncate 要删除部分数据行采用delete且注意结合where来约束影响范围。...JOIN 按照功能大致分为如下三类: INNER JOIN(内连接,或等值连接):获取两个表字段匹配关系记录。 LEFT JOIN(连接):获取表所有记录,即使右表没有对应匹配记录。...RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使表没有对应匹配记录

2.1K140

MariaDB 连接查询与查询

子句在这里作为过滤条件,指明只有两个表s_id字段值相等时候才符合连接查询条件.返回结果可以看到,显示记录是由两个表不同列值组成记录.内连接(INNER JOIN)实例: lyshark...◆外连接查询◆外连接查询将查询多个表相关联行,内连接时,返回查询结果集合仅是符合查询条件和连接条件行.但有时候需要包含没有关联数据,即返回查询结果集合不仅包含符合连接条件行,而且还包括表...(连接连接),右表(右外连接或右连接),或两个连接表(全外连接)所有数据行,外连接分为连接右外连接: ● LEFT JOIN(连接):返回包括所有记录和右表连接字段相等记录.... ● RIGHT JOIN(右连接):返回包括右表所有记录连接字段相等记录....(lEFT JOIN)连接结果包括LEFT OUTER子句中指定所有行,而不仅仅是连接列所匹配行,如果某行在右表没有匹配行,则在相关联结果,右表所有选择列表列均为空值.如下:

4.4K30

MySQL数据库面试题(2020最新版)必知必会

4 删除 drop直接删掉表 truncate删除数据,再插入时自增长id又从1开始 delete删除数据,可以加where字句 (1) DELETE 每次删除一行,并同时将该行删除操作作为事务记录在日志中保存...,以便回滚 TRUNCATE TABLE 一次性地删除所有的数据,并不把单独删除操作记录记入日志保存,删除行是不能恢复,删除过程不会激活与表有关删除触发器。...由于 TRUNCATE TABLE 不记录在日志,所以它不能激活触发器 连接 真正应用中经常需要从多个数据表读取数据。...**LEFT JOIN(连接):**获取表所有记录,即使右表没有对应匹配记录。...RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使表没有对应匹配记录

1.1K10
领券