你真的会玩SQL吗?内连接、外连接

大多数人一般写多表查询会这样写select * from tbA ,tbB  没有用到JOIN关键字,太Low了,官网标准建议是用JOIN明确表间的关系,下面具体来讲。

连接类型:
  1. 交叉联接 得到所连接表的所有组合 (笛卡儿集)cross join
  2. 内联接得到连接表的满足条件的记录组合inner join  on
  3. 外联接(左、右)得到一个表的所有行,及其余表满 足连接条件的行 full | left | right  outer join  on

交叉联接

在这类联接的结果集内,两个表中每两个可能成对的行占一行。

但是如果在交叉联接中加入where 子句就相当与是内联接

例:

这就相当于我们一最开始的写法:SELECT title, pub_name  FROM titles , publishers Where titles.pub_id = publishers.pub_id

执行过程:

内联接

仅显示两个联接表中的匹配行的联接。(这是查询设计器中的默认联接类型。)

例:

执行过程:

左向外联接

包括第一个命名表(”左”表,出现在 JOIN 子句的最左边)中的所有行。不包括右表中的不匹配行。

例:

右向外联接

包括第二个命名表(”右”表,出现在 JOIN 子句的最右边)中的所有行。不包括左表中的不匹配行。

例:

执行过程:

完整外部联接

包括所有联接表中的所有行,不论它们是否匹配。

例:

练习:

此后用到的用例数据库是SQL2008里面的

用例数据库文件:链接:http://pan.baidu.com/s/1qW1QxA0 密码:dqxx

参考SQL:

参考SQL:

 

1 4 收藏 1 评论

关于作者:欢醉

因为专注,所以专业NET,UDP\\TCP开发,架构设计,数据库,Jquery插件开发,微信开发,android应用,O2O商业模式开发微信公众号【一个码农的日常】 个人主页 · 我的文章 · 4 ·    

相关文章

可能感兴趣的话题



直接登录
最新评论
  • "但是如果在交叉联接中加入where 子句就相当与是内联接" -- 有点区别。 "cross join where" 先运行 join, 然后去掉不符合where 的值,返回给select. 所以顺序是 cross join --> where --> select. "(inner) join on" 是先 on 在特定的组合条件下,然后join ,然后返回值给select, 运行顺序是 on --> join --> select. 如果你在inner join 下加where 条件,就是 on --> join --> where --> select.

跳到底部
返回顶部