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

SQL语句中 where 和 on 区别

先说结论: 在使用left join左连接时,on and和on where条件区别如下: 1、on条件是在生成临时表时使用条件,它不管on中条件是否为真,都会返回左边表中记录。...2、where条件是在临时表生成好后,再对临时表进行过滤条件。...这时已经没有left join含义(必须返回左边表记录)了,条件不为真的就全部过滤掉,on后条件用来生成左右表关联临时表,where条件对临时表中记录进行过滤。...join过程可以这样理解:首先两个表做一个笛卡尔积,on后面的条件是对这个笛卡尔积做一个过滤形成一张临时表,如果没有where就直接返回结果,如果有where就对上一步临时表再进行过滤。...where过滤作用就出来了,右连接原理是一样。到这里就真相大白了:inner join中on和where没区别,右连接和左连接就不一样了。 本文转载自: SQL语句中where和 on区别?

3K20

SQL语句中where 1=1意义

我们在看别人项目的时候,很多时候看到这样SQL语句: select * from user where 1=1 其中这个where1=1是有特殊意义,包含以下两种情境:动态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运算开销更小,故被应用最普遍。...,有些画蛇添足,where 1=1实际意义不如where 11(或者where 1=0)来得有用,当我们只需要获取表字段(结构)信息,而不需要理会实际保存记录时,例2)写法将是非常可去取

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

sql语句中where与having区别

Where 是一个约束声明,使用Where约束来自数据库数据,Where是在结果返回之前起作用Where中不能使用聚合函数。...Having是一个过滤声明,是在查询返回结果集以后对查询结果进行过滤操作,在Having中可以使用聚合函数。...一来,我们要使用聚合语句 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

避免锁表:为Update语句中Where条件添加索引字段

深入分析后,问题核心暴露出来:另一业务流程中对工单表执行更新(UPDATE)操作SQL,其where句中涉及字段缺少必要索引,导致其他业务在操作表中数据时需要等待该更新完成。...问题描述 mysql 修改数据时,如果where条件后字段未加索引或者未命中索引会导致锁表。这种锁表行为会阻塞其他事务对该表访问,显著降低并发性能和系统响应速度。...,当我们索引失效时,也会锁表 命令行查看(mysql版本8.0) 查看被锁定表 show OPEN TABLES where In_use > 0; 此命令用于列出当前正在使用中表,也就是说那些被锁定或正在进行某些操作...; 总结 在编写Update语句时,务必注意Where条件中涉及字段是否有索引支持。...避免全表锁关键在于优化查询,利用索引提高查询效率,减少系统性能影响。通过合理地设计索引,并确保Update语句中Where条件包含索引字段,可以有效地提升数据库性能和并发能力。

12210

MySQL 查询专题

❑ GROUP BY子句中列出每一列都必须是检索列或有效表达式(但不能是聚集函数)。如果在 SELECT 中使用表达式,则必须在 GROUP BY 子句中指定相同表达式。不能使用别名。...查询 版本要求 MySQL 4.1 引入了对子查询支持,所以要想使用本章描述 SQL,必须使用MySQL 4.1 或更高级版本。...where item_price >= 10 ) 列必须匹配 在 WHERE句中使用查询(如这里所示),应该保证SELECT语句具有与 WHERE句中相同数目的列。...用查询建立(和测试)查询最可靠方法是逐渐进行,这与 MySQL 处理它们方法非常相同。首先,建立和测试最内层查询。然后,用硬编码数据建立和测试外层查询,并且仅在确认它正常后才嵌入查询。...表名2 别名2 where 条件) 单行多列 select * from 表1 别名1 where (列1, 列2) in (select 列1, 列2 from 表2 别名2 where 条件)

5K30

如何写优雅SQL原生语句?

sql各语句执行顺序概览与讲解 项目实战中一段sql说明讲解 sql语句中别名使用 书写sql语句注意事项 前言 上一篇讲Mysql基本架构时,以“sql查询语句在MySql架构中具体是怎么执行...知道了sql查询语句在MySql架构中具体执行流程,但是为了能够更好更快写出sql语句,我觉得非常有必要知道sql语句中各子句执行顺序。...现在开始我们学习 语句中各子句完整执行顺序概括(按照顺序号执行) from (注:这里也包括from中语句) join on where group by(开始使用select中别名,后面的语句中都可以使用...sql语句中别名 别名在哪些情况使用 在 SQL 语句中,可以为表名称及字段(列)名称指定别名 表名称指定别名 同时查询两张表数据时候: 未设置别名前: SELECT article.title,...(级联)删除尤为有用 delete t1,t2 from t_a t1 , t_b t2 where t1.id = t2.id 查询结果需要使用别名 查看上面一段sql 别名使用注意事项 虽然定义字段别名

1.8K20

Mysql常用sql语句(20)- 查询重点知识

测试必备Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 查询语句可以嵌套在 sql 语句中任何表达式出现位置...select from where select from as where select from ...where 常见错误写法 select * from (select * from emp); 这样写是会报错,因为没有给查询指定别名 正确写法 select * from (select...* from emp) as t; 注意点 如果嵌套查询,必须给表指定别名,一般会返回多行多列结果集,当做一张新临时表 只出现在查询中而没有出现在父查询中表不能包含在输出列中 多层嵌套子查询最终结果集只包含父查询...(最外层查询)select 语句中出现字段 查询结果集通常会作为其外层查询数据源或用于条件判断

47820

MySql操作-20211222

使用星号(*)可能会将敏感信息暴露给未经授权用户 格式   `select 列筛选 form table where 行筛选` 还有一些有用运算符可以在WHERE句中使用来形成复杂条件,例如:...`;比查询值都大   `select 展示列名 from 表名 where 列名 >ANY(select 对应列名 from ....)...临时表名 on 条件;` - 其中,select查询所得表 为临时表,后跟临时表名,可在条件判断中指代 3. exist 型 - `select 展示列 from 表名 where exists...(select 列名 from 表名 where 条件);` - 将主查询结果带入查询进行条件判断和匹配,如果查询出结果即保留。...为字段指定别名   1. 在使用 SELECT 语句查询数据时,MySQL 会显示每个 SELECT 后面指定输出字段。有时为了显示结果更加直观,我们可以为字段指定一个别名。 2.

2.2K10

MySQL问题集锦

(2)一个SELECT语句中,子句顺序是固定。例如GROUP BY子句不会位于WHERE子句前面。...MySQL和SQL执行顺序基本是一样。 2.where子句为什么不能使用count别名 先举一个反例。...但这是错误,这是书上一个反例,错误原因是如果使用AS赋给列一个别名并且在WHERE句中使用该列,那么必须通过它原名来引用,而不能使用别名。根本原因是select语句执行顺序。...也就容易理解where和having子句使用区别了。 3.MySQL将查询结果保存到新中间物理表中,并建立索引,提高查询速度 将查询结果保存到新建uinTable表中。...5.查询,临时表和视图区别 查询是用于查询语句中辅助主查询完成结果查询查询语句。查询存在嵌套查询中,嵌套查询就是多个子查询嵌套在主查询中形成查询语句。

1.1K20

【数据库】MySQL进阶八、多表查询

【数据库】MySQL进阶八、多表查询 MySQL多表查询 一 使用SELECT子句进行多表查询 SELECT 字段名 FROM 表1,表2 … WHERE 表1.字段 = 表2.字段 AND 其它查询条件...(1)别名通常是一个缩短了表名,用于在连接中引用表中特定列,如果连接中多个表中有相同名称列存在,必须用表名或表别名限定列名 (2)如果定义了表别名就不能再使用表名 三 合并多个结果集...:查询是一个SELECT查询,返回单个值且嵌套在SELECT、INSERT、UPDATE和DELETE语句或其它查询语句中,任何可以使用表达式地方都可以使用查询....: (1)由比较运算符引入内层查询只包含一个表达式或列名,在外层语句中WHERE子句内命名列必须与内层查询命名列兼容 (2)由不可更改比较运算符引入查询(比较运算符后面不跟关键字ANY...语句一起使用,如果SQL语句中不含GROUP BY子句,则HAVING行为与WHERE子句一样. e.x:SELECT name,math FROM tb_demo083 GROUP BY id HAVING

2.3K40

MySQL多表查询详解

tb_demo065_tel b WHERE a.id=b.id使用表别名应注意几下几点(1)别名通常是一个缩短了表名,用于在连接中引用表中特定列,如果连接中多个表中有相同名称列存在,必须用表名或表别名限定列名...SELECT查询,返回单个值且嵌套在SELECT、INSERT、UPDATE和DELETE语句或其它查询语句中,任何可以使用表达式地方都可以使用查询.SELECT id,name,sex,date...:(1)由比较运算符引入内层查询只包含一个表达式或列名,在外层语句中WHERE子句内命名列必须与内层查询命名列兼容(2)由不可更改比较运算符引入查询(比较运算符后面不跟关键字ANY或ALL...WHERE code = '$_POST[text]')十八利用HAVING语句过滤分组数据HAVING子句用于指定组或聚合搜索条件,HAVING通常与GROUP BY 语句一起使用,如果SQL语句中不含...《MySQL多表查询》,请注明出处:https://www.zhoulujun.cn/html/DB/mysql/2015_1027_332.html

1.4K10

MySQL(七)联结表

A和B,A和B表使用where子句正确联结, where子句指示MySQL匹配A表中A_id和B表中B_id相匹配,要匹配两列以A.A_id和B.B_id完全限定表名(当引用列可能存在二义性,必须使用完全限定表名...A, B     order by A_name, B_name; PS:应保证所有联结都有where子句,否则MySQL将返回比想要数据多得多数据,还应保证where子句正确性。...子句,在这里on等同于where) 3、联结多个表 SQL对一条select语句中可以联结数目没有限制,创建规则也基本相同(首先列出所有表,然后定义表之间关系) PS:MySQL在运行时关联指定每个表以处理联结...表别名只在查询执行中使用,表别名不返回到客户端主机) 2、自联结 自联结:自联结通常作为外部语句用来替代从相同表中检索数据时使用查询语句。...= p2.user_id          and p2.user_id = '10086'; 这条SQL语句中,usertable表第一次出现为别名p1,第二次为别名p2,在select语句中明确使用

72310

Mysql优化大师三」查询执行计划explain详解,含案例

mysql内部通过别名der在外层查询中引用这个临时表,在更复杂查询中可以看到ref列。 最后,下面是一个UNION查询。...actually chosen DERIVED 包含在from子句中查询,mysql会递归执行并将结果放在一个临时表中。...例如,可以看到下面的查询中mysql选择关联顺序不同于语句中所指定顺序。...当from子句中查询或UNION,table列会变复杂多。在这些场景中,确实没有一个表可以参考到,因为mysql创建匿名临时表仅在查询执行过程中存在。...当在from子句中查询时候,table列是形式,其中N是查询 ID,这总是向前引用——换言之,N指向explain输出中后面的一行。

1.1K10
领券