表连接查询注意事项
作者:蛛蛛虎 日期:2010-03-12
student(表)
no name classid‚
1 zdy 2
2 huz 2
3 yxx 2
4 sss 1
class(表)
classid classname‚
2 y2002
3 y2003
1、select * from student ‚ class where student.classid=class.classid
no‚name‚classid‚classid‚classname‚
1‚zdy‚2‚2‚y2002‚
2‚huz‚2‚2‚y2002‚
3‚yxx‚2‚2‚y2002‚
2、select * from student left join class on student.classid=class.classid
no‚name‚classid‚classid‚classname‚
1‚zdy‚2‚2‚y2002‚
2‚huz‚2‚2‚y2002‚
3‚yxx‚2‚2‚y2002‚
4‚sss‚1‚ ‚ ‚
3、select * from student inner join class on student.classid=class.classid
no‚name‚classid‚classid‚classname‚
1‚zdy‚2‚2‚y2002‚
2‚huz‚2‚2‚y2002‚
3‚yxx‚2‚2‚y2002‚
结果同1
4、select * from student right join class on student.classid=class.classid
no‚name‚classid‚classid‚classname‚
1‚zdy‚2‚2‚y2002‚
2‚huz‚2‚2‚y2002‚
3‚yxx‚2‚2‚y2002‚
‚ ‚ ‚ 3‚y2003‚
今天看到了一个通俗的解释,是人都可以理解的:
例表a
aid adate
1 a1
2 a2
3 a3
表b
bid bdate
1 b1
2 b2
4 b4
两个表a,b相连接,要取出id相同的字段
select * from a inner join b on a.aid = b.bid这是仅取出匹配的数据.
此时的取出的是:
1 a1 b1
2 a2 b2
那么left join 指:
select * from a left join b on a.aid = b.bid
首先取出a表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
1 a1 b1
2 a2 b2
3 a3 空字符
同样的也有right join
指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
1 a1 b1
2 a2 b2
4 空字符 b4
LEFT JOIN 或 LEFT OUTER JOIN。
左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
言归正转,最后发现class表里的classid是自动编号类型。而student里的classid是文本类型的。所以最终出现了错误。解决方法:将student里的classid改成数字类型的。唉,小小的一个错误折腾了二个小时。
[本日志由 蛛蛛虎 于 2010-03-13 12:00 AM 编辑]
上一篇: 图片或文字上下左右js滚动效果
下一篇: 压力下奋进,房奴一族。
文章来自: 本站原创
Tags: sql
相关日志:
评论: 4 | 引用: 0 | 查看次数: -
发表评论


回复
|
| 江苏省苏州市 电信|
| 取消审核]