inner join on,full outer join,left join on,right jion on
1.inner join on  内部连接 两表都满足的组合
2.full outer 全连 两表相同的组合在一起,A表有,B表没有的数据(显示为null),同样B表有,A表没有的显示为(null)
3.A表 left join  B表 左连,以A表为基础,A表的全部数据,B表有的组合。没有的为null
4.A表 right join B表 右连,以B表为基础,B表的全部数据,A表的有的组合。没有的为null

一.内连接:inner join on 或 join
   只要两个表的公共字段有匹配值,就将这两个表中的记录组合起来。
   以一个共同的字段求两个表中符合要求的交集,并将每个表符合要求的记录以共同的字段为准合并起来。其实就是取他们的交集,,内联接是用比较运算符比较要联接列的值的联接

语法
FROM table1 INNER JOIN table2 ON table1 . field1 compopr table2 . field2

INNER JOIN 操作包含以下部分:
部分 说明
 
table1, table2 要组合其中的记录的表的名称。
field1,field2 要联接的字段的名称。如果它们不是数字,则这些字段的数据类型必须相同,并且包含同类数据,但是,它们不必具有相同的名称。
compopr
 任何关系比较运算符:“=”、“<”、“>”、“<=”、“>=”或者“<>”。

sql语句
select * from table1 join table2 on table1.id=table2.id
等价(与下列执行效果相同)
A:select a.*,b.* from table1 a,table2 b where a.id=b.id
B:select * from table1 cross join table2 where table1.id=table2.id  (注:cross join后加条件只能用where,不能用on)

说明
1.可以在任何 FROM 子句中使用 INNER JOIN 操作。这是最常用的联接类型。只要两个表的公共字段上存在相匹配的值,Inner 联接就会组合这些表中的记录。
2.可以将 INNER JOIN 用于 Departments 及 Employees 表,以选择出每个部门的所有雇员。而要选择所有部分(即使某些部门中并没有被分配雇员)或者所有雇员(即使某些雇员没有分配到

任何部门),则可以通过 LEFT JOIN 或者 RIGHT JOIN 操作来创建外部联接。

3.如果试图联接包含备注或 OLE 对象数据的字段,将发生错误。

4.可以联接任何两个相似类型的数字字段。例如,可以联接自动编号和长整型字段,因为它们均是相似类型。然而,不能联接单精度型和双精度型类型字段。

下例展示了如何通过 CategoryID 字段联接 Categories 和 Products 表:

SELECT CategoryName, ProductName

FROM Categories INNER JOIN Products

ON Categories.CategoryID = Products.CategoryID;

在前面的示例中,CategoryID 是被联接字段,但是它不包含在查询输出中,因为它不包含在 SELECT 语句中。若要包含被联接字段,请在 SELECT 语句中包含该字段名,在本例中是指

Categories.CategoryID。

也可以在 JOIN 语句中链接多个 ON 子句,请使用如下语法:

SELECT fields
FROM table1 INNER JOIN table2
ON table1.field1 compopr table2.field1 AND
ON table1.field2 compopr table2.field2) OR
ON table1.field3 compopr table2.field3)];

也可以通过如下语法嵌套 JOIN 语句:

SELECT fields
FROM table1 INNER JOIN
(table2 INNER JOIN [( ]table3
[INNER JOIN [( ]tablex [INNER JOIN ...)]
ON table3.field3 compopr tablex.fieldx)]
ON table2.field2 compopr table3.field3)
ON table1.field1 compopr table2.field2;

注意:LEFT JOIN 或 RIGHT JOIN 可以嵌套在 INNER JOIN 之中,但是 INNER JOIN 不能嵌套于 LEFT JOIN 或 RIGHT JOIN 之中。

二、外连接
1.概念:包括左向外联接、右向外联接或完整外部联接

2.左连接:left join 或 left outer join
(1)左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列

均为空值(null)。
(2)sql语句
select * from table1 left join table2 on table1.id=table2.id

注释:包含table1的所有子句,根据指定条件返回table2相应的字段,不符合的以null显示

3.右连接:right join 或 right outer join
(1)右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
(2)sql语句
select * from table1 right join table2 on table1.id=table2.id

注释:包含table2的所有子句,根据指定条件返回table1相应的字段,不符合的以null显示

4.完整外部联接:full join 或 full outer join
(1)完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
(2)sql语句
select * from table1 full join table2 on table1.id=table2.id

注释:返回左右连接的和(见上左、右连接)

三、交叉连接(完全)

1.概念:没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。(table1和table2交叉连接产生3*3=9条记录)
2.交叉连接:cross join (不带条件where...)
3.等价(与下列执行效果相同)
   A:select * from table1,table2

四.操作实例

表A记录如下:
aID               aNum
1                  a20050111
2                  a20050112
3                  a20050113
4                  a20050114
5                  a20050115

表B记录如下:
bID               bName
1                   2006032401
2                  2006032402
3                  2006032403
4                  2006032404
8                  2006032408

实验如下:
1.left join

sql语句如下:
select * from A
left join B
on A.aID = B.bID

结果如下:
aID               aNum                          bID                  bName
1                   a20050111                1                      2006032401
2                   a20050112                2                     2006032402
3                   a20050113                3                     2006032403
4                   a20050114                4                     2006032404
5                   a20050115                NULL              NULL
(所影响的行数为 5 行)

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

2.right join
sql语句如下:
select * from A
right join B
on A.aID = B.bID
结果如下:
aID               aNum                          bID                  bName
1                   a20050111                1                      2006032401
2                   a20050112                2                     2006032402
3                   a20050113                3                     2006032403
4                   a20050114                4                     2006032404
NULL           NULL                          8                     2006032408
(所影响的行数为 5 行)
结果说明:
        仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.

3.inner join
sql语句如下:
select * from A
innerjoin B
on A.aID = B.bID

结果如下:
aID               aNum                          bID                  bName
1                   a20050111                1                      2006032401
2                   a20050112                2                     2006032402
3                   a20050113                3                     2006032403
4                   a20050114                4                     2006032404

结果说明:
        很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.

转载于:https://www.cnblogs.com/eagle1986/archive/2009/12/28/1634256.html

SQL中的join连接相关推荐

  1. SQL中cross join,left join,right join ,full join,inner join 的区别

    http://blog.csdn.net/sgivee/article/details/5081350 SQL中cross join,left join,right join ,full join,i ...

  2. 02-SQL语句给表起别名SQL中的表连接

    什么情况下需要给表起别名? 1.表名比较长 2.当需要在多个表中进行查询并把查询内容同时输出的时候 3.当需要进行表连接的时候(其实和2一个意思,一般情况下多个表进行连接主要目的就是为了从多个表中查询 ...

  3. SQL中inner join、left join、right join、outer join之间的区别

    SQL中inner join.left join.right join.outer join之间的区别 举个例子你就能知道了! A表(a1,b1,c1)      B表(a2,b2) a1   b1  ...

  4. 简述SQL中的外连接

    简述SQL中的"外连接" 1.SQL中外连接分为三种:左外连接.右外连接.全外连接. 2.英文书写格式: 左外连接:LEFT OUTER JOIN(LEFT JOIN): 右外连接 ...

  5. SQL中inner join、outer join和cross join的区别

    对于SQL中inner join.outer join和cross join的区别很多人不知道,我也是别人问起,才查找资料看了下,跟自己之前的认识差不多,如果你使用join连表,缺陷的情况下是inne ...

  6. SQL 中left join ,inner join,right join的区别

    2019独角兽企业重金招聘Python工程师标准>>> sql中存在有左连接  插入 右连接 sql语句 left join ,inner join,right join 进行 wh ...

  7. mysql语句的左外链接_MySQL中的JOIN连接

    一.新手 1+N  模式查询 题目:  查询价格大于 2000 元的商品及其栏目名称 1.  价格大于 2000 元的商品 select goods_id,goods_name,cat_id,shop ...

  8. SQL 中 left join 的底层原理(各种JOIN的复杂度探究)

    01. 前言 写过或者学过 SQL 的人应该都知道 left join,知道 left join 的实现的效果,就是保留左表的全部信息,然后把右表往左表上拼接,如果拼不上就是 null.除了 left ...

  9. 你知道 Sql 中 left join 的底层原理吗?

    总第165篇/张俊红 01.前言 写过或者学过 Sql 的人应该都知道 left join,知道 left join 的实现的效果,就是保留左表的全部信息,然后把右表往左表上拼接,如果拼不上就是 nu ...

最新文章

  1. Appium+python自动化(八)- 初识琵琶女Appium(千呼万唤始出来,犹抱琵琶半遮面)- 下(超详解)...
  2. tcp 测试工具_6款免费网络延迟测试工具
  3. SQL语句对于NUll的筛选
  4. Linux命令行–基本的bash shell命令
  5. mysql6.5 操作日志
  6. docker 批量删除容器和镜像
  7. SQL Server 2012安装图解
  8. Shell 获取函数返回结果
  9. POJ 3177 Redundant Paths POJ 3352 Road Construction(双连接)
  10. 人工智能十大算法及应用,十大人工智能算法公司
  11. 【文献阅读】MMQA——基于图像、文本和表格的问答(Alon Talmor等人,ICLR,2021)
  12. 内存取证-volatility工具的使用 (史上更全教程,更全命令)
  13. Laravel中pluck的使用——返回指定的字段值信息列表
  14. 小程序提示:downloadFile:fail 发生了 SSL 错误,无法建立与该服务器的安全连接
  15. Q3营收利润双降,新作将成Take-Two逆势大爆发的动力?
  16. 单例模式与反射的攻防之【 道高一尺,魔高一丈 】
  17. 【软件测试面试】面试技巧,让面试官记住的自我介绍,疯狂收割offer.....
  18. 乐视电商云的整体架构与技术实现
  19. Leetcode 1856. Maximum Subarray Min-Product [Python]
  20. uboot源码分析-启动第一阶段

热门文章

  1. 高中选的美术将来能考计算机学校吗,北京中考美术考上美术高中以后上考大学一定要考美术专业的大学?好考美术高中...
  2. 当世界从移动优先变为AI优先,未来企业竞争将赢在“维度”
  3. TRACERT命令及用法
  4. 基于Redis的微博的注册
  5. 计算机软件知识pdf,[计算机软件及应用]PDF基础知识.doc
  6. php编写半径为4圆的周长,在C++中编写程序输入半径计算圆的周长和面积,来学习吧...
  7. android content provider线程安全,Android ContentProvider的线程安全(二)
  8. dbscan论文_重点关注!我校论文被CCF A类人工智能国际顶级学术会议IJCAI录用
  9. 针织布横条疵点解决方案
  10. 16、Flutter Widget - PageView;