天涯论坛

 找回密码
 立即注册
搜索
查看: 41|回复: 2

Mysql的 4种表连接方式

[复制链接]

2963

主题

144

回帖

9913万

积分

论坛元老

Rank: 8Rank: 8

积分
99139411
发表于 2024-8-4 15:07:01 | 显示全部楼层 |阅读模式

以前读书学习的是SQL2000,深入学习 过MySQL,今天给大众分享一下数据查找里面的表连接。

今天在看一个遗留系统的数据表的时候发掘平时查询的视图是FULL OUT JOIN的,引起平时的数据记录要进行有些限制性处理,其实能够设置视图各表为右外连接并在视图上设置各列的排序和筛选要求能够达到效果。

联接要求可在FROM或WHERE子句中指定,意见在FROM子句中指定联接要求。WHERE和HAVING子句能够包括搜索要求,以进一步筛选联接要求所选的行。    

联接可分为以下几类:    

1、内联接(典型的联接运算,运用像 =  或 <> 之类的比较运算符)。包含相等联接和自然联接。     

内联接运用比较运算符根据每一个表共有的列的值匹配两个表中的行。例如,检索 students和courses表中学生标识号相同的所有行。

2、外联接。外联接能够是左向外联接、右向外联接或完整外边联接。     

在 FROM子句中指定外联接时,能够由下列几组关键字中的一组指定:     

1)LEFT  JOIN或LEFT OUTER JOIN     

左向外联接的结果集包含  LEFT OUTER子句中指定的左表的所有行,而不仅是联接列所匹配的行。倘若左表的某行在右表中匹配行,则在关联联的结果集行中右表的所有选取列表列均为空值。

2)RIGHT  JOIN 或 RIGHT  OUTER  JOIN     

右向外联接是左向外联接的反向联接。将返回右表的所有行。倘若右表的某行在左表中匹配行,则将为左表返回空值。

3)FULL  JOIN 或 FULL OUTER JOIN

完整外边联接返回左表和右表中的所有行。当某行在另一个表中匹配行时,则另一个表的选取列表列包括空值。倘若表之间有匹配行,则全部结果集行包括基表的数据值。   

3、交叉联接   

交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接叫作作笛卡尔积。

FROM 子句中的表或视图可经过内联接或完整外边联接按任意次序指定;然则,用左或右向外联接指定表或视图时,表或视图的次序很重要。相关运用左或右向外联接摆列表的更加多信息,请参见运用外联接。     

例子:   

-------------------------------------------------

  a表     id   name     b表     id   job   parent_id   

              1   张3                   1     23     1   

              2   李四                 2     34     2   

              3   王武                 3     34     4       

a.id   同    parent_id   存在关系

--------------------------------------------------    

 1) 内连接   

  select   a.*,b.*   from   a   inner   join   b     on   a.id=b.parent_id;       

  结果是     

1   张3                   1     23     1

  2   李四                  2     34     2   

    

  2)左连接   

  select   a.*,b.*   from   a   left   join   b     on   a.id=b.parent_id;       

结果是

  1   张3                   1     23     1   

  2   李四                  2     34     2   

  3   王武                  null   

 3) 右连接   

select   a.*,b.*   from   a   right   join   b     on   a.id=b.parent_id;

  结果是     

  1   张3                   1     23     1   

  2   李四                  2     34     2   

null                       3     34     4

    

 4) 完全连接   

  select   a.*,b.*   from   a   full   join   b     on   a.id=b.parent_id;

  结果是     

  1   张3                  1     23     1   

2   李四                 2     34     2

  null                   3     34     4   

  3   王武                 null

重视因为mysql不支持全连接,那样必须UNION 把上下连接联合起来查找,才能够得到结果

select   a.*,b.*   from   a   left   join   b     on   a.id=b.parent_id

 UNION

  select   a.*,b.*   from   a   right   join   b     on   a.id=b.parent_id;

保藏给自己,分享给伴侣





上一篇:2020年入门数据分析选取Python还是SQL?七个常用操作对比!
下一篇:开工大吉,Oracle系列五六章合集----分页和去重、表连接
回复

使用道具 举报

0

主题

936

回帖

3

积分

新手上路

Rank: 1

积分
3
发表于 2024-8-29 15:28:43 | 显示全部楼层
“BS”(鄙视的缩写)‌
回复

使用道具 举报

3046

主题

3万

回帖

9606万

积分

论坛元老

Rank: 8Rank: 8

积分
96065856
发表于 2024-10-1 17:57:03 | 显示全部楼层
回顾历史,我们感慨万千;放眼未来,我们信心百倍。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|天涯论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-22 20:31 , Processed in 0.103360 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.