sql中left join、right join、inner join有什么区别

如题所述

left\right join是外部连接,inner join是内连接
外部连接有主表与从表,主表在left中是左侧表,right中是右侧表,主表数据会全部显示,从表数据则只显示关联部分匹配的数据,无匹配的数据用null补全
内连接则只显示两表关联条件匹配的数据
注:所谓关联条件即是指on的条件
温馨提示:内容为网友见解,仅供参考
第1个回答  2018-03-31

left\right join是外部连接,inner join是内连接
外部连接有主表与从表,主表在left中是左侧表,right中是右侧表,主表数据会全部显示,从表数据则只显示关联部分匹配的数据,无匹配的数据用null补全
内连接则只显示两表关联条件匹配的数据

left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID). B表记录不足的地方均为NULL.

本回答被网友采纳
第2个回答  2013-03-16
二、内连接(INNER JOIN)

内连接(INNER JOIN):有两种,显式的和隐式的,返回连接表中符合连接条件和查询条件的数据行。(所谓的链接表就是数据库在做查询形成的中间表)。

例如:下面的语句3和语句4的结果是相同的。

语句3:隐式的内连接,没有INNER JOIN,形成的中间表为两个表的笛卡尔积(如果没有where条件)。

SELECT O.ID,O.ORDER_NUMBER,C.ID,C.NAMEFROM CUSTOMERS C,ORDERS O WHERE C.ID=O.CUSTOMER_ID;

语句4:显示的内连接,一般称为内连接,有INNER JOIN,形成的中间表为两个表经过ON条件过滤后的笛卡尔积。

SELECT O.ID,O.ORDER_NUMBER,C.ID,C.NAMEFROM CUSTOMERS C INNER JOIN ORDERS O ON C.ID=O.CUSTOMER_ID;

三、外连接(OUTER JOIN)(必须有ON条件):
外连不但返回符合连接和查询条件的数据行,还返回不符合条件的一些行。
外连接分三类:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接(FULL OUTER JOIN)。
三者的共同点是都返回符合连接条件和查询条件(即:内连接)的数据行。不同点如下:
左外连接还返回左表中不符合连接条件单符合查询条件的数据行。
右外连接还返回右表中不符合连接条件单符合查询条件的数据行。
全外连接还返回左表中不符合连接条件单符合查询条件的数据行,并且还返回右表中不符合连接条件单符合查询条件的数据行。全外连接实际是上左外连接和右外连接的数学合集(去掉重复),即“全外=左外 UNION 右外”。
说明:左表就是在“(LEFT OUTER JOIN)”关键字左边的表。右表当然就是右边的了。在三种类型的外连接中,OUTER 关键字是可省略的。
下面举例说明:

语句5:左外连接(LEFT OUTER JOIN)
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID;

语句6:右外连接(RIGHT OUTER JOIN)
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROM ORDERS O RIGHT OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID;注意:WHERE条件放在ON后面查询的结果是不一样的。例如:

语句7:WHERE条件独立。
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_IDWHERE O.ORDER_NUMBER<>'MIKE_ORDER001';

语句8:将语句7中的WHERE条件放到ON后面。
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID AND O.ORDER_NUMBER<>'MIKE_ORDER001';

从语句7和语句8查询的结果来看,显然是不相同的,语句8显示的结果是难以理解的。因此,推荐在写连接查询的时候,ON后面只跟连接条件,而对中间表限制的条件都写到WHERE子句中。
第3个回答  2016-04-08
通俗一点就是:
left以 left join 左侧的表为主表
right 以 right join 右侧表为主表
inner join 查找的数据是左右两张表共有的
第4个回答  2013-03-16

SQL语句中LEFT JOIN和RIGHT JOIN 以及INNER JOIN的区别
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) 只返回两个表中联结字段相等的行 sql:查询结果:结果说明:left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,...

leftjoin和rightjoin和innerjoin的区别
空值处理。1、查询的侧重点:leftjoin是以左表为基础进行查询,rightjoin则以右表为基础进行查询,innerjoin则根据两个表的交集进行查询。2、空值处理:在leftjoin和rightjoin中,联结字段没有匹配,对应的结果列会返回空值NULL,而在innerjoin中,联结字段没有匹配,对应的行将不会出现在结果中。

sql中left join、right join、inner join有什么区别
left\\right join是外部连接,inner join是内连接 外部连接有主表与从表,主表在left中是左侧表,right中是右侧表,主表数据会全部显示,从表数据则只显示关联部分匹配的数据,无匹配的数据用null补全 内连接则只显示两表关联条件匹配的数据 注:所谓关联条件即是指on的条件 ...

MySQL 的内连接、左连接、右连接有什么区别?
内连接关键字:inner join;左连接:left join;右连接:right join。 内连接是把匹配的关联数据显示出来;左连接是左边的表全部显示出来,右边的表显示出符合条件的数据;右连接正好相反。

SQL中left join on 、right join on、inner join on之间的区别
left join(左联接) 返回包括以左表主表,左表中的所有记录和右表中联结字段相等(左表中匹配不到的字段对应的值为null)即:左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录。right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录       &#...

SQL中的左连接与右连接,内连接有什么区别
SQL内连接与外连接的共有3点不同:1、两者的分类不同:内连接分为相等连接和自然连接两种连接方式;而外连接分为左外连接、右外连接和全外连接三种连接方式(左外连接即LEFT OUTER JOIN;右外连接即RIGHT OUTER JOIN)。2、两者所连接的对象表不同:内连接进行连接的两个表是对应的相匹配的字段完全...

sql左连接 右连接 内连接 外连接都是什么
外连接分为两种,一种是左连接(Left JOIN)和右连接(Right JOIN)(1)左连接(Left JOIN):即图3公共部分记录集C+表A记录集A1。语句如下: select * from A Left JOIN B ON A.Aid=B.Bnameid A的字段全有,查询出来在结果集的左边。(2)右连接(Right JOIN):即图3公共部分记录集C...

sql左连接、右连接、全连接、内连接有啥区别?
右(外)连接(RIGHT JOIN )是以右表为基准,查询出右表所有的数据和左表中连接字段相等的记录,如果左表没有对应数据则在右表对应数据行显示为空(NULL).如果把两个表分别看成一个集合的话,则显示的结果为JOIN右边的集合。内连接(INNER JOIN )是查询出两个表对应的数据,如果把两个表分别看成...

常见的多表连接查询有哪些
常见的多表连接查询主要有四种:内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)。1. 内连接(INNER JOIN):内连接是最常用的一种连接类型。它只返回两个表中匹配的行。如果某行在其中一个表中没有匹配,则该行不会出现在结果中。例子:假设我们有两个表...

Left Join、Right Join、Inner Join的区别
在数据库查询中,Left Join、Right Join、Inner Join是三种常见的连接类型,它们各有特点,理解其区别对于优化查询和数据整合至关重要。左连接(Left Join)以左表为基础,展示左表的所有记录,即使右表中没有匹配项,相应的字段将显示为NULL。这类似于寻找左表中的所有元素,即使它们在右表中不存在。...

相似回答