表连接查询注意事项

  今天完善、开发作业系统。写了一句代码:exec="select * from class,student where class.classid=student.classid" 测试却怎么也不行,一开始我怀疑是Access不支持?上网查了半天没有结果。也有点收获,关于表的连接查询还是有几种方法的:
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 | 查看次数: -
疯子
回复回复疯子[2010-03-18 11:43 PM | | | 江苏省苏州市 电信| del | 取消审核]
[ 正在加载评论信息,请稍后... ]
科士威
回复回复科士威[2010-03-17 11:56 PM | | | 山东省潍坊市 联通| del | 取消审核]
[ 正在加载评论信息,请稍后... ]
老七
回复回复老七[2010-03-17 11:28 AM | | | 中国 移动| del | 取消审核]
[ 正在加载评论信息,请稍后... ]
猴子
回复回复猴子[2010-03-13 03:48 PM | | | 福建省 电信| del | 取消审核]
[ 正在加载评论信息,请稍后... ]
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 支持Gravatar头像.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.