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

来源:互联网 发布:软件开发需要什么 编辑:程序博客网 时间:2024/06/05 16:07
@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] join2on1.关系字段=表2.关系字段  where 条件;

左连接图解:

这里写图片描述

右连接图解:

这里写图片描述

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

2、RIGHT JOIN (右连接)

返回结果:
指定右表的所有记录和满足连接条件的记录。 若右表中某条记录在左表无匹配,则显示为null.
这里写图片描述

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

定义:

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

原创粉丝点击