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

图解sqlwhere和on区别

经常会有读者有疑问,sql关联条件是放where后面好,还是on后面好?今天就通过图形方式给大家来解决这个问题。 之前两章我们通过图解SQL执行顺序和JOIN原理知道了这两步执行过程。...我们还是以上一章例题来讲解: 因为在sql内连接阶段,左表(a)和右表(b)通过笛卡尔积生成虚表VT-A1, VT-A1 在经过内连接后会将虚表VT-A1符合条件 (a.CustomerID=b.CustomerID...这是因为在执行sql左连接时候,是先执行ON后面的所有条件。...表)未关联上其它所有数据都要添加到虚表VT-B1-1,所以在执行完LEFT动作之后,它结果变成了虚表VT-B2。...结论 1、对于内连接(inner join),sql过滤条件放在where或者on后面没有区别 2、对于左右连接(left/right join),sql过滤条件放在where或者on后面有很大区别。

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

SQL - on和where区别

on和where区别 on和where后都表示查询条件,它们区别如下: 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....id = test2.id; -- 报错,没有使用on 4、在内连接和交叉连接,单独使用on和where对结果集没有区别。...test1.id = test2.id; 附 以上语句都是在MySQL5.0情况下测试

1.6K20

sql过滤条件放在on和where区别

最近遇到相关业务,想揪一下sqlleft join 或者right join 或者inner join on和where区别,想了解这个首先我们要了解两个基础知识。...1.join三种连接方式区别: left join(左联接) 返回包括左表所有记录和右表中联结字段相等记录 right join(右联接) 返回包括右表所有记录和左表中联结字段相等记录...笛卡尔积:两个[集合]*X*和*Y*笛卡尓积(Cartesian product),又称[直积],表示为*X* × *Y*,第一个对象是*X*成员而第二个对象是*Y*所有可能[有序对]其中一个成员...| 6 | 8 | 111 | | 7 | 11 | 222 | | 8 | 13 | 12 | +----+------+--------+ 下面我们来执行sql...和 where 是没有区别的 下面我们来执行sql语句看看 left join select a.

3.8K10

Mybatis动态sql语句 if标签 where标签 foreach标签 sql标签

Mybatis动态sql语句 首先写个方法 /** * 跟进传入参数条件查询 * @param user 查询条件:有可能有用户名,有可能有性别,也有可能有地址,还有可能都有...) SELECT * FROM USERS WHERE username LIKE ‘%张%’ AND id IN (10,89,16) 这样我们在进行范围查询时,就要将一个集合值,作为参数动态添加进来...SQL 语句: select 字段 from user where id in (?)...--queryvoid集合实现查询用户列表--> <select id="findUserInIds" resultType="user" parameterType="com.bruce.domain.QueryVo...标签 <em>Sql</em> <em>中</em>可将重复<em>的</em> <em>sql</em> 提取出来,使用时用 include 引用即可,最终达到 <em>sql</em> 重用<em>的</em>目的。

5.3K20

SUM函数在SQL值处理原则

theme: smartblue 在SQLSUM函数是用于计算指定字段总和聚合函数。...语法通常如下: SELECT SUM(column_name) AS total_sum FROM table_name; 然而,在使用SUM函数时,对于字段NULL值,需要特别注意其处理原则,以确保计算结果准确性...UPDATE balance set amount = 10.00 where id in(1,2); 查询SQL-全部不为NULL情况 select sum(amount) from balance...where id in (1,2); 查询SQL-存在非NULL情况 select sum(amount) from balance; 在存在非NULL值情况下, SUM函数会将所有非NULL值相加...这确保了计算结果准确性,即使在记录集中存在部分NULL值。 在实际应用,确保对字段NULL值进行适当处理,以避免出现意外计算结果。

20710

SQLJOIN时条件放在Where和On区别

背景 SQLJOIN子句是用于把来自两个或多个表数据连接起来,在这个过程可能会添加一些过滤条件。昨天有小伙伴问,如下图这两种SQL写法查询结果是否会一样?(好像这是某一年阿里面试题) ?...结果验证 将上面的两个表Inner Join和Left Join,过滤条件分别放在on和where。...结论:Inner Join时过滤条件放在on和where返回结果一致。...结论:Left Join时过滤条件放在on和where返回结果不一致。 原因分析 可以这么理解,当两张表在Left Join时,会生成一张连接临时表,然后再将这张连接临时表返回给用户。...在Where情况下,是在临时表生成好以后起作用,在对临时表进行过滤。此时,只要条件不为真的行,全部都过滤掉了。 — 完 —

3.3K10

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

在连接查询语法,另人迷惑首当其冲就要属on筛选和where筛选区别了, 在我们编写查询时候, 筛选条件放置不管是在on后面还是where后面, 查出来结果总是一样, 既然如此,那为什么还要多此一举让...sql连接查询分为3种, cross join,inner join,和outer join , 在 cross join和inner join,筛选条件放在on后面还是where后面是没区别的...第四步,应用where筛选器 在这条问题sql,因为没有where筛选器,所以上一步结果就是最终结果了。...而对于那条地址筛选在where条件sql,这一步便起到了作用,将所有地址不属于杭州记录筛选了出来 ?...通过上面的讲解,已经能反应出在outer join筛选条件在on中和where区别,开发人员如能详细了解之中差别,能规避很多在编写sql过程中出现莫名其妙错误。

3.2K80

SQL参数放在where前后区别

本博客记录一个细节,在使用sql left join时候,参数放在left join后面当条件,还是放在where区别 给出两条SQL: tt.book_type = ‘TIPS_TYPE’,放在...tt on tt.book_code = tc.tips_flag and tt.book_type = 'TIPS_TYPE' tt.book_type = ‘TIPS_TYPE’,放在where...tt.book_name tipsType from t_tips_config tc left join t_book tt on tt.book_code = tc.tips_flag where...tt.book_type = 'TIPS_TYPE' 这两种情况意义完全不一样,前者如果t_book没有book_type = 'TIPS_TYPE’数据,整条SQL还是可以查到数据,只是t_book...参数没查到而已,后者,一旦出现book_type = 'TIPS_TYPE’没有数据,那就整条SQL都查不到数据,这样是不合理,因为业务需要查出t_tips_config表,不然就不会用左连接了

62430

SQL语句中 where 和 on 区别

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

3K20

为什么SQL语句Where 1=1 and在SQL Server不影响性能

对出现在where子句中字段加索引 避免在索引列上使用函数或计算,在where子句中,如果索引是函数一部分,优化器将不再使用索引而使用全表扫描 在insert和update维表时都加上一个条件来过滤维表已经存在记录...图1从T-SQL到具体返回数据经历了多个步骤,每一个步骤又存在大量规则。...在SQL Server,T-SQL需要编译为执行计划才能去执行,在编译过程,Query Optimizer需要考虑很多元数据,比如说表上索引、数据分布、估计行数、一些参数配置、硬件环境等,在这其中...比如语句select * from table where a=1 and b=2 这个语句,SQL Server估计行数会是:     a列选择率*b列选择率*表采样总行数     因此,当...这里我们举例,假如表中有100万行数据,where a=1数据有1万条,where b=1数据有1万条,则A和B选择性都是1/100=0.01,在WhereA And B联合估计行数则变为0.01

2K30

SQL语句中where 1=1意义

我们在看别人项目的时候,很多时候看到这样SQL语句: select * from user where 1=1 其中这个where1=1是有特殊意义,包含以下两种情境:动态SQL拼接和查询表结构。...var3=value3"; } 在这个例子,当两个if 都不成立时候,或者仅有第一个if 成立时候,SQL语句拼接就会出现错误。...当我们SQL语句加上where 1=1时候,就不报错了,如下: String sql="select * from table_name where 1=1"; if( conditon 1) {...sql=sql+" and var2=value2"; } if(conditon 2) { sql=sql+" and var3=value3"; } SQL语句加上where 1=1,只是为了满足多条件查询页面不确定各种因素而采用一种构造一条正确能运行动态...这种写法实际目的是为了获取逻辑值"True",其实诸如2=2, 1+2=3,''=''等之类写法都可以返回逻辑值"True",只不过1=1运算开销更小,故被应用最普遍。

3.6K51

sql语句中where与having区别

Where 是一个约束声明,使用Where约束来自数据库数据,Where是在结果返回之前起作用Where不能使用聚合函数。...在查询过程聚合语句(sum,min,max,avg,count)要比having子句优先执行。而where子句在查询过程执行优先级高于聚合语句。 下面用一个例子进一步说明问题。...一来,我们要使用聚合语句 avg ;二来,我们要对聚合后结果进行筛选( average > 3000 ),因此使用 where 会被告知 sql 有误。...例2:要查询每个部门工资大于3000员工个数 sql语句应为: select deparment, count(*) as c from salary_info where salary >...3000 group by deparment 此处 where 不可用 having 进行替换,因为是直接对库数据进行筛选,而非对结果集进行筛选。

1.5K20

用Python实现透视value_sum和countdistinct功能

在pandas库实现Excel数据透视表效果通常用是df['a'].value_counts()这个函数,表示统计数据框(DataFrame) df列a各个元素出现次数;例如对于一个数据表如pd.DataFrame...Excel数据透视表与Python实现对比 就是对表dfa列各个值出现次数进行统计。...Pandas数据透视表各功能 用过Excel透视表功能的话我们知道,出了统计出现次数之外,还可以选择计算某行求和、最大最小值、平均值等(数据透视表对于数值类型列默认选求和,文本类型默认选计数),...还是拿表df来说,excel数据透视表可以计算a列A、B、C三个元素对应c列求和(sum),但是pandas库并没有value_sum()这样函数,pandassum函数是对整列求和,例如...,直接在透视行选渠道,值选uid计数,得到是没去重结果,拿df表来说,假设c列是用户id,a列是渠道,想统计a列A、B、C各渠道各有多少付费用户数,透视结果和期望结果如下图: ?

4.2K21

MongoDB 聚合统计计算 – $SUM表达式

我们一般通过表达式$sum计算总和。因为MongoDB文档有数组字段,所以可以简单计算总和分成两种:1,统计符合条件所有文档某个字段总和;2,统计每个文档数组字段里面的各个数据值和。...这两种情况都可以通过$sum表达式来完成。以上两种情况聚合统计,分别对应与聚合框架 $group 操作步骤和 $project 操作步骤。 1.$group 直接看例子吧。...Case 1 测试集合mycol数据如下: {   title: 'MongoDB Overview',   description: 'MongoDB is no sql database',  ...,使用aggregate()计算 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}]) 查询结果如下...,计算表达式: db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}]) 查询结果如下;

1.5K10

Numpy模块where函数

执行流程: 根据比较(关系)表达式计算返回一个ture或者false。 如果是true,就把表达式1作为结果。 如果是false,就把表达式2作为结果。...不过在Python虽然可以称为"三目运算符"或者"三元表达式",但是我认为在Python仅仅能称为"三元表达式",因为此时返回结果只能是一个输出,而且单单看Python实现"三元表达式"语句,其实怎么看都像是...我们知道numpy数组关注是数值计算,其实这个地方仅仅是精度问题。...但是如果使用Pythonlist列表的话会有几个问题: 它对于大数组处理速度不是很快(因为所有工作都是由纯python完成); 无法用于多维数组; 所以我们就有了numpy.where函数出现...,所以where函数参数可以是标量; 参数之间是有一定对应关系

1.5K10

MySQL数据库,SQLwhere条件提取

根据SQL,固定了索引查询范围[(2,2,2),(8,8,8))之后,此索引范围并不是每条记录都是满⾜where查询条件。例如:(3,1,1)不满⾜c > 1约束;(6,4,4)不满⾜d !...= 4约束。 ⽽c,d列,均可在索引idxt1bcd过滤掉不满⾜条件索引记录。 因此,SQL还可以使⽤c > 1 and d != 4条件进⾏索引记录过滤。...在理解以上问题解答基础上,做⼀个抽象,可总结出⼀套放置于所有SQL语句⽽皆准where查询条件提取规则: 所有SQLwhere条件,均可归纳为3⼤类 • Index Key (First Key...在上⾯SQL⽤例,(3,1,1),(6,4,4)均属于范围,但是又均不满⾜SQL查询条件。...;若where条件为 >=、>、=、>、<、<=

2.3K10
领券