欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

多表操作_外键_关联表_查询

程序员文章站 2022-05-05 16:33:32
...
@author StormWangxhu
@date 2017/11/27

1、1 外键

1、1、1 什么是外键
(1)定义:
外键是指引用另一个表中的一列或多列,被引用的列具有主键约束或唯一约束。

(2)目的:
外键用于建立和加强两个表数据之间的连接。

(3)概念:
a. 主表: 被引用的表。 如 grade表
b.从表 : 引用外键的表 。如 student表

两者关系: 主从关系。

举例说明:
先创建grade 、student表

多表操作_外键_关联表_查询

student:

多表操作_外键_关联表_查询

两者关系:

多表操作_外键_关联表_查询

从查询结果来看:
gid 为student 表的外键,且依赖于grade 表中的id键。

注意:
(1)建立外键的表必须为 InnoDB型,不能是临时表。在MySql中只有InooDB类型的表才支持外键。
(2)定义外键名时,不能加引号。 如 constraint’FK_ID’或constraint “FK_ID”。

1、1、2 为表添加外键约束
建立外键的基本语法:

alter table 从表名 add constraint FK_ID foreign key(外键字段名) references 主表名(主键字段名);

补充:
当主表中删除数据时,从表中数据也应该删除,否则会产生垃圾数据。MySql中可以在建立外键时添加 on deleteon update子句告诉数据库,怎样避免垃圾数据的产生。

alter table 从表名 add constraint FK_ID foreign key(外键字段名) references 主表名(主键字段名);
[on delete{cascade | set null | no action | restrict}]
[on update{cascade | set null | no action | restrict}]

具体参数说明:

多表操作_外键_关联表_查询

1、1、3 删除外键约束

当需要解除两表的关联关系时,需要解除:

基本语法:

alter table 表名 drop foreign key 外键名  ;

多表操作_外键_关联表_查询
从表中可以看出,student表中的外键约束已成功删除!

1、2 操作关联表

1、2、1 关联关系

MySql中数据表之间的关联关有三种。
如下:
1、多对一

多表操作_外键_关联表_查询

注意:
在多对一的表关系中,应该将外键建在多的一方,否则会造成数据的余!!!

2、多对多

多表操作_外键_关联表_查询

3、一对一

多表操作_外键_关联表_查询

注意:
这种关系在数据库中并不常见,因为以这种方式存储的信息通常会放在一个表中。在实际开发中,一对一关联关系可以应用到以下几个方面。
(1)、分割具有很多列的表
(2)、由于安全原因,隔离表的一部分。
(3)、保存临时数据,且可以毫不费力的通过删除该表而删除这些数据。

1、2、2 添加数据

实际开发,最常见关系 ; 多对一 关系 !

在grade 和 student 中添加外键约束来建立两个表的关联关系!
步骤一: 添加外键约束

多表操作_外键_关联表_查询

1、2、3 删除数据

在除数据时,删除顺序:

先从表后主表 !否则会报错!

多表操作_外键_关联表_查询

1、3连接查询

分类:
(1)交叉查询
(2)内连接查询
(3)外链接查询

1、3、1交叉连接

返回笛卡尔积:
即 返回第一个表中符合查询条件的数据行 乘 第二个表中符合查询条件的数据行数。

如department表中有4个部门,employee表中有4个员工,则有4*4=16条数据。

基本语法:

select * from1 cross join2 ;

说明:cross join连接两个要查询的表。该语句可查询两个表中所有数据组合。

建立 department、employee 表:

多表操作_外键_关联表_查询

查询://16条

多表操作_外键_关联表_查询
完。

1、3、2 内连接

只有满足条件的记录才能出现在查询记录中!

基本语法:

select 查询字段 from1 [inner] join2 
on1.关系字段= 表2.关系字段; 

说明:

inner join 连接两个表
on   指定连接条件

图解:

多表操作_外键_关联表_查询
练习:

多表操作_外键_关联表_查询

在MySql中可以使用where条件语句实现相同功能!

多表操作_外键_关联表_查询

where 和 inner join 区别:
(1)where:条件判断句,where后可直接添加其他条件。
(2)inner join 内连接语句,后不可以直接添加条件。

自连接查询:

设计两个表为同一张表。逻辑上为两个表。

多表操作_外键_关联表_查询

说明:

select1别名 from11别名1 join11别名2 on 连接条件; 

1、3、3 外连接

分类:
(1)左连接 : 左表
返回包括左表中所有记录和右表中符合连接条件的记录。
(2)右连接 : 右表
返回包括右表中所有记录和左表中符合连接条件的记录。

基本语法:

select 所有字段 from1 left | right [outer] join2
on1.关系字段=表2.关系字段  
where 条件;

左连接图解:

多表操作_外键_关联表_查询

右连接图解:

多表操作_外键_关联表_查询

1、LEFT JOIN (左连接)
左连接的结果包括left join子句中指定的左表的所有记录,以及满足连接条件的记录。

多表操作_外键_关联表_查询

2、RIGHT JOIN (右连接)

返回结果:
指定右表的所有记录和满足连接条件的记录。 若右表中某条记录在左表无匹配,则显示为null.
多表操作_外键_关联表_查询

1、3、4 符合条件连接查询

定义:

在连接查询中,添加过滤条件来限制查询结果,使查询结果更精确!!

相关标签: 数据库