left join on and 和 where的区别(深入Oracle的left join中on和where的区别详解)
本文目录
- 深入Oracle的left join中on和where的区别详解
- sql的join中on和where的区别
- Oracle的left join中on和where的区别
- left join 过滤条件写在on后面和写在where 后面的区别
- left join on后面 加条件和where后面加条件的区别
- 浅谈,**L语句中LEFT JOIN ON WHERE和LEFT JOIN ON AND的区别
- **L左右连接中的on and和on where的区别
- on条件与where条件的区别
深入Oracle的left join中on和where的区别详解
在使用left jion时,on和where条件的区别如下:
1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left
join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
假设有两张表:
表1 tab1:
id size
1 10
2 20
3 30
表2 tab2:
size name
10 AAA
20 BBB
20 CCC
两条**L:
1、select * form tab1 left join tab2 on (tab1.size
= tab2.size) where tab2.name=’AAA’
2、select * form tab1 left join tab2 on
(tab1.size = tab2.size and tab2.name=’AAA’)
第一条**L的过程:
1、中间表
on条件:
tab1.size = tab2.size
tab1.id
tab1.size tab2.size tab2.name
1 10
10 AAA
2 20 20
BBB
2 20 20 CCC
3 30 (null) (null)
2、再对中间表过滤
where 条件:
tab2.name=’AAA’
tab1.id tab1.size tab2.size
tab2.name
1 10 10 AAA
第二条**L的过程:
1、中间表
on条件:
tab1.size = tab2.size
and tab2.name=’AAA’
(条件不为真也会返回左表中的记录)
tab1.id tab1.size
tab2.size tab2.name
1 10
10 AAA
2 20
(null) (null)
3 30
(null) (null)
其实以上结果的关键原因就是left join,right join,full
join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。 而inner
jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。
sql的join中on和where的区别
join包括:inner join,outer join
outer join又包括了:left outer join,right outer join 和 full outer join
natural on using
1)on条件是在生成临时表时使用的条件, 它不管on中的条件是否为真,都会返回左边表中的记录。
2) where条件是在临时表生成好 后,再对临时表进行过滤的条件 。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
对于这样一个查询 select * from t1 natural left outer join t2 on t1.size=t2.size
on条件下回返回所有的左侧的元素,结果应该包含了(3,30,null)这一元组
对于另一个查询 select * from t1 natural left outer join t2 where t1.size=t2.size
它的结果却并不包含(3,30,null)这一元组,因为在执行where的时候,会在中间表(也就是表1)生成好后,执行过滤条件t1.size=t2.size,很明显这时候t1.size=3而t2..size=null,因此执行后的结果如下:
比较表1和表2会发现表1比表2多了一列,其实这也是on的特性。
在书中写到“on操作中,size出现两次,一次是t1中的,一次是t2中的,即便他们的值是一样的。”
上面的例子印证了一点:所有的外连接条件都必需要放在ON后面,不然前面的所有LEFT,和RIGHT关联将作为摆设,而不起任何作用。而对于普通连接,则几乎没有任何区别。
Oracle的left join中on和where的区别
on 一般用于设置连接条件的,比如学生表和修课表连接时:
学生表 LEFT JOIN 修课表 ON 学生表.学号=修课表学号
WHERE 一般用于设置过滤条件的,比如:WHERE 性别=’男’ AND 成绩》60分
left join 过滤条件写在on后面和写在where 后面的区别
left join中on是在联接表的时候就先对右表进行条件过滤,而where,是在表的串联及过滤完成之后,再对串联后的结果进行过滤。
left join on后面 加条件和where后面加条件的区别
用LEFTJOIN时,条件直接放ON后面,是先筛选后连接,条件放WHERE后面,是先连接后筛选
浅谈,**L语句中LEFT JOIN ON WHERE和LEFT JOIN ON AND的区别
你好,left
join,right,full后on和where的区别就在于:
on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录,而where条件是在临时表生成好后,再对临时表进行过滤的条件。
而且除了stu_id=1的那条记录,class表中字段不满足过滤条件的记录(即使被关联到了)全是null,所以on后面的语句最好只写两个表相关联的语句,并不能做单方面的过滤。
也可以这么简单的理解,以坐标为主,先查询出左表的全部记录,然后关联右表,将符合条件的记录的数据填充进查询出来的结果。
right
join
和
full
join
具有相同的特性,但是inner
join不同,它可以在on
那里做过滤处理,也就是说放在on后面和where后面作用是一样的。
希望对你有帮助
**L左右连接中的on and和on where的区别
原先一直对**L左右连接中的on and和on where的区别不是太了解,直到在网上看到了下面这段话才豁然开朗。
在使用left join时,on and和on where条件的区别如下:
1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉,on后的条件用来生成左右表关联的临时表,where后的条件对临时表中的记录进行过滤。
on条件与where条件的区别
on条件与where条件的区别是:
1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有leftjoin的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
2、在on后面加条件仅适合用于leftjoin(rightjoin未测,innerjoin与where类似)。
3、不考虑where条件下,leftjoin会把左表所有数据查询出来,on及其后面的条件仅仅会影响右表的数据(符合就显示,不符合全部为null)。
4、where后面加条件与左连接本身无关,影响的是连接产生后的数据。
5、所以左连接关注的是左边的主表数据,不应该把on后面的从表中的条件加到where后,这样会影响原有主表中的数据。
更多文章:
arraylist取值(C# ArrayList如何动态添加对象及取值)
2026年4月2日 02:40
八上英语人教版电子书(本人急需初二上册人教版英语,生物,物理,语文,数学(大本)的电子书!各位有的同学能不能发给我)
2026年4月2日 02:20
insert into 另一个表的数据(**L语句 怎么把从一个表中查出来数据插入到另一个表中)
2026年4月2日 02:00
left join on and 和 where的区别(深入Oracle的left join中on和where的区别详解)
2026年4月2日 01:20
动物体内常量元素(动物所必须的元素和人类所必须的元素是一样的吗)
2026年4月2日 01:00
option selected(如何用一个option selected列表传递两个值)
2026年4月2日 00:40






