『数据库』朴实无华的数据库多表查询,连接查询、笛卡尔积
『数据库』 朴实无华且枯燥的数据库教程–入门必看!(不收藏,真的吃亏了)
文章目录
- 一、交
- 二、并
- 三、差
- 四、笛卡尔积
- 五、连接查询
一、交
(会用到连接运算,固定写法,连接运算在下面不用着急看)
先假设两张表:
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同名“风骨散人”
如果有什么想看的,可以私信我,如果在能力范围内,我会发布相应的博文!
感谢大家的阅读!『数据库』朴实无华的数据库多表查询,连接查询、笛卡尔积相关推荐
- 『数据库』朴实无华的数据库绪论
『数据库』 朴实无华且枯燥的数据库教程–入门必看!(不收藏,真的吃亏了) 文章目录 数据库系统概述 数据模型 概念模型 数据库系统结构 数据库系统的组成 数据库系统概述 一.四个基本概念 1.数据(D ...
- 『数据库』朴实无华且枯燥的数据库文章--关系数据理论
『数据库』 朴实无华且枯燥的数据库教程–入门必看!(不收藏,真的吃亏了) 文章目录 问题的提出 规范化 数据依赖的公理系统 模式的分解 小结 问题的提出 一.概念回顾 关系:描述实体.属性.实体间的联 ...
- 『数据库』这篇数据库的文章真没人看--数据库完整性
『数据库』 朴实无华且枯燥的数据库教程–入门必看!(不收藏,真的吃亏了) 文章目录 实体完整性 参照完整性 用户定义的完整性 完整性约束命名子句 域中的完整性限制 触发器 激活触发器 删除触发器 小结 ...
- 数据库SQL语言学习--上机练习2(连接查询 嵌套查询)(持续更新中)
数据库SQL语言学习--上机练习2(连接查询 嵌套查询)(持续更新中) 上机练习2 1. 启动SQL Server 2008中的 SQL Server Management ...
- [亲测]Oracle查询--单表查询,连接查询(一)
ORACLE查询(单表查询,连接查询) 一.单表查询 (一)简单条件查询 1. 查询水表编号为 30408 的业主记录 ( 精确查询 ) select * from t_owners where wa ...
- mysql 三个表内连接查询_MySQL5.5多表之连接查询
连接查询 关系型数据库管理系统中,通常将每个实体的所有信息存放在一张表中,当查询数据时,通过连接操作查询多个表中的实体信息,当两个或多个表中存在相同意义的字段时,便可以通过这些字段对不同的表进行连接查 ...
- 怎么提高大表和小表的连接查询效率?
怎么提高大表和小表的连接查询效率? 我想到会不会和大表和小表的前后顺序有关系. 小表优先能极大减少比对次数 效率更好 例子: a表10条记录 b表10000条记录 连接条件是a.id = b.id 假 ...
- mysql多张表join_mysql 连接查询(多表查询)+子查询-初学教程 3【重点】
第一部分:https://zhuanlan.zhihu.com/p/63217422 第二部分:https://zhuanlan.zhihu.com/p/64153448 Day3 九.连接查询 1. ...
- SELECT高级查询——连接查询、子查询(多表数据查询)
在实际中,经常是从多张表中查询数据.本节学习多表连接查询.子查询等高级SELECT语句的应用. 1.简单连接查询 多表查询是指SELECT命令中显示的列来源于多个数据表: 连接查询将多个表以某个或某些 ...
最新文章
- 几种软负载均衡策略分析
- Spring可扩展Schema标签
- Rabbitmq java.util.concurrent.TimeoutException小问题解决
- java.io.StreamCorruptedException: invalid type code: AC错误的解决方法
- 错过了多次捞钱的机会
- “飞跃四十载 同发展·共繁荣”巡回展在江苏举行
- 心系冬奥 翰墨传情 |当代书画名家为奥运加油书画推介展【姜萌篇】
- iOS 录音及播放 音波图波形
- 如何设置三线表线条的粗细
- 快速学习Ant Design-简介
- 内存CL-RCD-RP-RAS含义
- 微信云控源码帮您快速复制营销
- 服务器接显示器重影,学生能够选择影音服务器中的考试试卷进行自测测试结束系统将自动批阅并显示标.doc...
- 100层楼,2个鸡蛋,最少要几次才能测试出鸡蛋能承受的最大楼层?
- 用C语言编写简化版银行系统:ATM取款机(数组版)
- Qt中文乱码原因及解决方案
- java文件输入输出
- 编码方法论:设计数据结构
- Ubuntu WPS系统缺失字体symbol、wingdings、wingdings wingdings webding
- 人工智能站在风口 云计算指数大涨7.96%
热门文章