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

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

一、交

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

Name Sex Age
张三 18
李四 跨性别者 21
王五 18
韩七 12

Table NSA2:

Name Sex Age
张三 18
李四 21
王五 18
赵六 18
韩七 12
SELECT a.Name,a.Sex FROM NSA1 a 
INNER JOIN 
NSA2 b ON a.Name=b.Name AND a.Sex =b.Sex 

等价于

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
SELECT Name,Sex FROM NSA1 
UNION ALL
SELECT Name,Sex FROM NSA1 
Name Sex Age
张三 18
李四 21
王五 18
韩七 12
张三 18
李四 21
王五 18
赵六 18
韩七 12

如果执行:

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
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
语文
数学
法律
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 水浒传
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 水浒传
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 红楼梦
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 红楼梦
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 红楼梦
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:风骨散人,目前是一名双非在校大学生,预计考研,热爱编程,热爱技术,喜欢分享,知识无界,希望我的分享可以帮到你!名字的含义:我想有一天我能有能力随心所欲不逾矩,不总是向生活低头,有能力让家人拥有富足的生活而不是为了生计而到处奔波。“世人慌慌张张,不过是图碎银几两。偏偏这碎银几两,能解世间惆怅,可让父母安康,可护幼子成长 …”
文章主要内容:
Python,C++,C语言,JAVA,C#等语言的教程
ACM题解、模板、算法等,主要是数据结构,数学和图论
设计模式,数据库,计算机网络,操作系统,计算机组成原理
Python爬虫、深度学习、机器学习
计算机系408考研的所有专业课内容
目前还在更新中,先关注不迷路。微信公众号,cnblogs(博客园),CSDN同名“风骨散人”

如果有什么想看的,可以私信我,如果在能力范围内,我会发布相应的博文!
感谢大家的阅读!😘你的点赞、收藏、关注是对我最大的鼓励!

posted @ 2020-06-09 20:55  风骨散人  阅读(122)  评论(0编辑  收藏  举报