前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >『数据库』朴实无华的数据库多表查询,连接查询、笛卡尔积

『数据库』朴实无华的数据库多表查询,连接查询、笛卡尔积

作者头像
风骨散人Chiam
发布2020-10-28 11:06:06
5270
发布2020-10-28 11:06:06
举报
文章被收录于专栏:CSDN旧文

『数据库』 朴实无华且枯燥的数据库教程–入门必看!(不收藏,真的吃亏了)

文章目录

      • 一、交
      • 二、并
      • 三、差
      • 四、笛卡尔积
      • 五、连接查询

一、交

(会用到连接运算,固定写法,连接运算在下面不用着急看) 先假设两张表: Table NSA1:

Name

Sex

Age

张三

18

李四

跨性别者

21

王五

18

韩七

12

Table NSA2:

Name

Sex

Age

张三

18

李四

21

王五

18

赵六

18

韩七

12

代码语言:javascript
复制
SELECT a.Name,a.Sex FROM NSA1 a 
INNER JOIN 
NSA2 b ON a.Name=b.Name AND a.Sex =b.Sex 

等价于

代码语言:javascript
复制
SELECT a.Name,a.Sex FROM NSA1 a 
INNER JOIN 
NSA2  b USING(Name ,Sex )

Name

Sex

Age

张三

18

王五

18

二、并

先假设两张表: Table NSA1:

Name

Sex

Age

张三

18

李四

21

王五

18

韩七

12

Table NSA2:

Name

Sex

Age

张三

18

李四

21

王五

18

赵六

18

韩七

12

代码语言:javascript
复制
SELECT Name,Sex FROM NSA1 
UNION ALL
SELECT Name,Sex FROM NSA1 

Name

Sex

Age

张三

18

李四

21

王五

18

韩七

12

张三

18

李四

21

王五

18

赵六

18

韩七

12

如果执行:

代码语言:javascript
复制
SELECT Name,Sex FROM NSA1 
UNION 
SELECT Name,Sex FROM NSA1 

Name

Sex

Age

张三

18

李四

21

王五

18

韩七

12

赵六

18

注释:union自带去重

三、差

(会用到连接运算,固定写法,连接运算在下面不用着急看) 先假设两张表: Table NSA1:

Name

Sex

Age

张三

18

李四

21

王五

18

赵六

18

韩七

12

Table NSA2:

Name

Sex

Age

张三

18

李四

21

王五

18

韩七

12

代码语言:javascript
复制
SELECT a.Name, a.Sex FROM  NSA1 a 
LEFT JOIN NSA2 b 
ON a.Name= b.Name
AND a.Sex= b.Sex
WHERE b.Name IS NULL 

Name

Sex

Age

赵六

18

四、笛卡尔积

其实所有的链接运算都是都是建立在笛卡尔积上的,笛卡尔积就是不舍弃任何全外连接,可以这么理解,但是cross join 象征着返回所有的情况,默认不使用 where进行过滤的。 举例: Table Name :

Name

朱小明

刘小华

Table Subject:

Subject

语文

数学

法律

代码语言:javascript
复制
select * from Name  cross join Subject order by Name;

Name

Subject

刘小华

数学

刘小华

法律

刘小华

语文

朱小明

法律

朱小明

语文

朱小明

数学

五、连接查询

在这里插入图片描述
在这里插入图片描述

连接运算是关系的二目运算.关系R与关系S的连接运算是从两个关系的广义笛卡尔积中选取属性间满足一定条件(称为连接条件,记为AθB)的元组形成一个新关系。

在这里插入图片描述
在这里插入图片描述

①等值连接

等值连接是从关系R与S的广义笛卡尔积中选取A、B属性相等的那些元组,按照属性相同的行将两(或以上)张表元组匹配连接; 举个例子 ID_Name表

ID

Name

1

大好人

2

大坏蛋

3

猪八戒

4

孙悟空

5

沙和尚

7

唐三藏

8

武松

ID_MingZhu 表

ID

MingZhu

3

西游记

4

西游记

5

西游记

7

西游记

8

水浒传

代码语言:javascript
复制
SELECT * FROM ID_Name N,ID_MingZhu M WHERE N.ID=M.ID;

ID_Name.ID

Name

ID_MingZhu.ID

MingZhu

3

猪八戒

3

西游记

4

孙悟空

4

西游记

5

沙和尚

5

西游记

7

唐三藏

7

西游记

8

武松

8

水浒传

② 自然连接

自然连接是特殊的等值连接,要求两个关系中进行比较的分量必须是同名的属性组,并且在结果中把重复的属性列去掉。

举个例子: ID_Name表

ID

Name

1

大好人

2

大坏蛋

3

猪八戒

4

孙悟空

5

沙和尚

7

唐三藏

8

武松

ID_MingZhu 表

ID

MingZhu

3

西游记

4

西游记

5

西游记

7

西游记

8

水浒传

代码语言:javascript
复制
SELECT * FROM ID_Name N natural join ID_MingZhu M ON N.ID=M.ID;

ID_Name.ID

Name

MingZhu

3

猪八戒

西游记

4

孙悟空

西游记

5

沙和尚

西游记

7

唐三藏

西游记

8

武松

水浒传

③ 左外连接 将返回右表的所有行。如果左表的某行在右表中没有匹配行,则将为右表返回空值左连接: 例子: ID_Name表

ID

Name

1

大好人

2

大坏蛋

3

猪八戒

4

孙悟空

5

沙和尚

7

唐三藏

8

武松

ID_MingZhu 表

ID

MingZhu

3

西游记

4

西游记

5

西游记

7

西游记

8

水浒传

9

红楼梦

代码语言:javascript
复制
SELECT * FROM ID_Name N left join ID_MingZhu M ON N.ID=M.ID;

ID_Name.ID

Name

ID_MingZhu.ID

MingZhuNu

1

大好人

NULL

NULL

2

大坏蛋

NULL

NULL

3

猪八戒

3

西游记

4

孙悟空

4

西游记

5

沙和尚

5

西游记

7

唐三藏

7

西游记

8

武松

8

水浒传

④ 右外连接 将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值; 例子

ID_Name表

ID

Name

1

大好人

2

大坏蛋

3

猪八戒

4

孙悟空

5

沙和尚

7

唐三藏

8

武松

ID_MingZhu 表

ID

MingZhu

3

西游记

4

西游记

5

西游记

7

西游记

8

水浒传

9

红楼梦

代码语言:javascript
复制
SELECT * FROM ID_Name N right join ID_MingZhu M ON N.ID=M.ID;

ID_Name.ID

Name

ID_MingZhu.ID

MingZhuNu

3

猪八戒

3

西游记

4

孙悟空

4

西游记

5

沙和尚

5

西游记

7

唐三藏

7

西游记

8

武松

8

水浒传

NULL

NULL

9

红楼梦

  • 全外连接。 左表和右表都不做限制,所有的记录都显示,两表不足的地方用null 填充

例子 ID_Name表

ID

Name

1

大好人

2

大坏蛋

3

猪八戒

4

孙悟空

5

沙和尚

7

唐三藏

8

武松

ID_MingZhu 表

ID

MingZhu

3

西游记

4

西游记

5

西游记

7

西游记

8

水浒传

9

红楼梦

代码语言:javascript
复制
SELECT * FROM ID_Name N full join ID_MingZhu M ON N.ID=M.ID;

ID_Name.ID

Name

ID_MingZhu.ID

MingZhuNu

1

大好人

NULL

NULL

2

大坏蛋

NULL

NULL

3

猪八戒

3

西游记

4

孙悟空

4

西游记

5

沙和尚

5

西游记

7

唐三藏

7

西游记

8

武松

8

水浒传

NULL

NULL

9

红楼梦

写在最后: Name:风骨散人,目前是一名双非在校大学生,预计考研,热爱编程,热爱技术,喜欢分享,知识无界,希望我的分享可以帮到你!名字的含义:我想有一天我能有能力随心所欲不逾矩,不总是向生活低头,有能力让家人拥有富足的生活而不是为了生计而到处奔波。“世人慌慌张张,不过是图碎银几两。偏偏这碎银几两,能解世间惆怅,可让父母安康,可护幼子成长 …”

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/06/09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、交
  • 二、并
  • 三、差
  • 四、笛卡尔积
  • 五、连接查询
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档