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

SQL - onwhere的区别

onwhere的区别 onwhere后都表示查询条件,它们的区别如下: 1、on只能用于连接查询(内连接、外连接、交叉连接),在其他情况下使用on会报错,比如: 1 select* from test...on id = 1; -- 报错,不能在普通查询里使用on,需要使用where 2、连接查询会产生一张中间表(临时表),on是在生成中间表时使用的条件;而where是在中间表生成后对中间表进行过滤使用的条件...on test1.id = test2.id and test1.id = 1; select* from test1 left join test2 on test1.id = test2.id where...比如: 1 2 select* from test1 left join test2; -- 报错,没有使用on select* from test1 left join test2 where test1....id = test2.id; -- 报错,没有使用on 4、在内连接交叉连接中,单独使用onwhere对结果集没有区别。

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

SQL语句中 where on 的区别

最近面试时候碰到一道题,关于数据库左连接连接中andwhere的区别,网上看了看资料,加深一下印象,大家也可以看看。...先说结论: 在使用left join左连接时,on andon where条件的区别如下: 1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。...2、where条件是在临时表生成好后,再对临时表进行过滤的条件。...在使用inner join内连接时,不管是对左表还是右表进行筛选,on andon where都会对生成的临时表进行过滤。...where的过滤作用就出来了,右连接的原理是一样的。到这里就真相大白了:inner join中onwhere没区别,右连接连接就不一样了。 本文转载自: SQL语句中where on的区别?

3K20

sql连接查询中on筛选与where筛选的区别

连接查询语法中,另人迷惑首当其冲的就要属on筛选where筛选的区别了, 在我们编写查询的时候, 筛选条件的放置不管是在on后面还是where后面, 查出来的结果总是一样的, 既然如此,那为什么还要多此一举的让...sql中的连接查询分为3种, cross join,inner join,outer join , 在 cross joininner join中,筛选条件放在on后面还是where后面是没区别的...,极端一点,在编写这两种连接查询的时候,只用on不使用where也没有什么问题。...因此,on筛选where筛选的差别只是针对outer join,也就是平时最常使用的left joinright join。 来看一个示例,有两张数据表,结构和数据如图所示 表main ?...总的来说,outer join 的执行过程分为4步 1、先对两个表执行交叉连接(笛卡尔积) 2、应用on筛选器 3、添加外部行 4、应用where筛选器 就拿上面不使用where筛选器的sql来说,执行的整个详细过程如下

3.2K80

图解sql中的whereon的区别

经常会有读者有疑问,sql中关联条件是放where后面好,还是on后面好?今天就通过图形的方式给大家来解决这个问题。 之前两章我们通过图解SQL的执行顺序JOIN的原理知道了这两步的执行过程。...WHERE都是过滤筛选条件的,那么能不能将WHERE后面的条件 a.城市='广州' 放在 ON条件后面呢?...我们还是以上一章的例题来讲解: 因为在sql的内连接阶段,左表(a)右表(b)通过笛卡尔积生成的虚表VT-A1, VT-A1 在经过内连接后会将虚表VT-A1中符合条件 (a.CustomerID=b.CustomerID...这是因为在执行sql连接的时候,是先执行的ON后面的所有条件。...结论 1、对于内连接(inner join),sql过滤条件放在where或者on后面没有区别 2、对于左右连接(left/right join),sql过滤条件放在where或者on后面有很大的区别。

8710

sql连接查询嵌套查询_sql子查询连接查询

select 完整语法: 现在一共有三张表,分别为:subject、grade、result subject 表: grade 表: result 表: 连接查询:有左连接、右连接、内连接、外连接...、自连接…....【例一】:查询科目所属的年级(科目名称、年级名称) sql 语句: 结果: 图片 =================================== 【例二】:查询 JAVA第一学年 课程成绩排名前十的学生...并且分数要大于80 的学生信息(学号、姓名、课程名称、分数) sql 语句: 结果: =================================== 【例三】:查询数据库结构-1 的所有考试结果...现在有一张包含子父关系的,名为 category 的数据表: 我们把这一张表拆分成两张表: 执行 sql 语句: 结果: 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn

4.4K10

SQL中JOIN时条件放在WhereOn的区别

背景 SQL中JOIN子句是用于把来自两个或多个表的数据连接起来,在这个过程中可能会添加一些过滤条件。昨天有小伙伴问,如下图的这两种SQL写法查询结果是否会一样?(好像这是某一年阿里的面试题) ?...案例 1、创建测试数据库表并且插入用户测试的数据。...结果验证 将上面的两个表Inner JoinLeft Join,过滤条件分别放在onwhere中。...结论:Inner Join时过滤条件放在onwhere中返回结果一致。...结论:Left Join时过滤条件放在onwhere中返回结果不一致。 原因分析 可以这么理解,当两张表在Left Join时,会生成一张连接临时表,然后再将这张连接临时表返回给用户。

3.3K10

神奇的 SQL 之扑朔迷离 → ON WHERE,好多细节!

认为 ON WHERE 的生效时机有待商榷;此时楼主开始了欠大家的账 神奇的 SQL 之 联表细节 → MySQL JOIN 的执行过程(二)中对联表算法进行了补充,详细介绍了 MRR BKA...,但还是未介绍 ON WHERE,楼主依旧欠着大家的账,内心涌满了愧疚   咳咳,闲话不多说,进入我们今天的正题 SQL 执行顺序   SQL 的执行顺序相信大家多少有所了解,上网一搜也很快就能找到答案...unknown 的记录都会过滤掉(更多详情:神奇的 SQL 之温柔的陷阱 → 三值逻辑 与 NULL !)...,关于 ON WHERE 的生效时机,你清楚了吗 ?...神奇的 SQL 之 ICP → 索引条件下推     对相关概念不了解的可以去对应的博客查阅   2、ON WHERE     两者好区分,也容易混淆,他们在概念上就做了明确区分,但是又可以做概念之外的事

88520

学习日志——SQL几种表连接连接效率

连接 交叉连接查询(cross join) 多个表联合查询,这种方式如果不添加where条件的话会产生笛卡儿积 但是添加了where条件的话又相当于inner join 内连接 SELECT *...FROM 表A,表B where A.xx=B.xx 内连接(inner join ) 这种就相当于上面交叉连接添加了where条件。...也就是交集 SELECT * FROM 表A inner join 表B on A.xx=B.xx 外连接 (outer join) 外连接分为 left join right join。...同时:inner join > outer join > full join 相关资料 图解 SQL 中各种连接 JOIN 深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接 --...-- 标题:学习日志——SQL几种表连接连接效率 作者:海加尔金鹰 地址:https://www.hjljy.cn/articles/2019/05/30/1559231642979.html

2K10

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

探究 利用廖雪峰提供的在线工具,利用student表classes表我们做一个测试, student表 classes表 1.统计每个班级中女生的数量 问题SQL select a.name,...P2(LT,RT) 其中P1是on过滤条件,缺失则认为是TRUE,P2是where过滤条件,缺失也认为是TRUE,该语句的执行逻辑关键的执行流程可以描述为: FOR each row lt in LT...on 后跟关联表(从表)的过滤条件,where 后跟主表或临时表的筛选条件(左连接为例,主表的数据都会查询到,所以临时表中必定包含主表所有的字段,需要给主表加什么筛选条件,直接给临时表加效果相同) 总结...通过上面的问题现象分析,可以得出了结论:在left join语句中,左表过滤必须放where条件中,右表过滤必须放on条件中,这样结果才能不多不少,刚刚好。...SQL 看似简单,其实也有很多细节原理在里面,一个小小的混淆就会造成结果与预期不符,所以平时要注意这些细节原理,避免关键时候出错。

1.5K10

sql sever分组查询连接查询

分组查询 select 查询信息 from 表名 where 条件 group by 按照列分组(可多个 ,隔开) order by 排序方式 (查询信息如果列名聚合函数同时出现,要么在聚合函数中出现...,要么就使用分组进行查询) having 条件    分组筛选(一般group by连用,位置在其后) where:用来筛选from子句指定的操作所产生的行 group by:用来分组where子句输出...having:用来从分组的结果中筛选行 1.分组查询是针对表中不同的组分类统计输出的 2.having子句能够在分组的基础上,再次进行筛选 3.在SQL语句中使用次序,where-->group by...~~~~~~~~~~~★房上的猫★~~~~~~~~~~ 表连接 select 列 from 表1,表2 where 条件(表1.主键列=表2.外键列) 内连接(inner join) select...列 from 表1 inner join 表2 on 条件(表1.主键列=表2.外键列) as也可以为表赋别名 外连接(两外连接主表位置相反)      左外连接(left join) select 列

2.2K50

Studio 3T中的新功能:支持SQL SELECT DISTINCT,WHERE子句中的JSON对象及更多

Studio 3T的2019年第一个版本侧重于对SQL Query的改进,这是您最常用的功能之一,此外还有其他用户请求的UX优化: 添加了SELECT DISTINCT支持 使用JSON对象的WHERE...子句中的扩展SQL语法 能够在更改字段类型时保留值 更好的入门功能建立在功能新的交互之上 SQL查询|支持SQL SELECT DISTINCT 我们已将SQL SELECT DISTINCT添加到支持的...并将DISTINCT与JOIN,SELECT,GROUP BY,HAVINGORDER BY语句相结合。 在SQL查询文档中阅读有关SELECT DISTINCT及其技术限制的更多信息。...SQL查询| WHERE子句中的JSON对象 除了SELECT DISTINCT之外,您现在还可以通过两种方式在SQL WHERE子句中使用JSON对象: WHERE JSONor WHERE identifier...功能新的交互 我们还添加了功能新增的图库,以便为新用户当前用户提供更好的入职体验。在应用程序中检查它!

3.4K20

SQL 中的 MIN MAX 以及常见函数详解及示例演示

SQL MIN() MAX() 函数 SQL中的MIN()函数MAX()函数用于查找所选列的最小值最大值,分别。以下是它们的用法示例: MIN() 函数 MIN()函数返回所选列的最小值。...示例: 查找Products表中的最高价格: SELECT MAX(Price) FROM Products; 语法 MIN()MAX()函数的一般语法如下: SELECT MIN(column_name...) FROM table_name WHERE condition; SELECT MAX(column_name) FROM table_name WHERE condition; 演示数据库 以下是示例中使用的...SQL COUNT() 函数 SQL中的COUNT()函数用于返回符合指定条件的行数,通常用于统计行的数量。...SQL SUM() 函数 SQL中的SUM()函数用于返回数值列的总和,通常用于计算某一列的总值。

38300
领券