您的位置:首页 > 数据库

数据库练习——leetcode(175):多表查询

2020-03-24 19:17 369 查看

文章目录

  • 三、内连接与外连接
  • 数据库练习——leetcode(175):组合两张表 外连接

    一、题目

    二、解析

    本题主要考察多表连接。
    按题意要求,使用outer join时可以保证指定表的每条记录都出现----即使没有匹配, outer join又可以分为left join, right join, full join。
    我们想让Address表中即使没有Person,也让Person有Address属性,所以连接后Person表要完整显示出来,address没有的显示为None.

    • 那么我们可以用 Person表 left join Address,或者反过来用right join。
    select A.FirstName, A.LastName, B.City, B.State from Person A
    left join Address B on A.PersonId = B.PersonId;
    • 大神做法:
    select A.FirstName, A.LastName, B.City, B.State from Person A
    left join (select distinct PersonId, City, State from Address) B
    on A.PersonId = B.PersonId;

    通过先对Address表去除重复的项,减少连接次数,提高效率,降低时间

    三、内连接与外连接

    • 内连接
      inner join
      :查询的结果是两个表匹配到的数据
    • 右连接
      right join
      :查询的结果是两个表匹配的数据,右表特有的数据,对于左表中不存在的数据使用null填充
    • 左连接
      left join
      :查询的结果是两个表匹配的数据,左表特有的数据,对于右表中不存在的数据使用null填充

    举例:

    -- student表
    select * from students;
    -- class表
    select * from classes;


    • 内连接
    select * from students as s inner join classes as c on s.cls_id=c.id;

    • 右连接
    select * from students as s right join classes as c on c.id=s.cls_id;

    • 左连接
    select * from students as s left join classes as c on c.id=s.cls_id;

    • 点赞
    • 收藏
    • 分享
    • 文章举报
    liuluTL 发布了33 篇原创文章 · 获赞 1 · 访问量 606 私信 关注
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: