MySQL数据库学习笔记(9)- DQL之表连接(内连接、外连接、自连接)

表连接(JOIN)是在多个表之间通过一定的连接条件,使表之间发生关联,进而能从多个表直接获取数据。

在介绍表连接之前,首先介绍一下外键

1. 外键(foreign key)

外键(foreign key) 为某个表中的一列,它包含另一个表的主键。

下面是一个简单的例子,比如一个学生表studen中,存储学生的信息(学号、姓名、年龄等),另一张成绩表中,记载着学生的成绩(学号、科目、成绩),其中成绩表的学号可以声明为一个外键。
创建表时,SQL语句如下:

2. 内连接与外连接

各种表连接的区别如下表所示:
MySQL数据库学习笔记(9)- DQL之表连接(内连接、外连接、自连接)

交叉连接:没有 WHERE 子句的交叉连接将产生 笛卡尔积 第一个表的行数乘以第二个表的行数等于笛卡尔积和结果集的大小。

下面的列举一个内连接和左连接的示例(右连接左右颠倒就是左连接),MySQL不支持全连接。

下面是学生表 student 中的内容:
MySQL数据库学习笔记(9)- DQL之表连接(内连接、外连接、自连接)

下面是成绩表 score 中的内容:
MySQL数据库学习笔记(9)- DQL之表连接(内连接、外连接、自连接)

内连接 查询语句:

结果如下:
MySQL数据库学习笔记(9)- DQL之表连接(内连接、外连接、自连接)

左连接 查询语句:

这里我们仅仅是把 JOIN 换成可 LEFT JOIN ,其结果如下:
MySQL数据库学习笔记(9)- DQL之表连接(内连接、外连接、自连接)

可以明显的看出,左连接是将A的全部+A和B相交的部分的集合。

3. 自连接

自连接是一种特殊的表连接,它是指相互连接的表在物理上是同一张表,但是在逻辑上是多张表。自连接通常用于表中的数据有层次结构,如区域表、菜单表、商品分类表等。

比如这里是一张区域表 china_area ,表中的内容如下:
MySQL数据库学习笔记(9)- DQL之表连接(内连接、外连接、自连接)

这里的 嫩江县黑河市哈尔滨 他们的pid 都为1,都是属于黑龙江省的
昌平区海淀区 他们的pid都为2,都是属于北京的
可见这个表达到了我们的要求物理上是一张表,逻辑上为多张表

下面是自连接的SQL语句:

查询结果如下:
MySQL数据库学习笔记(9)- DQL之表连接(内连接、外连接、自连接)

You May Also Like

About the Author: admin

喜欢编程、爱游戏,更爱生活。

发表评论

电子邮件地址不会被公开。