• SqlServer左连接、右连接、全连接、外连接、内连接


    一、外连接
    1.左连接
    2.右连接
    3.全连接
    三、内连接
    写法一
    写法二
    四、sqlserver外连接、内连接执行顺序上的探究
    Student表:


    Score表:


    一、外连接
    外连接分为左连接(LEFT JOIN)或称为左外连接(LEFT OUTER JOIN),右连接(RIGHT JOIN)或称为右外连接(RIGHT OUTER JOIN),全连接(FULL JOIN)或称为全外连接(FULL OUTER JOIN)。我们简称:左连接、右连接和全连接。

    1.左连接
    即左外连接。执行规则:返回左表中的所有行,如果左表中行在右表中没有匹配行,则结果中右表中的列返回空值。

    查询:

    select Student.sid, Student.sname, Score.score
    from Student
    left join
    Score
    on Student.sid = Score.sid
    1
    2
    3
    4
    5
    结果:


    2.右连接
    即右外连接。执行规则:与左连接相反,返回右表中的所有行,如果右表中行在左表中没有匹配行,则结果中左表中的列返回空值。

    查询;

    select Student.sid, Student.sname, Score.score
    from Student
    right join
    Score
    on Student.sid = Score.sid
    1
    2
    3
    4
    5
    结果:


    3.全连接
    即全外连接。执行规则:返回左表和右表中的所有行。当某行在另一表中没有匹配行,则另一表中的列返回空值。

    查询:

    select Student.sid, Student.sname, Score.score
    from Student
    full join
    Score
    on Student.sid = Score.sid
    1
    2
    3
    4
    5
    结果:


    三、内连接
    执行规则:获取两表的公共部分的记录

    写法一
    查询:

    select Student.sid, Student.sname, Score.score
    from Student
    inner join
    Score
    on Student.sid = Score.sid
    1
    2
    3
    4
    5
    结果:


    写法二
    查询:

    select Student.sid, Student.sname, Score.score
    from Student,Score
    where Student.sid = Score.sid
    1
    2
    3
    结果:


    四、sqlserver外连接、内连接执行顺序上的探究
    这里我们来探究一下外连接与内连接在执行顺序上的差异。

    表:


    外连接查询:

    select a.sid, a.score, b.sid, b.score
    from Score a
    left join
    Score b
    on a.score > b.score
    1
    2
    3
    4
    5
    内连接查询:

    select a.sid, a.score, b.sid, b.score
    from Score a
    inner join
    Score b
    on a.score > b.score
    1
    2
    3
    4
    5
    外连接结果:

    内连接结果:


    执行结果上的差异我们不谈,我们来看看sqlserver内部的执行顺序是什么,我们可以发现外连接的score是逐渐增加的,其实它的执行顺序是这样的。

    而内连接的score是呈驼峰状的,其实它的执行顺序是这样的。

    ————————————————
    版权声明:本文为CSDN博主「打不死Gin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/dabusiGin/article/details/103409756

    一份耕耘,一份收获,付出就有回报永不遭遇过失败,因我所碰到的都是暂时的挫折
  • 相关阅读:
    NuGet Package Explorer使用教程下载
    .NET 大数据量并发解决方案
    ASP.NET Core 中间件 中间件(Middleware)和过滤器(Filter)的区别
    C#的dapper使用
    Quartz.NET实现作业调度
    .Net Core + DDD基础分层 + 项目基本框架 + 个人总结
    asp.net mvc框架之EF的使用
    Asp.Net MVC+EF+三层架构的完整搭建过程
    WebAPI异常捕捉处理,结合log4net日志(webapi2框架)
    SQL SERVER 2012数据库:开启防火墙导致外部无法连接数据库解决办法
  • 原文地址:https://www.cnblogs.com/raincedar/p/14607019.html
Copyright © 2020-2023  润新知