多表操作_外键_关联表_查询
@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 delete
或on 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 * from 表1 cross join 表2 ;
说明:cross join
连接两个要查询的表。该语句可查询两个表中所有数据组合。
建立 department、employee 表:
查询://16条
完。
1、3、2 内连接
只有满足条件的记录才能出现在查询记录中!
基本语法:
select 查询字段 from 表1 [inner] join 表2
on 表1.关系字段= 表2.关系字段;
说明:
inner join 连接两个表
on 指定连接条件
图解:
练习:
在MySql中可以使用where
条件语句实现相同功能!
where 和 inner join 区别:
(1)where:条件判断句,where后可直接添加其他条件。
(2)inner join 内连接语句,后不可以直接添加条件。
自连接查询:
设计两个表为同一张表。逻辑上为两个表。
说明:
select 表1别名 from 表1 表1别名1 join 表1 表1别名2 on 连接条件;
1、3、3 外连接
分类:
(1)左连接 : 左表
返回包括左表中所有记录和右表中符合连接条件的记录。
(2)右连接 : 右表
返回包括右表中所有记录和左表中符合连接条件的记录。
基本语法:
select 所有字段 from 表1 left | right [outer] join 表2
on 表1.关系字段=表2.关系字段
where 条件;
左连接图解:
右连接图解:
1、LEFT JOIN (左连接)
左连接的结果包括left join子句中指定的左表的所有记录,以及满足连接条件的记录。
2、RIGHT JOIN (右连接)
返回结果:
指定右表的所有记录和满足连接条件的记录。 若右表中某条记录在左表无匹配,则显示为null.
1、3、4 符合条件连接查询
定义:
在连接查询中,添加过滤条件来限制查询结果,使查询结果更精确!!
上一篇: 从Kudu中导出、导入数据
下一篇: Java并发Lock接口