full join和left join的区别
发布网友
发布时间:2022-04-26 01:59
我来回答
共3个回答
懂视网
时间:2022-05-04 15:00
刚刚在用mysql写一个select语句,中间用到了一些连接方面的功能,发现这2者还是有不少区别的。 首先交代一下环境: OS:windows 2003 MySql:Server version 5.0.37 SqlServer:2000 + sp4 题目简化后是这样的: 3张表 st, rk, ck, st(id int) id 1 2 3 4
刚刚在用mysql写一个select语句,中间用到了一些连接方面的功能,发现这2者还是有不少区别的。
首先交代一下环境:
OS:windows 2003
MySql:Server version 5.0.37
SqlServer:2000 + sp4
题目简化后是这样的:
3张表 st, rk, ck,
st(id int)
rk(id int fk st.id, rk int)
ck(id int fk st.id, ck int)
现在要求用一条select实现这样的输出效果
id | rk | ck |
1 | 4 | 0 |
2 | 5 | 3 |
3 | 6 | 4 |
4 | 0 | 1 |
由于我用的MySql的编辑器不是很方便,所以想干脆先在SqlServer里面模拟一下看看。
利用full join,很快实现了我想要的结果,语句如下
select isnull(rk.id,ck.id) id,isnull(rk,0) rk,isnull(ck,0) ck
from rk
full join ck
on rk.id = ck.id
然后把语句放到MySql里,问题就来了,直接报错,提示是full join出错,没有这样的语法。
我怀疑是不是MySql不支持full join,然后到google上看了一下,看到不少都是直接用的full join做的,即
select ifnull(rk.id,ck.id) id,ifnull(rk,0) rk,ifnull(ck,0) ck
from rk
full join ck
on rk.id = ck.id
这里MySql的ifnull函数等同于SqlServer的isnull函数,即如果arg1为null,返回arg2,否则返回arg1。
但是我怎么调都不对。
到官网上看了下,一是也没找到详细说明。后来在一篇文章中看到,原来5.1+的版本才有full join。OMG~~~~~~
之前基本都是用left join ,right join组合来模拟。
看到这里我也想开了,撞到墙后不是回头,而是跨过去。
利用了left 再left,实现了上面的效果:
select st.id,ifnull(rk.rk,0) as rk,ifnull(ck.ck,0) as ck
from st
left join rk on (st.id = rk.id)
left join ck on (st.id = ck.id)
where rk != 0 or ck != 0
当然,也可以仿照上面文章的方法,利用left union right
select * from rk
left join ck on rk.id = ck.id
union
select * from rk
right join ck on rk.id = ck.id
好像更容易理解一点,也更通用。估计SqlServer内部也就是这样实现的。full join 是sql92标准。
还有一点区别:
MySql支持这样的join语法,SqlServer不支持
select *
from st
left join (ck,rk)
on (rk.id = st.id and ck.id = st.id)
结果是这样
id | rk | ck |
1 | | |
2 | 5 | 3 |
3 | 4 | 6 |
4 | | |
5 | | |
可以看出,并不是我上面想要的。具体这个语法是什么没有细究,感觉应该是join括号里面的先做连接。
或者说left join(A, B)是一个"join 与"的写法,而left join A XXXXXX left join B XXXXXX 是"join 或"。
估计前者不是sql92。
MySql,full join,left join
热心网友
时间:2022-05-04 12:08
join等价于inner
join内连接,是返回两个表中都有的符合条件的行。
left
join左连接,是返回左表中所有的行及右表中符合条件的行。
right
join右连接,是返回右表中所有的行及左表中符合条件的行。
full
join全连接,是返回左表中所有的行及右表中所有的行,并按条件连接。
通常情况下,left
join肯定比inner
join返回的行数多。
热心网友
时间:2022-05-04 13:26
外连接:
LEFT
JOIN
:以左表为基础,显示左表中的所有记录,不管是否与关联条件相匹配,而右表中的数据只显示与关联条件相匹配的记录,不匹配的记录以NULL字符填充.
left
join
是left
outer
join的简写,left
join默认是outer属性的。
FULL
JOIN
:显示多个表中的所有的记录,不匹配关联条件的列以NULL字符填充.
sql select 语句请教,一个表中的列1、列2对比出不同的数据。
select * from 表格名 where 列1 <> 列2;
LEFT JOIN,Right,Full后ON和WHERE的区别
你好,LEFT JOIN,Right,Full后ON和WHERE的区别就在于:on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录,而where条件是在临时表生成好后,再对临时表进行过滤的条件。而且除了stu_id=1的那条记录,class表中字段不满足过滤条件的记录(即使被关联到了)全是NULL...
sql语句中的full join具体是怎么回事啊?
4、SQL LEFT JOIN 关键字,LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。5、最后SQL RIGHT JOIN 关键字,RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。
join和left join的区别
(其他JOIN参数也是显性连接)WHERE和INNER JOIN产生的连接关系,没有本质区别,结果也一样。但是!隐性连接随着数据库语言的规范和发展,已经逐渐被淘汰,比较新的数据库语言基本上已经抛弃了隐性连接,全部采用显性连接了。a inner join:理解为“有效连接”,两张表中都有的数据才会显示left join:理解...
左外连接和left join区别
只有形式不一样。left join 是 left outer join 的简写,两者含义一样的。1、left join是SQL语言中的查询类型,即连接查询。它的全称是左外连接(left outer join),是外连接中的一种。2、Oracle中有三类OUTER JOIN -- 分别是LEFT,RIGHT和FULL。一个LEFT OUTER JOIN包含“左”表中的所有记录,...
oracle中full join中on和where的区别
on和where条件的区别如下:1、生成临时表时,无论on中的条件是否为真,这里都会返回全表联接查询的记录。对于left join就会返回左表的全部数据,对于right join就会返回右全表的记录。2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有full join(left、right)的含义(必须返回...
数据库操作中,左连接,右连接是什么意思,举例说明
LEFT JOIN(左连接) 返回包括左表中的所有记录和右表中联结字段相等的记录。即使右表中没有匹配,也从左表返回所有的行。RIGHT JOIN(右连接)返回包括右表中的所有记录和左表中联结字段相等的记录。即使左表中没有匹配,也从右表返回所有的行。示例表:表1和表2 1、LEFT JOIN 例:注释:王五在表2...
sql 如何查询每个班级中的最高分
具体代码如下:select 班级名称,分数=MAX(成绩)from 学生表 s join 班级表 c on s.班级号=c.班级号 join 成绩表 sc on s.学号=sc.学号 group by 班级名称
inner join 还是 left join 啥区别啊
一、返回不同 1、inner join:inner join只返回两个表中联结字段相等的行。2、left join:left join返回包括左表中的所有记录和右表中联结字段相等的记录。二、数量不同 1、inner join:inner join的数量小于等于左表和右表中的记录数量。2、left join:left join的数量以左表中的记录数量相同。三...
sql:连接查询跟多表查询的区别
这俩没区别 就是写法不同 这个就如同表1里有a,b俩字段一样 select a,b from 表1 select * from 表1 是一样的 顺便给你扩展下吧 在数据库里还有left join,right join,full join等 当这样的时候用 select * from table1,table2 where table1.id = table2.id;这样类似的查询就不行了。得...