等值连接、自连接、自然连接、左右外连接、内连接、全连接讲解
各连接的由来
1、当业务系统演变复杂时,系统内部数据库的表结构也会随着复杂化,而不在是简单的单表操作。某个系统业务,往往伴随着是多个表之间的连接查询。
2、为了消除多表查询中出现的笛卡尔积效应导致的多冗余数据。
各连接的讲解
为了能帮助大家理解各连接的情况和区别,因此创建了两张表,具体表结构和数据如下:
DROP TABLE IS EXISTS `student`; DROP TABLE IS EXISTS `course`; DROP TABLE IS EXISTS `sc`; -- 学生表 CREATE TABLE student ( `sid` INT NOT NULL AUTO_INCREMENT, `snum` INT NOT NULL PRIMARY KEY, `sname` VARCHAR (20) NOT NULL, `sage` TINYINT, `sclass` SMALLINT NOT NULL, UNIQUE KEY `student_num` (`sid`) # 最后不能加',',否则会报错 ) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8; # 使用'='的都放在student()之外。 INSERT INTO `student` ( `snum`, `sname`, `sage`, `sclass` ) VALUES (20201101, 'zhangsan', 20, 150), (20201102, 'lisi', 18, 151), (20201103, 'wangwu', 19, 151), (20201104, 'zhaoliu', 18, 150), (20201105, 'qianqi', 21, 151), (20201106, 'sunba', 20, 152); -- 课程表 CREATE TABLE course ( `cid` INT NOT NULL AUTO_INCREMENT, `cnum` INT NOT NULL PRIMARY KEY, `cname` VARCHAR (20) NOT NULL, UNIQUE KEY `course_num` (`cid`) # 最后不能加',',否则会报错 ) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8; # 使用'='的都放在student()之外。 INSERT INTO `course` ( `cnum`, `cname` ) VALUES (101, '数据结构'), (102, '编译原理'), (103, '计算机网络'), (105,'计算机组成原理'), (106, '数据库'); -- 学生课程中间表 CREATE TABLE `sc` ( `scid` INT NOT NULL UNIQUE AUTO_INCREMENT, `snum` INT NOT NULL, `cnum` INT NOT NULL, `grade` SMALLINT, PRIMARY KEY (`snum`, `cnum`) ) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8; INSERT INTO `sc` ( `snum`, `cnum`, `grade` ) VALUES (20201101, 101, 85), (20201102, 101, 55), (20201103, 101, 90), (20201101, 102, 88), (20201102, 102, 75), (20201103, 102, 58), (20201101, 103, 72), (20201102, 103, 80), (20201103, 103, 92);
1. 等值连接
等值连接也称为显示内连接,在进行多表联合查询时通过“=”等号来连接多张表之间相字段对应的值,其产生的结果会出现重复列。意思是,如果对多张表进行等值连接操作,那么前提要求是这多张表之间必须有相同的字段名。比如上述表中,课程表和学生课程中间表均有相同的“cnum”字段,学生表与学生课程中间表均有相同的“snum”字段。
2. 自连接
自连接是一种特殊的连接,它的本质是将一个表与它自身做连接, 若要在一个表中查找具有相同列值的行,则可以使用自连接。使用自连接时需为表指定两个别名,且对所有列的引用均要用别名限定。
3. 自然连接
自然连接是一种特殊的等值连接,在进行多表联合查询时通过“natural join”关键字来连接多张表之间相同字段对应的值,其产生的结果会将重复列只保留一个。如果对多张表进行自然连接操作,那么前提要求是这多张表之间必须有相同的字段名。比如上述表中,课程表和学生课程中间表均有相同的“cnum”字段,学生表与学生课程中间表均有相同的“snum”字段。
4. 左右外连接
左外连接在进行多表联合查询时通过“left join.. on ”关键字来连接多张表之间符合条件的字段,其查询的结果会返回左表的所有数据,以及左右表交集的数据,若右表记录不足,则使用null来表示需要筛选的右表的值。
右外连接在进行多表联合查询时通过“right join.. on ”关键字来连接多张表之间符合条件的字段,其查询的结果会返回右表的所有数据,以及左右表交集的数据,若左表记录不足,则使用null来表示需要筛选的右表的值。
5. 内连接
内外接在进行多表联合查询时通过“inner join.. on ”关键字来连接多张表之间符合条件的字段,其查询的结果左右表匹配的数据。
6. 全连接
全连接在进行多表联合查询时通过full join.. on ”关键字来连接多张表之间符合条件的字段,其查询的结果除了会返回左右表匹配的数据,还会返回两个表的所有行。但是mysql中没有全连接,也可以使用"UNION " 来实现full join 功能,union 连接左右外连接。
用心对待,相信美好东西会如期归来。ღ( ´・ᴗ・` )比
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Elasticsearch 索引生命周期管理
引入索引生命周期的作用 在 Elasticsearch的日常管理中,有很多如系统日志,行为数据等方面的应用场景,这些场景的特点是数据量非常大,并且随着时间的增长索引的数量也会持续增长,然而这些场景基本上只有最近一段时间的数据有使用价值或者会被经常使用(热数据),而历史数据几乎没有作用或者很少会被使用(冷数据),这个时候就需要对索引进行一定策略的维护管理甚至是删除清理,否则随着数据量越来越多除了浪费磁盘与内存空间之外,还会严重影响 Elasticsearch 的性能。 在 Elastic Stack 6.6 版本后推出了新功能 Index Lifecycle Management(索引生命周期管理),支持针对索引的全生命周期托管管理,并且在 Kibana 上也提供了一套UI界面来配置策略。 索引生命周期常见的阶段 hot: 索引还存在着大量的读写操作。 warm:索引不存在写操作,还有被查询的需要。 cold:数据不存在写操作,读操作也不多。 delete:索引不再需要,可以被安全删除。 注意:以上只是索引生命周期阶段的常见定义,具体策略可以根据实际业务情况来定义。 部署Elastics...
- 下一篇
HTTP协议超级详解
HTTP协议简介 超文本传输协议(英文:HyperTextTransferProtocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。 HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1。 2014年12月,互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis(httpbis)工作小组将HTTP/2标准提议递交至IESG进行讨论,于2015年2月17日被批准。 HTTP/2标准于2015年5月以RFC 7540正式发表,取代HTTP 1.1成为HTTP的实现标准。 HTTP协议概述 HTTP是一个客户端终端(用户)和服...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2全家桶,快速入门学习开发网站教程
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境