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

Mysql连接查询时查询条件放在On之后和Where之后的区别

如果没有where条件,无论on条件表进行怎样的限制,表的每一行都至少会有一行的合成结果,对表行而言,若右表若没有对应的行,则右表遍历结束后b=FALSE,会用一行NULL来生成数据,而这个数据是多余的...所以对表进行过滤必须用where。...问题一错误的原因:由于在where条件中对右表限制,导致数据缺失(四班应该有个为0的结果) 问题二错误的原因:由于在on条件中对表限制,导致数据多余(其他班的结果也出来了,还是错的)。...on 后跟关联表(从表)的过滤条件where 后跟主表或临时表的筛选条件连接为例,主表的数据都会查询到,所以临时表中必定包含主表所有的字段,需要给主表加什么筛选条件,直接给临时表加效果相同) 总结...通过上面的问题现象和分析,可以得出了结论:在left join语句中,表过滤必须放where条件中,右表过滤必须放on条件中,这样结果才能不多不少,刚刚好。

1.5K10
您找到你想要的搜索结果了吗?
是的
没有找到

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

2.2.3、内连接(INNER JOIN JOIN) 内连接基于连接条件组合两个表中的数据。内连接相当于加了过滤条件的交叉连接。...(LEFT JOIN) 连接连接的简称,连接需要连接条件。...连接以左表的数据行为基础,根据连接匹配右表的每一行,如果匹配成功则将表和右表的行组合成新的数据行返回;如果匹配不成功则将表的行和 NULL 值组合成新的数据行返回。...右连接连接处理逻辑相反,右连接以右表的数据行为基础,根据条件匹配表中的数据。如果匹配不到表中的数据,则表中的列为 NULL 值。...使用括号更改计算顺序;⑦ WHERE 子句中的 OR 连接两个比较条件,过滤那些至少满足其中一个比较条件的记录行。

11510

知识点、SQL语句学习及详细总结

而第二种是先进行WHERE筛选条件之后,再进行GROUP BY 计算,显示更好。 1.3 多表连接查询 若一个查询同时涉及到两张或以上的表,则称为连接查询。...FROM 表1 [INNER] JOIN 表2 ON 12 FROM 表1 [INNER] JOIN 表2 ON 注意:连接条件中的连接字段必须是可比的,必须是语义相同的列...OUTER] JOIN 称为连接,含义是限制表2中的数据必须满足条件,但不管表1中的数据是否满足条件,均输出表1中的数据。...外连接:如果表A和表B进行连接,则结果为 记录集A + 记录集C;如果表A和表B进行右外连接,则结果为 记录集B + 记录集C。...= 'C001') 这个例子,连接查询是错误的,嵌套子查询中方法一在子查询中的否定是错误的!嵌套子查询中方法二在外查询中的否定是正确的!

1.9K20

Apache-Flink深度解析-JOIN 算子

- 交叉连接,计算笛卡儿积; INNER JOIN - 内连接,返回满足条件的记录; OUTER JOIN LEFT - 返回表所有行,右表不存在补NULL; RIGHT - 返回右表所有行,左边不存在补...NULL; FULL -  返回表和右表的并集,不存在一边补NULL; SELF JOIN - 自连接,将表查询时候命名不同的别名。...JOIN语法 JOIN 在SQL89和SQL92中有不同的语法,以INNER JOIN为例说明: SQL89 - 表之间用“,”逗号分割,链接条件和过滤条件都在Where子句指定: SELECT  ...将链接条件在ON子句指定,过滤条件WHERE子句指定,逻辑更为清晰: SELECT   a.colA,   b.colA FROM   tab1 AS a JOIN tab2 AS b ON a.id...实际上数据库本身的优化器会自动进行查询优化,在内联接中ON的联接条件WHERE的过滤条件具有相同的优先级,具体的执行顺序可以由数据库的优化器根据性能消耗决定。

5.4K31

关于Left join,你可能不知道这些......

这里算是抛砖引玉,感兴趣的同学可以看看这篇博客,进一步学习, https://www.cnblogs.com/qdhxhz/p/10897315.html 二、left join 的执行原理 接下来我们进一步看一下连接条件写在...如果没有where条件,无论on条件表进行怎样的限制,表的每一行都至少会有一行的合成结果,对表行而言,若右表若没有对应的行,则右表遍历结束后b=FALSE,会用一行NULL来生成数据,而这个数据是多余的...所以对表进行过滤必须用where。 我们再来看看实例,返回来研究这段话可能更好理解一些。 1.只有1个on条件 这里可以直接看第一部分中的例子。...由于对b表进行了限制,满足条件的只有一个,但是由于没有where条件,因此依然要以左表为准,又因为是一对一,所以输出还是表的记录数。更极端的,我们可以“清空”b表。 ?...对于条件写在on中的情况,又可以说,is null是否定匹配条件,is not null是肯定匹配条件。对于条件写在where中的,其实相比之下更容易理解,要看已有的where条件产生的结果是什么。

11.9K11

Apache-Flink深度解析-JOIN 算子

- 交叉连接,计算笛卡儿积; INNER JOIN - 内连接,返回满足条件的记录; OUTER JOIN LEFT - 返回表所有行,右表不存在补NULL; RIGHT - 返回右表所有行,左边不存在补...NULL; FULL - 返回表和右表的并集,不存在一边补NULL; SELF JOIN - 自连接,将表查询时候命名不同的别名。...JOIN语法 JOIN 在SQL89和SQL92中有不同的语法,以INNER JOIN为例说明: SQL89 - 表之间用“,”逗号分割,链接条件和过滤条件都在Where子句指定: SELECT...将链接条件在ON子句指定,过滤条件WHERE子句指定,逻辑更为清晰: SELECT a.colA, b.colA FROM tab1 AS a JOIN tab2 AS b ON a.id...实际上数据库本身的优化器会自动进行查询优化,在内联接中ON的联接条件WHERE的过滤条件具有相同的优先级,具体的执行顺序可以由数据库的优化器根据性能消耗决定。

1.7K30

⑧【MySQL】数据库查询:内连接、外连接、自连接、子查询、多表查询

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 内连接、外连接、自连接...内连接 —— INNER JOIN 连接查询 —— 内连接: 内连接: ①隐式内连接 SELECT 字段列表 FROM 表1,表2 WHERE 连接条件...; ②显示内连接 SELECT 字段列表 FROM...—— LEFT OUTER JOIN 连接查询 —— 连接: 外连接 —— 连接: ①查询表1所有数据,包含表1和表2交集部分的数据。...SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 连接条件...; -- 演示: -- 查询emp表所有数据,以及对应部门信息(dept表数据) -- 连接实现...连接条件...; -- 演示 -- 查询emp表员工 及其 所属领导的名字 -- 使用内连接 SELECT e1.

39080

学习SQLite之路(二)

< 检查操作数的值是否小于右操作数的值,如果是则条件为真。 (a < b) 为真。 >= 检查操作数的值是否大于等于右操作数的值,如果是则条件为真。 (a >= b) 不为真。...<= 检查操作数的值是否小于等于右操作数的值,如果是则条件为真。 (a <= b) 为真。 !< 检查操作数的值是否不小于右操作数的值,如果是则条件为真。 (a !< b) 为假。 !...> 检查操作数的值是否不大于右操作数的值,如果是则条件为真。 (a !> b) 为真。  ...它是否定运算符。 OR OR 运算符用于结合一个 SQL 语句的 WHERE 子句中的多个条件。 IS NULL NULL 运算符用于把某个值与 NULL 值进行比较。...SQLite AND OR运算符:AND 和 OR 运算符用于编译多个条件来缩小在 SQLite 语句中所选的数据。这两个运算符被称为连接运算符。

1.9K70

mysql学习总结04 — SQL数据操作

连接查询 关系:一对一,一对多,多对多 将多张表连到一起进行查询(会导致记录数行和字段数列发生改变),保证数据的完整性 分类: 交叉连接连接连接连接连接)和右外连接(右连接) 自然连接...内连接匹配的时候,必须保证匹配到才会保存 内连接因为不强制必须使用匹配条件(on)因此可以在数据匹配完成之后,使用where条件来限制,效果与on一样(建议使用on) mysql> select...10.3 外连接 outer join 记录数 >= x (主表的条目数); 字段数 = 第一张表字段数 + 第二张表字段数 连接连接)和右外连接(右连接) 外连接:outer join,按照某一张表作为主表...外连接分为两种:连接(left join),右外连接(right join) 连接表是主表 右连接:右表是主表 流程: 1、 确定连接主表:连接left join左边的表为主表;right...NULL 基本语法: 连接: left join on ; 右连接: right join on ; mysql> select * from

5.1K30

神奇的 SQL 之谓词 → 难理解的 EXISTS

我们可以用它们来表达一些这样的命题:“所有的 x 都满足条件 P” 或者 “存在(至少一个)满足条件 P 的 x ”,前者称为“全称量词”,后者称为“存在量词”,分别记作 ∀(A的下倒)、∃(E的倒)...∀ x P x = ¬ ∃ x ¬P(所有的 x 都满足条件 P =不存在不满足条件 P 的 x ) ∃ x P x = ¬ ∀ x ¬Px(存在 x 满足条件 P =并非所有的 x 都不满足条件 P)...NOT EXISTS ( SELECT * FROM tbl_student_class tsc WHERE ts.sno = tsc.sno );     全称量化 :习惯 “肯定 ⇔ 双重否定...我们需要转换下命题,将查询条件“所有科目分数都在 50 分以上” 转换成它的双重否定 “没有一个科目分数不满 50 分”,然后用 NOT EXISTS 来表示转换后的命题 -- 没有一个科目分数不满 50...分 SELECT DISTINCT sno FROM tbl_student_score tss1 WHERE NOT EXISTS -- 不存在满足以下条件的行 ( SELECT * FROM

1.8K21

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

where 关联条件; ---- 外连接—outer join(outer可以省略) 连接: 语法: select * from 表1 left outer join 表2 on 关联条件...stu s ON c.cid=s.cno; 2.隐式内连接 SELECT *FROM classes c,stu s WHERE c.cid=s.cno; ---- 多表查询之外连接 连接...如果是为了筛选右表的数据,来指定什么样的右表数据与表匹配,那就使用on条件 如果是为了对整个临时表做筛选,那就使用where条件 如果是为了筛选表的数据,也要使用where条件,因为表的数据必定存在于临时表中...JOIN中 如果是为了筛选整个右表数据,来指定什么样的右表数据与表匹配,那就使用on条件 如果是为了对整个临时表做筛选,那就使用where条件 如果是为了筛选表的数据,也要使用where条件...表1的别名,表2的别名 from 表1 别名 inner|left|right join 表2 别名 on 连接条件 where 筛选条件; 同时会删除两张表中满足条件的数据: DELETE e,d

1.2K10

优化查询性能(二)

可以通过在WHERE子句或ON子句条件前使用%NOINDEX关键字来防止使用索引。 应该为联接中指定的字段(属性)编制索引。外部联接从表开始,然后查看右表;因此,应该为右表中的字段建立索引。...应该索引在WHERE子句equal条件中指定的字段。 可能希望索引在WHERE子句范围条件中指定的字段,以及GROUP BY和ORDER BY子句中指定的字段。...SQL索引分析器显示“正在收集SQL语句...”当计票进行时,然后“完成!”当清点完毕后。SQL语句分为三类进行计数:缓存查询计数、类方法计数和类查询计数。...带离群值索引的查询:此选项标识当前名称空间中具有离群值的所有查询,并确定是否定义了支持该离群值的索引。它将可用于支持离群值的索引从0(不存在索引)到4(索引完全支持离群值)进行排序。...可以使 %NOINDEX条件级别提示指定对特定条件使用索引的例外情况。 %NOINDEX提示放在每个不应使用索引的条件之前。例如,WHERE %NOINDEX hiredate < ?

2.2K10

03-面试必会-Mysql篇

Mysql 查询语句的书写顺序 Select [distinct ] from 表 1 [ join 表 2 on ] where <where 条件...Mysql 如何实现多表查询 MYSQL 多表查询主要使用连接查询 , 连接查询的方式主要有 : 内连接 隐式内连接 : Select 字段 From 表 A , 表 B where 连接条件 显式内连接...: Select 字段 From 表 A inner join 表 B on 连接条件连接 连接 : Select 字段 From 表 A left join 表 B on 连接条件 右外连接...MYSQL 内连接和外连接的区别 ? 内连接:只有两个元素表相匹配的才能在结果集中显示。 外连接连接: 左边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。...= 或 not in 或 等否定操作符会导致索引失效 尽量避免使用 or 来连接条件 or 关键词二边 , 只要有一个条见不满足索引, 就会全表扫描 多个单列索引并不是最佳选择

20110

SQL 多表联合查询的几种方式

[ParentID] 外连接连接只返回满足连接条件的数据行,外连接不只列出与连接条件相匹配的行,而是列出表(连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。...join是会生成一张临时表,并返回给用户 where条件是针对最后生成的这张临时表进行过滤,过滤掉不符合where条件的记录 on条件是对left join的右表进行条件过滤,但依然返回表的所有行,...右表中没有的补为NULL on条件中如果有对表的限制条件,无论条件真假,依然返回表的所有行,但是会影响右表的匹配值。...where条件中添加,不能放到on后面 2.对右表添加条件限制需放到on后面,在where条件中添加会有数据行数差异出现问题。...CROSS JOIN PM_ACT_RLS 注意:带有where条件的子句,往往会先生成两个表行数乘积的数据表,然后从根据where条件从中选择。

72820

Java面经——数据库

delete可根据条件删除表中满足条件的数据,如果不指定where子句,那么删除表中所有记录。 delete语句不影响表所占用的extent,高水线(high watermark)保持原位置不变。...12.内连接连接、右连接、全连接的区别 内连接: SELECT * FROM table_a INNER JOIN table_b ON a = b 把表连接时table_a与table_b之间匹配的数据行查询出来...(外)连接: SELECT * FROM table_a LEFT JOIN table_b ON a = b 查询结果以table_a表数据为主,无论是否满足ON的条件,均会查询出表(table_a...)的数据,而右表(table_b)只有满足ON的条件才会被查询出,不满足表的数据项用NULL填充。...)的数据,而表(table_a)只有满足ON的条件才会被查询出,不满足右表的数据项用NULL填充。

1.3K60

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券