浅谈左连接,右连接,内连接(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})
   
右连接:      返回右表中的所有行,如果右表中行在左表中没有匹配行,则结果中左表中的列返回空值。

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

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

左连接,右连接,内连接(left join ,right join,inner join)的更多相关文章

  1. PHP左、右、内连接

    left join   :左连接,返回左表中所有的记录以及右表中连接字段相等的记录.right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录.inner join: 内连接,又 ...

  2. SQL中的连接可以分为内连接,外连接,以及交叉连接 。

    SQL中的连接可以分为内连接,外连接,以及交叉连接 . 1. 交叉连接CROSS JOIN 如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积: 举例, ...

  3. SQL Server中的连接查询【内连接,左连接,右连接,。。。】

    在查询多个表时,我们经常会用“连接查询”.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 什么是连接查询呢? 概念:根据两个表或多个表的列之间的关系,从这些表中查询数据 ...

  4. SQL 四种连接查询(内连接、左连接、右连接、全连接)

    下面列出了您可以使用的 JOIN 类型,以及它们之间的差异. (1)     JOIN: 如果表中有至少一个匹配,则返回行(inner join) (2)     LEFT JOIN: 即使右表中没有 ...

  5. 关于数据库的左,右,内,外连接,Union和Union all---------笔记

    1.左连接 select a.filed1,a.filed2,b.filed1 from a (左表) left join b(右表) on a.commonfiled = b.commonfiled ...

  6. [原创]java WEB学习笔记91:Hibernate学习之路-- -HQL 迫切左外连接,左外连接,迫切内连接,内连接,关联级别运行时的检索策略 比较。理论,在于理解

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. Hibernate迫切左外连接和迫切内连接

    •迫切左外连接: •LEFT JOIN FETCH 关键字表示迫切左外连接检索策略. –list() 方法返回的集合中存放实体对象的引用, 每个 Department 对象关联的 Employee  ...

  8. oracle连接总结(内连接、外连接、自然连接,交叉连接,自连接)

    1.简述  1) 两个表的连接,是通过将一个表中的一列或者多列同另一个表中的列链接而建立起来的.用来连接两张表的表达式组成了连接条件.当连接成功后,第二张表中的数据就同第一张表连接起来了,并形成了复合 ...

  9. SQL连接方式(内连接,外连接,交叉连接)

    1.内连接.左连接.右连接.全连接介绍 內连接仅选出两张表中互相匹配的记录.因此,这会导致有时我们需要的记录没有包含进来.内部连接是两个表中都必须有连接字段的对应值的记录,数据才能检索出来.   左连 ...

  10. SQL Server中的连接查询(内连接、外连接、交叉连接)

    在数据库查询中,经常会用到两个有关联的表进行查询,需要把两个表中的数据按照某些条件查出来,这时就可以使用连接查询 连接查询分为三种:内连接.外连接和交叉连接 1. 内连接 内连接inner join ...

随机推荐

  1. IIS7部署网站遇到的问题

    1.web.config文件中更改配置项时:  因为 IIS 7 采用了更安全的 web.config 管理机制,默认情况下会锁住配置项不允许更改.  运行命令行 %windir%\system32\ ...

  2. 《Linux就该这么学》第二天课程

    秦时明月经典语录:很多人被命运安排,而我安排命运.——卫庄 今天介绍了VM 虚拟机的安装以及Linux系统的安装,还讲解了Linux内核 RPM:降低软件的安装难度 源代码+安装规则→将程序源代码与安 ...

  3. MFC源码解读(一)最原始一个MFC程序,手写不用向导

    从这一篇开始,详细记录一下MFC的源码解读 四个文件,分别为: stdafx.h,stdafx.cpp,hello.h,hello.cpp 代码如下: //stdafx.h #include < ...

  4. 【转】再有人问你Http协议是什么,把这篇文章发给他

    一.HTTP简介 1.HTTP协议,即超文本传输协议(Hypertext transfer protocol).是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相 ...

  5. 2017CS231n学习笔记——计算机视觉的概述

    本节课主要讲述了cs231n课程的背景和计算机视觉的历史,也主要介绍了目前很重要的一个计算机视觉数据集--IMAGENET. 更多内容参考我的AI学习之路 课程简介 这门课程是由stanford大学计 ...

  6. go语言异常处理

    go语言异常处理 error接口 go语言引入了一个关于错误错里的标准模式,即error接口,该接口的定义如下: type error interface{ Error() string } 对于要返 ...

  7. go连接mysql

    package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysq ...

  8. 《http权威指南》读书笔记3

    概述 最近对http很感兴趣,于是开始看<http权威指南>.别人都说这本书有点老了,而且内容太多.我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做 ...

  9. Nginx的安装与部署

    1:安装工具包 wget.vim和gcc yum install -y wget yum install -y vim-enhanced yum install -y make cmake gcc g ...

  10. python库函数Map, Filter and Reduce的用法

    python中有三个函数式编程极大的简化了程序的复杂性,这里就做一下讨论和记录. 一 Map:应用在链表输入所有元素的函数,它的格式如下所示: map(function_to_apply, list_ ...