例:
表A:user_info;
字段:user_nametitle_id
孙悟空 1
猪八戒 2
唐三藏 3
沙悟净 4
表B:user_title;
字段:title_id,title_name;
1 打手
2 食客
3 圣人
想获得每个人物的名称与职业
select ui.user_name,ut.title_name from user_info ui,user_title ut where ui.title_id = ut.title_id;
查询出来的结果会是:
user_name title_name
孙悟空 打手
猪八戒 食客
唐三藏 圣人
因为这条sql语句的过滤条件是ui.title= ut.title_id , 必须全部匹配上才会将结果查询出来。
沙悟净就给漏掉了 , 这样的话 , 将会导致我们所需要的数据不完成.
解决方法是用左外连接:
通用写法:
select ui.user_name,ut.title_name from user_info ui left join user_title ut on ui.title_id = ut.title_id;
oracle写法:
select ui.user_name,ut.title_name from user_info ui,user_title ut where ui.title_id = ut.title_id(+);
查询出来的结果会是:
user_name title_name
孙悟空 打手
猪八戒 食客
唐三藏 圣人
沙悟净 (null)
这样的话,数据就全了,就算沙悟净暂时没上班,至少没把他给漏掉,呵呵。
如果有什么地方说错了,请指正。谢谢!