MySQL 中 on与where筛选条件的区别

在两张表连接的时候才会有on的筛选条件,那么on和where的区别是什么呢?

在inner join中是没有区别的,但是在左连接和右连接中,区别就体现出来了,下面以左连接为例:

1、用on的时候,只对右表做筛选条件,而左表不受控制

2、用where的时候,对临时表的组合后的结果进行筛选,所以对左右表都是有作用的。

如下示例:

原文地址:https://www.cnblogs.com/fish-101/p/12076786.html

时间: 2024-10-16 15:44:45

MySQL 中 on与where筛选条件的区别的相关文章

数据库中复杂的联查+筛选条件+排序+分页

数据库中复杂的联查+筛选条件+排序+分页一直是比较头疼的问题 为了模拟这个问题,首先建立两个表 create table t_userType ( id int identity(1,1) not null primary key, name varchar(50) ) GO create table t_user ( id int identity(1,1) not null primary key, t_userTypeId int not null, name varchar(50), f

Mysql中使用FIND_IN_SET解决IN条件为字符串时只有第一个数据可用的问题

今天在使用Mysql的存储过程处理数据的批量删除时,遇到了WHERE条件中使用IN(strlist)时(strlist为逗号分隔的字符串),只有strlist的第一个元素才有效的问题,现在将问题和解决方法做下记录. 我们首先创建两张表userinfo(用户信息表)和userextinfo(用户扩展信息表),其中userextinfo表的UserID字段为外键对应userinfo表中的UserID字段 用户信息表userinfo 初始数据 用户扩展信息表userextinfo 初始数据 现在表中有

MySQL中0、'0'作为条件时的区别

一.现象: 今天查询时,某字段x为varchar 可能的值为A B C 0 1 2 3 4 想把0 1 2 3 4的所有数据查出,使用的SQL为 select * from table where x in (0,1,2,3,4) 结果发现,会把所有数据都查出 但是,使用 select * from table where x in ('0',1,2,3,4) 查出数据即为正常数据 二.原因: 经查阅,默认情况下,MySQL会尽量进行类型转换 所以,当字符串转为整数时,如A.B.C这种值会转换失

mysql中的where和having子句的区别

mysql中的where和having子句的区别 having的用法 having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前.而 having子句在聚合后对组记录进行筛选. SQL实例: 一.显示每个地区的总人口数和总面积. SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY region 先以region把返回记录分成多个组,这就是GROUP BY的

mysql中 drop、truncate和delete的区别

mysql中drop.truncate和delete的区别 (1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作. TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的.并且在删除的过程中不会激活与表有关的删除触发器.执行速度快. (2)表和索引所占空间. 当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小, DELETE操作不会减少表或索引

MySQL中create table as 与like的区别分析

这篇文章主要介绍了MySQL中create table as 与like的区别,结合实例分析了二者在使用中的具体区别与主要用途,需要的朋友可以参考下,具体如下: 对于mysql的复制相同表结构方法,有create table as 和create table like 两种,区别是什么呢? 代码如下: create table t2 as select * from t1 where 1=2; as创建出来的t2表(新表)缺少t1表(源表)的索引信息,只有表结构相同,没有索引. 代码如下: cr

Mysql中校对集utf8_unicode_ci与utf8_general_ci的区别

一直对utf8_unicode_ci与utf8_general_ci这2个校对集很迷惑,今天查了手册有了点眉目.不过对中文字符集来说采用utf8_unicode_ci与utf8_general_ci时有何区别还是不清楚? 下面摘录一下Mysql 5.1中文手册中关于utf8_unicode_ci与utf8_general_ci的说明: 当前,utf8_unicode_ci校对规则仅部分支持Unicode校对规则算法.一些字符还是不能支持.并且,不能完全支持组合的记号.这主要影响越南和俄罗斯的一些

mysql中utf8_bin、utf8_general_ci、utf8_general_cs编码区别

在mysql中存在着各种utf8编码格式,如下表: 1)utf8_bin 2)utf8_general_ci 3)utf8_general_cs utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写. utf8_genera_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏感. utf8_general_cs区分大小写,cs为case sensitive的缩写,即大小写敏感. 现在假设执行如下命令: create table test_bin ( nam

MySql中varchar(10)和varchar(100)的区别==>>以及char的利弊

一般初学会认为,二者占用的空间是一样的.比如说我存储5个char,二者都是实际占用了5个char了[勘误:varchar在实际存储的时候会多一个byte用来存放长度].但是深入一下,设计数据库的时候,二者一样吗?答案是否定的[至少varchar类型需要在数据之前利用一个或者两个字节来存储数据的长度][二者在内存中的操作方式也是不同的,下面的例子中有体现].看下面的例子.如现在用户需要存储一个地址信息.根据评估,只要使用100个字符就可以了.但是有些数据库管理员会认为,反正Varchar数据类型是