zoukankan      html  css  js  c++  java
  • 左连接,右连接,内连接(left join ,right join,inner join)

    浅谈左连接,右连接,内连接(left join ,right join,inner join)

    这个问题一直困扰着我,每次遇到就打擦边球,不正面应对。今天索性把这几个连接搞懂了,写下这篇博客,

    让跟我遇到同样问题的人,不再困惑。

               先谈谈内连接:假设表A与表B根据条件id进行内连接,就将A表中的每一行跟B表中的每一行进行匹配,

    注意匹配的方式如下图所示:

     

    注意:首先取出teacher表中的第一行(如上图标记的地方),与表student中的每一行进行匹配(根据studentid条件),

    然后再取出teacher表中的第二行,与表student中的每一行进行匹配,一直到结束。

    如果遇到不匹配的直接跳过,那么内连接得到的结果就是两表的匹配项的集合。

    sql语句:select * from Teacher t1 inner join Student s1 on t1.StudentId=s1.Id

    linq查询语句:from t1 in Teachers
    join s1 in Students on t1.StudentId equals s1.Id
    select new {t1,s1}

    lambda表达式:Teachers.Join(Students,t1 => t1.StudentId,s1 => s1.Id, (t1, s1) =>new{t1=t1,s1=s1}) 

    这里给大家推荐一款软件(LINQPad),由于现在写后台代码的时候,对数据库中的表进行操作,基本上不写sql语句了,

    都通过linq语句来操作数据库。所以想判断自己写的linq语句写的对不对,以及结果是啥,都需要运行程序,不方便。

    但是在LinqPad里不仅可以写sql还可以写linq来操作数据库。重点:我不是打广告呦。。。

    左连接:返回左表中的所有行,如果左表中行在右表中没有匹配行,则结果中右表中的列返回空值。如下图所示

     

     

               同样的还是先取表teacher中的第一行与表student表中的所有行来匹配,如果在表student中没有找到匹配项,

    那么就返回teacher中的一行,外加student表中的一行,并且由于没有在student表中匹配到,所以这行以null值来填充。

    sql语句:select * from Teacher t1 left join Student s1 on t1.StudentId=s1.Id

    linq查询语句:from t1 in Teachers
    join s1 in Students on t1.StudentId equals s1.Id into temp

    from tt in temp.DefaultIfEmpty()
    select new {t1,tt}

    lambda表达式:Teachers.GroupJoin (Students,t1 => t1.StudentId, s1 => s1.Id,(t1, temp) =>new{t1 = t1, temp = temp})

    .SelectMany (temp0 => temp0.temp.DefaultIfEmpty (),(temp0, tt) =>new{t1 = temp0.t1, tt = tt})
       
    右连接:      返回右表中的所有行,如果右表中行在左表中没有匹配行,则结果中左表中的列返回空值。

    这个地方与左连接几乎一致,我就不再继续写了。

    这篇文章比较基础,仅以记录自己学习的点点滴滴,如果能给博友们解除疑惑,那最好了。
           
           
           
             
                
                
            
       
           
           
             
                 
               
           

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    iOS开源App整理
    iOS9 3DTouch 之 Home Screen Quick Actions
    UITabbarController & UITabbar 学习
    Linux一些最基础操作
    logo的表现形式
    LOGO设计中出现文字背后的意义
    标志设计中选择合适的字体
    sketch制作LOGO(三) ---大熊猫
    sketch制作LOGO(二) ---樱花婆婆
    十多个app引导页面欣赏
  • 原文地址:https://www.cnblogs.com/sjitLearn/p/9300804.html
Copyright © 2011-2022 走看看