左外连接与where语句的区别

例:

表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)


这样的话,数据就全了,就算沙悟净暂时没上班,至少没把他给漏掉,呵呵。


如果有什么地方说错了,请指正。谢谢!

你可能感兴趣的:(SQL)