注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

移动Labs

http://labs.chinamobile.com/

 
 
 

日志

 
 
关于我

移动Labs(labs.chinamobile.com):中国移动研究院主办的通信行业汇聚门户,专注于移动通信和互联网领域,核心会员是中移动广大员工及ICT行业用户。提供资讯、博客、讨论组、专业报告、视频、电子日报等信息及知识服务,以及研究院主办的每周线下活动“无限论坛”。

网易考拉推荐

王磊建:一张图讲清楚关系型数据库的各种连接语句内涵之一  

2013-01-21 13:37:39|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

独家供稿:移动Labs

     部门邀请了爱可生的专家进行了一次MySQL的技术培训,发现大家普遍对于SQL的各种Join操作存在一些纠结或者不太清晰的地方,本文将试图用一个实际的示例,结合图形的方式对SQL中各种类型的Join操作进行解析说明。

     我们先设计两个数据库表,建表语句如下:

    1) CREATE TABLE person(name varchar(20), gongfu varchar(128));

    2) CREATE TABLE faction(name varchar(20),faction varchar(128));

    接下来,我们对两个数据表分别添加数据如下:

     mysql> insert into person values('郭靖','降龙十八掌'),('丘处机','全真剑法'),('梅超风','九阴白骨爪'),('黄蓉','打狗棍法'),('张三丰','太极拳'),('令狐冲','独孤九剑');

   mysql> insert into faction values('郭靖','丐帮'),('黄蓉','丐帮'),('梅超风','桃花岛'),('陈玄风','桃花岛'),('张无忌','武当'),('张三丰','武当'),('令狐冲','华山派');

    建表之后的数据表内容如下:

   mysql> select * from person;

+----------+------------+

    | name     | gongfu     |

    +----------+------------+

    | 郭靖     | 降龙十八掌 |

    | 丘处机   | 全真剑法   |

    | 梅超风   | 九阴白骨爪 |

    | 黄蓉     | 打狗棍法   |

    | 张三丰   | 太极拳     |

    | 令狐冲   | 独孤九剑   |

    | 民间高手 | 野球拳     |

    +----------+------------+

    7 rows in set (0.00 sec)

 

   mysql> select * from faction;

    +--------+---------+

    | name   | faction |

    +--------+---------+

    | 郭靖   | 丐帮    |

    | 黄蓉   | 丐帮    |

    | 梅超风 | 桃花岛  |

    | 陈玄风 | 桃花岛  |

    | 张无忌 | 武当    |

    | 张三丰 | 武当    |

    | 令狐冲 | 华山派  |

    +--------+---------+

    7 rows in set (0.00 sec)

 

现在我们基于上述建立的两张数据表进行SQL Join操作和解释:

 1) Inner Join:官方解释,Inner join是等值连接,其操作只返回两个表中联结字段相等的行;

    图解: Inner Join代表是两张表的交集
王磊建:一张图讲清楚关系型数据库的各种连接语句内涵之一 - 移动Labs - 中国移动研究院(移动Labs)
 

实际查阅指令及结果如下,我们可以看到,等值连接其结果是两张表的交集集合;

mysql> select * from person inner join faction on person.name = faction.name;

+--------+------------+--------+---------+

| name   | gongfu     | name   | faction |

+--------+------------+--------+---------+

| 郭靖   | 降龙十八掌 | 郭靖   | 丐帮    |

| 黄蓉   | 打狗棍法   | 黄蓉   | 丐帮    |

| 梅超风 | 九阴白骨爪 | 梅超风 | 桃花岛  |

| 张三丰 | 太极拳     | 张三丰 | 武当    |

| 令狐冲 | 独孤九剑   | 令狐冲 | 华山派  |

+--------+------------+--------+---------+

5 rows in set (0.05 sec)

2) left (outer) join: 官方解释,(左联接),返回包括左表中的所有记录和右表中联结字段相等的记录;

    图解: 查询表之全集,连接表有匹配条件的有连接值,无匹配条件的则为Null;
王磊建:一张图讲清楚关系型数据库的各种连接语句内涵之一 - 移动Labs - 中国移动研究院(移动Labs)
 

实际查阅指令及结果如下,我们可以看到,左(外)连接其结果是查询表的全集合;

mysql> select * from person left outer join faction on person.name = faction.name;

+----------+------------+--------+---------+

| name     | gongfu     | name   | faction |

+----------+------------+--------+---------+

| 郭靖     | 降龙十八掌 | 郭靖   | 丐帮    |

| 丘处机   | 全真剑法   | NULL   | NULL    |

| 梅超风   | 九阴白骨爪 | 梅超风 | 桃花岛  |

| 黄蓉     | 打狗棍法   | 黄蓉   | 丐帮    |

| 张三丰   | 太极拳     | 张三丰 | 武当    |

| 令狐冲   | 独孤九剑   | 令狐冲 | 华山派  |

| 民间高手 | 野球拳     | NULL   | NULL    |

+----------+------------+--------+---------+

7 rows in set (0.00 sec)

3)right (outer) join:官方解释,(右联接),返回包括右表中的所有记录和左表中联结字段相等的记录;

   图解:连接表之全集,查询表有匹配条件的有连接值,无匹配条件的则为Null;
王磊建:一张图讲清楚关系型数据库的各种连接语句内涵之一 - 移动Labs - 中国移动研究院(移动Labs)
 

实际查阅指令及结果如下,我们可以看到,右(外)连接其结果是连接表的全集合;

mysql> select * from person right outer join faction on person.name = faction.name;

+--------+------------+--------+---------+

| name   | gongfu     | name   | faction |

+--------+------------+--------+---------+

| 郭靖   | 降龙十八掌 | 郭靖   | 丐帮    |

| 黄蓉   | 打狗棍法   | 黄蓉   | 丐帮    |

| 梅超风 | 九阴白骨爪 | 梅超风 | 桃花岛  |

| NULL   | NULL       | 陈玄风 | 桃花岛  |

| NULL   | NULL       | 张无忌 | 武当    |

| 张三丰 | 太极拳     | 张三丰 | 武当    |

| 令狐冲 | 独孤九剑   | 令狐冲 | 华山派  |

+--------+------------+--------+---------+

7 rows in set (0.00 sec)

篇幅所限,我们将会在另外一篇文章《一张图讲清楚关系型数据库的各种连接语句内涵之二》中讲述全(外)连接以及由左(外)连接和右(外)连接结合Where子句衍生出来的查询操作;


本博文发表在移动Labs的文链是:http://labs.chinamobile.com/mblog/466/193617


【相关博文】
一张图讲清楚关系型数据库的各种连接语句内涵之二
一张图讲清楚对称性/非对称性加密、安全证书内涵以及应用场景
【精彩推荐】
微信营销原则的思考
看各家移动支付公司新的结帐方式
什么是设计?——寻找设计的动机和方向
为什么你会花费4000元买手机,却不肯花6元钱买游戏?
5种立刻展现自信的方法
  评论这张
 
阅读(795)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017