连表背景

在数据表中存储信息时,若将相关信息都存储在一张表中,则1、表的组织结构复杂不清晰;2、重复信息造成空间浪费;3、修改时动一发而牵全身,扩展性差。所以需要将相关信息存储在不同表里,利用相关字段建立联系。

表与表之间的关系

一对一

a表中的一条记录对应b表中的唯一一条记录,反之亦然。

实现方法:建立外键关联

一对多或多对一

a表中的一条记录对应b表中的多条记录,而b表中的一条记录不能对应a表中的多条记录。即单向的一对多关系。

实现方法:建立外键关联

多对多

a表中一条记录对应b表中多条记录,b表中一条记录对应a表中的多条记录。即双向的一对多关系

实现方法:建立第3张表,表中设置2个分别关联a表和b表的外键。

course表,teacher表

mysql> select * from course;
+-----+-------------+------------+
| cid | course_name | teacher_id |
+-----+-------------+------------+
|   1 | 生物         |          1 |
|   2 | 物理         |          2 |
|   3 | 化学         |          3 |
|   4 | 语文         |          0 |
+-----+-------------+------------+

mysql> select * from teacher;
+-----+--------------+
| tid | teacher_name |
+-----+--------------+
|   1 | 张磊          |
|   2 | 于今          |
|   3 | 王杰          |
|   4 | 李毅          |
+-----+--------------+

笛卡尔积

两张表交叉连接,不适用任何匹配条件,生成笛卡尔积

交叉连接

mysql>  select * from course,teacher;
+-----+-------------+------------+-----+--------------+
| cid | course_name | teacher_id | tid | teacher_name |
+-----+-------------+------------+-----+--------------+
|   1 | 生物        |          1 |   1 | 张磊         |
|   2 | 物理        |          2 |   1 | 张磊         |
|   3 | 化学        |          3 |   1 | 张磊         |
|   4 | 语文        |          0 |   1 | 张磊         |
|   1 | 生物        |          1 |   2 | 于今         |
|   2 | 物理        |          2 |   2 | 于今         |
|   3 | 化学        |          3 |   2 | 于今         |
|   4 | 语文        |          0 |   2 | 于今         |
|   1 | 生物        |          1 |   3 | 王杰         |
|   2 | 物理        |          2 |   3 | 王杰         |
|   3 | 化学        |          3 |   3 | 王杰         |
|   4 | 语文        |          0 |   3 | 王杰         |
|   1 | 生物        |          1 |   4 | 李毅         |
|   2 | 物理        |          2 |   4 | 李毅         |
|   3 | 化学        |          3 |   4 | 李毅         |
|   4 | 语文        |          0 |   4 | 李毅         |
+-----+-------------+------------+-----+--------------+

 

内连接

 

mysql> select * from course inner join teacher on course.teacher_id=teacher.tid;

+-----+-------------+------------+-----+--------------+
| cid | course_name | teacher_id | tid | teacher_name |
+-----+-------------+------------+-----+--------------+
|   1 | 生物         |          1 |   1 | 张磊         |
|   2 | 物理         |          2 |   2 | 于今         |
|   3 | 化学         |          3 |   3 | 王杰         |
+-----+-------------+------------+-----+--------------+

 

外连接之左连接

 

mysql> select * from course left join teacher on course.teacher_id=teacher.tid;
+-----+-------------+------------+------+--------------+
| cid | course_name | teacher_id | tid  | teacher_name |
+-----+-------------+------------+------+--------------+
|   1 | 生物         |          1 |    1 | 张磊         |
|   2 | 物理         |          2 |    2 | 于今         |
|   3 | 化学         |          3 |    3 | 王杰         |
|   4 | 语文         |          0 | NULL | NULL         |
+-----+-------------+------------+------+--------------+

 

外连接之右连接

 

mysql> select * from course right join teacher on course.teacher_id=teacher.tid;
+------+-------------+------------+-----+--------------+
| cid  | course_name | teacher_id | tid | teacher_name |
+------+-------------+------------+-----+--------------+
|    1 | 生物         |          1 |   1 | 张磊         |
|    2 | 物理         |          2 |   2 | 于今         |
|    3 | 化学         |          3 |   3 | 王杰         |
| NULL | NULL        |       NULL |   4 | 李毅         |
+------+-------------+------------+-----+--------------+

 

版权声明:本文为mingkong-z原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/mingkong-z/articles/9205796.html