• 回复@“老笑头”,共产主义需要分配生产资料应该是你做梦的时候梦到的吧!这除了让网友们笑掉大牙,还能有什么?你确实是让网友们看着就想笑!哈哈哈哈! 2019-07-18
  • 湖州工业产品生产许可“一企一证”首发 2019-07-18
  • 中蒙俄文化交流演出《草原蒙古韵》在乌兰浩特举行 2019-07-18
  • 网友给太原市市长留言获回复 共计11条 2019-07-13
  • 前5月新能源汽车延续高速增长态势 销量增141.6% 2019-07-12
  • OPPO Find X 官方剧透屏占比 93.8%,创下新纪录 2019-07-12
  • 以产业金融促广州实体经济发展 2019-07-10
  • 创维数码发布年报:净赚5.41亿港元 同比减少58.7% 2019-07-10
  • 腐败分子是从一个鸡蛋开始的,在一定的位置有一定的权力,今天收别人一个鸡蛋没费任何力气,明天又有人送十个也不用力气。胃口就越来越大,感觉太多了一个人吃不了怕咽死, 2019-07-07
  • 第二届山西(汾阳·杏花村)世界酒文化博览会9月启幕 2019-07-07
  • 老戏骨Party!《远大前程》老艺术家批量坐镇很有派! 2019-07-06
  • 解析视频播控平台黑产链 20元看12家网站VIP会员视频 2019-07-06
  • 市人大常委会召开党组会议传达学习全国两会精神张轩主持并讲话 2019-07-04
  • 贵州宣讲十九大:干部争当宣讲员 群众心窝暖洋洋 2019-07-04
  • 胡律师说法——黄河新闻网 2019-07-03
  • 你好,欢迎来到js代码网。

    微信登录
    热门搜索:微信小程序手机模板前端工程师商城源码ThiinkPHPPython教程

    首页>数据库> 图解数据库表连接,秒懂左连接,右连接,内连接...

    体彩11选5奖金对照表:图解数据库表连接,秒懂左连接,右连接,内连接...

    • 分类:数据库
    • 时间:04-01
    • 阅读:702

    山西十一选五top10遗漏 www.sp-17.com 关系型数据库最难的地方,就是建模(model)。

    错综复杂的数据,需要建立模型,才能储存在数据库。所谓"模型"就是两样东西:实体(entity)+ 关系(relationship)。

    实体指的是那些实际的对象,带有自己的属性,可以理解成一组相关属性的容器。关系就是实体之间的联系,通??梢苑殖?一对一"、"一对多"和"多对多"等类型。



    在关系型数据库里面,每个实体有自己的一张表(table),所有属性都是这张表的字段(field),表与表之间根据关联字段"连接"(join)在一起。所以,表的连接是关系型数据库的核心问题。

    表的连接分成好几种类型。


    1、内连接(inner join)
    2、外连接(outer join)
    3、左连接(left join)
    4、右连接(right join)
    5、全连接(full join)

    以前,很多文章采用维恩图(两个圆的集合运算),解释不同连接的差异。







    上周,我读到一篇文章,认为还有比维恩图更好的解释方式。我发现确实如此,换一个角度解释,更容易懂。

    所谓"连接",就是两张表根据关联字段,组合成一个数据集。问题是,两张表的关联字段的值往往是不一致的,如果关联字段不匹配,怎么处理?比如,表 A 包含张三和李四,表 B 包含李四和王五,匹配的只有李四这一条记录。

    很容易看出,一共有四种处理方法。


    1、只返回两张表匹配的记录,这叫内连接(inner join)。
    2、返回匹配的记录,以及表 A 多余的记录,这叫左连接(left join)。
    3、返回匹配的记录,以及表 B 多余的记录,这叫右连接(right join)。
    4、返回匹配的记录,以及表 A 和表 B 各自的多余记录,这叫全连接(full join)。

    下图就是四种连接的图示。我觉得,这张图比维恩图更易懂,也更准确。




    上图中,表 A 的记录是 123,表 B 的记录是 ABC,颜色表示匹配关系。返回结果中,如果另一张表没有匹配的记录,则用 null 填充。

    这四种连接,又可以分成两大类:内连接(inner join)表示只包含匹配的记录,外连接(outer join)表示还包含不匹配的记录。所以,左连接、右连接、全连接都属于外连接。

    这四种连接的 SQL 语句如下。


    SELECT * FROM A
    INNER JOIN B ON A.book_id=B.book_id;

    SELECT * FROM A
    LEFT JOIN B ON A.book_id=B.book_id;

    SELECT * FROM A
    RIGHT JOIN B ON A.book_id=B.book_id;

    SELECT * FROM A
    FULL JOIN B ON A.book_id=B.book_id;


    上面的 SQL 语句还可以加上where条件从句,对记录进行筛选,比如只返回表 A 里面不匹配表 B 的记录。

    SELECT * FROM A
    LEFT JOIN B
    ON A.book_id=B.book_id
    WHERE B.id IS null;


    另一个例子,返回表 A 或表 B 所有不匹配的记录。

    SELECT * FROM A
    FULL JOIN B
    ON A.book_id=B.book_id
    WHERE A.id IS null OR B.id IS null;

    此外,还存在一种特殊的连接,叫做"交叉连接"(cross join),指的是表 A 和表 B 不存在关联字段,这时表 A(共有 n 条记录)与表 B (共有 m 条记录)连接后,会产生一张包含 n x m 条记录的新表(见下图)。




    相关文章

  • 回复@“老笑头”,共产主义需要分配生产资料应该是你做梦的时候梦到的吧!这除了让网友们笑掉大牙,还能有什么?你确实是让网友们看着就想笑!哈哈哈哈! 2019-07-18
  • 湖州工业产品生产许可“一企一证”首发 2019-07-18
  • 中蒙俄文化交流演出《草原蒙古韵》在乌兰浩特举行 2019-07-18
  • 网友给太原市市长留言获回复 共计11条 2019-07-13
  • 前5月新能源汽车延续高速增长态势 销量增141.6% 2019-07-12
  • OPPO Find X 官方剧透屏占比 93.8%,创下新纪录 2019-07-12
  • 以产业金融促广州实体经济发展 2019-07-10
  • 创维数码发布年报:净赚5.41亿港元 同比减少58.7% 2019-07-10
  • 腐败分子是从一个鸡蛋开始的,在一定的位置有一定的权力,今天收别人一个鸡蛋没费任何力气,明天又有人送十个也不用力气。胃口就越来越大,感觉太多了一个人吃不了怕咽死, 2019-07-07
  • 第二届山西(汾阳·杏花村)世界酒文化博览会9月启幕 2019-07-07
  • 老戏骨Party!《远大前程》老艺术家批量坐镇很有派! 2019-07-06
  • 解析视频播控平台黑产链 20元看12家网站VIP会员视频 2019-07-06
  • 市人大常委会召开党组会议传达学习全国两会精神张轩主持并讲话 2019-07-04
  • 贵州宣讲十九大:干部争当宣讲员 群众心窝暖洋洋 2019-07-04
  • 胡律师说法——黄河新闻网 2019-07-03
  • 七星彩走势图2 广东十一选五软件 网上特码资料大全十期 幸运28公式怎么算的 北单最新比分赔率 优博线上娱乐城百家乐打不开 半全场胜负算不算让球 足球指数是什么原因 山东时时彩十一选五 广西快三预测号码今天 河北20选5五开奖结果 六合图库彩图118众万 22选5开奖号今天 双色球走势图 十大电子游艺平台