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

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

where a.name = '一班' group by a.name  查询结果  原因 mysql 对于left join的采用类似嵌套循环的方式来进行从处理,以下面的语句为例: SELECT...b) { // 遍历完RT,发现lt在RT中没有有对应的行,则尝试用null补一行 IF P2(lt,NULL) {// 补上null后满足 where 过滤条件 t:=lt||NULL...问题一错误的原因:由于在where条件中对右表限制,导致数据缺失(四班应该有个为0的结果) 问题二错误的原因:由于在on条件中对左表限制,导致数据多余(其他班的结果也出来了,还是错的)。...on 后跟关联表(从表)的过滤条件,where 后跟主表或临时表的筛选条件(左连接为例,主表的数据都会查询到,所以临时表中必定包含主表所有的字段,需要给主表加什么筛选条件,直接给临时表加效果相同) 总结...通过上面的问题现象和分析,可以得出了结论:在left join语句中,左表过滤必须放where条件中,右表过滤必须放on条件中,这样结果才能不多不少,刚刚好。

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

    【转】MySQL 多表Join条件在ON AND 和 Where的写法差异

    在MySQL中,多表Join是一种常见的操作,它允许从多个表中根据相关联的列,来组合提取数据。MySQL中多表关联也是支持,多种方式.。比如内连接,左链接,右链接,笛卡尔积等方式。...特别是在左右链接下,不同的写法颠覆了对SQL语句处理的理解。...,它不管ON中的条件是否为真,都会返回左边表中的记录。...AND 的条件只在右表中进行是否为真的条件显示2. WHERE条件是在临时表生成好后,再对临时表进行过滤的条件。...这时已经没有LEFT JOIN的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。在MySQL当中,除了INNER JOIN外,使用JOIN类型时,一定要把ON 和 WHERE条件正确使用。

    25710

    MySQL数据插入INSERT INTO与条件查询WHERE的基本用法(二)

    本节课先向大家介绍MySQL数据插入insert into与where条件查询的基本用法。 首先,MySQL的书写顺序和执行顺序分别如下。...1、where 单条件查询 【任务1】通过mysql条件查询语句,在titanic表中查找出年龄等于30岁的乘客。...2、where多条件查询 【任务2】通过mysql条件查询语句,在titanic表中查找出年龄等于30岁且性别为男性的所有乘客。可以通过如下查询语句实现。...【任务3】通过mysql条件查询语句,在titanic表中查找出年龄等于30岁或性别为男性的所有乘客。可以通过如下查询语句实现。...同时MySQL数据库是通过where进行条件筛选的,where后紧跟条件,通常与and/or同时使用。

    4.4K30

    软件测试|MySQL WHERE条件查询详解:筛选出需要的数据

    简介在数据库中,我们常常需要从表中筛选出符合特定条件的数据,以便满足业务需求或获取有用的信息。MySQL提供了WHERE条件查询,使我们能够轻松地筛选数据。...本文将详细介绍MySQL WHERE条件查询的用法和示例,帮助大家更好地理解和应用这一功能。...条件查询是MySQL中非常重要和常用的功能,它使我们能够根据指定的条件筛选出所需的数据。...通过本文的示例,我们希望大家对MySQL WHERE条件查询有了更深入的了解,并能在实际应用中灵活运用该功能。...无论是进行简单的条件筛选还是复杂的多条件组合查询,MySQL的WHERE条件查询都能帮助大家轻松实现数据的精准筛选。

    55130

    mysql中将where条件中过滤掉的group by分组后查询无数据的行进行补0

    背景 mysql经常会用到group By来进行分组查询,但也经常会遇到一个问题,就是当有where条件时,被where条件过滤的数据不显示了。...例如我有一组数据: 我想查询创建时间大于某一范围的spu的分组下的sku的数量 正常的sql查出的话,假如不存在相关记录 SELECT product_id , count( *) count FROM...product_sku WHERE create_time >= #{param} AND product_id in (1,2,3,4,5) GROUP BY product_id 结果查不到任何记录...进行左外连接,在最外层利用ifnull函数 sql如下: SELECT DISTINCT a.product_id uwci, IFNULL( b.count, 0) usedCount FROM product_sku...a LEFT JOIN ( SELECT product_id , count( *) count FROM product_sku WHERE create_time >= #{param} AND

    22810

    【数据库差异研究】别名与表字段冲突,不同数据库在where中的处理行为

    一、当单层查询发生别名与表字段重名冲突时,不同数据库在where中的处理行为是怎样的呢?...二、当嵌套查询发生别名与表字段重名冲突时,不同数据库在where中的处理行为是怎样的呢? 详见后文。...PG 在 WHERE 子句中使用表字段而非别名 在测试用例基础上,设计的测试用例与预期行为如下: 测试场景三(嵌套查询——含子查询别名): SELECT * FROM (SELECT a.client_id...结论 嵌套查询: 说明在嵌套查询中子查询有或没有别名,在内层查询的别名和表字段发生重名冲突时,内层 where 中使用的是表字段而非别名;外层 where 中使用的是子查询中的表字段。...说明在嵌套查询中子查询无别名,PG报错,但对于高斯数据库: 在嵌套查询中子查询有别名,在内层查询的别名和表字段发生重名冲突时,内层 where 中使用的是表字段而非别名;外层 where 中使用的是子查询结果中的表字段

    9910

    在 SQL 中,如何使用子查询来获取满足特定条件的数据?

    在 SQL 中,可以使用子查询来获取满足特定条件的数据。子查询是嵌套在主查询中的查询语句,它返回一个结果集,可以用来过滤主查询的结果。...下面是使用子查询来获取满足特定条件的数据的一般步骤: 在主查询中使用子查询,将子查询的结果作为条件。 子查询可以在主查询中的 WHERE 子句、FROM 子句或 HAVING 子句中使用。...子查询可以返回单个值或多个值,具体取决于使用的运算符和子查询的语法。 以下是一些示例: 使用子查询在 WHERE 子句中过滤数据: SELECT column1, column2, ......FROM table WHERE column IN (SELECT column FROM table WHERE condition); 使用子查询在 FROM 子句中创建临时表: SELECT column1...FROM (SELECT column FROM table WHERE condition) AS temp_table; 使用子查询在 HAVING 子句中过滤数据: SELECT column1,

    23910

    一条查询SQL在MySQL中是怎么执行的

    这样在我们以后遇到MySQL的一些异常或者问题的时候,就可以快速定位问题并解决问题。 下边通过一张图来看一下SQL的执行流程,从中可以清楚的看到SQL语句在MySQL的各个功能模块中执行的过程。 ?...如果查询语句在缓存中可以查到这个key,就直接把结果返回给客户端。如果语句不在缓存中,就会继续执行后边的阶段。执行完成后,将执行结果存入缓存中。...除非是很久才更新一次的数据表,比如系统配置表,那这张表上的查询才适合使用查询缓存。...如我们这个例子的表T中,ID字段没有添加索引,那么执行流程如下: 调用InnoDB引擎接口取这个表的第一行,判断ID值是不是10,如果不是则跳过,如果是则将这一行放入结果集中。...对于有索引的表,执行的逻辑大同小异,第一次调用的是“取满足条件的第一行”这个接口,然后循环取“满足条件的下一行”这个接口,这些接口都是引擎中定义好的。

    4.8K20

    增删改查的查之简单查询

    导读 软件测试人员在工作使用SQL语言中的查询是使用得最多的,而查询也是SQL语言中最复杂的,很多测试人员只使用到其中最简单的查询 1.数据库的使用 现在在任何项目中都有数据的存在,那么在测试过程中查看数据库中的数据是必不可少的步骤...class表上name和age字段,并取别名 mysql> SELECT name as 姓名,age 年龄 -> FROM class; 4.在第三题的基础上,给class表取别名 mysql...[WHERE (条件s)] 1.查询class表中姓名为test数据 mysql> SELECT * -> FROM class -> WHERE name =...-> WHERE city = "成都”; 4.在3的基础给name和class分别取别名 mysql> SELECT name 姓名,class 班级 -> FROM...在条件语句中加上运算符和IN,BETWEEN,LIKE等关键字,可查询某个范围的数据 运算符:>,,= IN、BETWEEN….AND、LIKE 1.查询class表中age大于等于

    1.9K30

    Excel小技巧:在Excel中添加复选标记的15种方法(上)

    在本文中,介绍在Excel工作簿中添加复选标记的15种方法。 方法1:插入复选标记 可以使用功能区“插入”选项卡中的“符号”命令,如下图1所示。...图1 在图2所示的“符号”对话框中,选择“Wingdings”字体,滚动到底部,可以看到复选标记字符。...图3 方法2:添加复选标记的项目符号 在工作表中插入一个文本框,单击鼠标右键,在快捷菜单中选择“项目符号——选中标记项目符号”,如下图4所示。...方法4:使用CHAR函数创建复选标记 在单元格中,输入公式: =CHAR(252) 并将该单元格的字体设置为Wingdings。...图5 方法8:使用自动更正功能插入复选框 单击Excel左上角“文件——选项”命令,在“Excel选项”对话框左侧选择“校对”选项卡,单击对话框右侧的“自动更正选项”按钮,在“替换”框中输入一个单词,本例中为

    3.5K30

    MySQL【知识改变命运】10

    这时候就用到了联合查询 2:联合查询就是多个表的组合查询,一次查询涉及两张或则两张以上的表,成为联合查询 1.联合查询在MySQL里面的原理 参与查询的所有表笛卡尔积,结果集在临时表中 实例:创建两张表...确定连接条件,student表中的class_id与class表中id列的值相等 连接条件,student表中的class_id与class表中id列的值相等 # 在where⼦句中加⼊连接条件 mysql...可以为表名指定别名 2.3联合查询总结: 确定几张表参与查询 根据表与表之间的关系,确定过滤条件 通过WHERE条件对整个结果集进行过滤 精减字段,得到想要的结果 通过为表起列名,精减SQL语句 3.内连接...添加where 条件 4.3.查询没有学⽣的班级 # 右连接以JOIN右边的表为基准,右表显⽰全部记录,左表中没有匹配的记录⽤NULL填充 select * from student s right...⾃连接 5.1.应⽤场景 ⾃连接是⾃⼰与⾃⼰取笛卡尔积,可以把⾏转化成列,在查询的时候可以使⽤where条件对结果进⾏过滤,或者说实现⾏与⾏之间的⽐较。在做表连接时为表起不同的别名。

    7510
    领券