数据库在连接多个表,通过select查询返回结果时,都会生成一个临时表,然后再把这个表返回给用户。这里如要进行过滤的,可以用where或者on,他们两者的使用有些不同。
比如,Keys表
Sections表
两个表含有同个字段SectionID
当我们需要从这2个表查找含有相同字段的记录时,使用select * from Keys , Sections on Keys.SectionId=Sections.SectionID,或者使用select * from Keys , Sections where Keys.SectionId=Sections.SectionID,就是直接两个表名,中间以逗号分隔,两种语句的输出结果都是一致。
而如果使用join连接,
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行
比如left join左连接,这时如用on后面加判断语句就不起作用,如用where则还会根据判断语句的真假进行返回。
其他的join连接,还有right join右连接是从右边的表中返回所有记录,full join是返回两个表的并集,也是一样的情况,这里不再叙述。只有一个inner join就是等值连接,返回两个表中字段相等的记录,才返回跟where相同的结果。