等值链接、自链接、天然链接、左右外链接、内链接、全链接讲解

各链接的由来

       一、当业务系统演变复杂时,系统内部数据库的表结构也会随着复杂化,而不在是简单的单表操做。某个系统业务,每每伴随着是多个表之间的链接查询。mysql

       二、为了消除多表查询中出现的笛卡尔积效应致使的多冗余数据。sql

各链接的讲解

    为了能帮助你们理解各链接的状况和区别,所以建立了两张表,具体表结构和数据以下:数据库

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”字段。spa

    

4. 左右外链接

    左外链接在进行多表联合查询时经过“left join.. on ”关键字来链接多张表之间符合条件的字段,其查询的结果会返回左表的全部数据,以及左右表交集的数据,若右表记录不足,则使用null来表示须要筛选的右表的值。计算机网络

     

   

      

   右外链接在进行多表联合查询时经过“right join.. on ”关键字来链接多张表之间符合条件的字段,其查询的结果会返回右表的全部数据,以及左右表交集的数据,若左表记录不足,则使用null来表示须要筛选的右表的值。3d

 

 

5. 内链接

    内外接在进行多表联合查询时经过“inner join.. on ”关键字来链接多张表之间符合条件的字段,其查询的结果左右表匹配的数据。code

    

6. 全链接

    全链接在进行多表联合查询时经过full join.. on ”关键字来链接多张表之间符合条件的字段,其查询的结果除了会返回左右表匹配的数据,还会返回两个表的全部行。可是mysql中没有全链接,也可使用"UNION " 来实现full join 功能,union 链接左右外链接。blog

 

  

用心对待,相信美好东西会如期归来。ღ( ´・ᴗ・` )比

相关文章
相关标签/搜索