关系型数据库管理系统_多表

一、多表

1.多表的概述

实际开发中,一个项目通常需要很多张表才能完成。

2.外键约束
2.1介绍

外键约束:使用外键约束可以让两张表之间产生一个对应关系,从而保证主从表数据的完整性。

特点:使用在多表中(从表中的外键值必须在主表的主键值中存在)

2.2创建外键约束

新建表时添加外键约束

constraint 外键约束名称 foreign key(外键字段名) references 主表名(主键字段); 

create table 表名(
					id int primary key,
					...,
					constrains 外键名 foreign key(字段) references主表(主键字段)
				)

 为已创建好的表添加外键约束

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

alter table 表名 add constrains 外键名 foreign key(字段) references主表(主键字段);
 2.3删除外键约束

alter table 从表名 drop foreign key 外键约束的名称;

 2.4操作从表

1.向从表中添加数据时,外键值必须在主表的主键值中存在

 2.变更从表中的外键值时,变更的新外键值必须在主表的主键值中存在

2.5操作主表

1.删除主表中数据时,从表中有关联的外键值,设置为null | 直接删除关联数据
2.变更主表中主键值时,从表中有关联的外键值,设置为null | 直接删除关联数据 | 将从表中关联外键值同步为新主键值 

 2.6外键约束的设置

删除时

        RESTRICT(默认)  No action:作用类似,都会检查外键约束
        setNull:删除主表中数据时,将关联从表中的外键值设置为null
        cascade:删除主表中数据时,将关联从表中的数据删除
变更时
        RESTRICT(默认)  No action:作用类似,都会检查外键约束
        setNull:变更主表中主键值时,将关联从表中的外键值设置为null
        cascade:变更主表中主键值时,将关联从表中的外键值变为新的主键值

3.注意事项

1.从表的外键类型必须和主表的主键类型保持一致

2.添加从表数据时,从表中添加的外键值,必须在主表的主键中存在

3.先创建主表,再创建从表。先删除从表,再删除主表

二、多表关系

表与表之间的3种关系举例
一对多关系(最常见)员工表和部门表 学生表和班级表
多对多关系学生表和课程表 用户表和角色表
一对一关系(使用较少)一对一的关系可以设计成一张表

三、多表查询

3.1笛卡尔积
3.1.1笛卡尔积介绍

        交叉连接(CROSS JOIN)是对两个或者多个表进行笛卡儿积操作,表示多个表中的每一行数据任意组合的结果。

3.1.2作用

        笛卡尔积不管是否匹配,都连接。没有实际意义,有理论意义 ,便于理解连接查询的原理。

3.1.3语法格式
select 字段名 from 表1 cross join 表2; 
3.2多表查询的分类
3.2.1内连接查询

特点:通过指定的条件匹配两张表中的数据,匹配上就显示,匹配不上就不显示。

SQL92内连接(隐式)

-- 语法格式:
select 字段,...from 表1,表2 where 条件

SQL99内连接(显式)

-- 语法格式:
select 字段,...from 表1 [inner] join 表2 on 条件;

注意事项

  • 内连接只会显示匹配的数据

  • 内连接不能实现不匹配数据的显示

 3.2.2自连接查询(自连接就是某张表自己和自己关联)

同一张表(自连接)进行内连接

-- 语法格式
select 表名.字段名1,表名.字段名2 from 表名,表名 where 条件;
3.2.3非等值连接

判断条件为非等值判断

-- 语法格式
SQL92:select  字段,...from 表1,表2 where 字段1 between 字段2 and 字段3;
SQL99:select  字段,...from 表1 join 表2 on 字段1 between 字段2 and 字段3;
3.2.4外连接查询

左外连接:以左表为主,左表中的数据全部显示,右表没有匹配的数据,用null填充

-- 语法格式
select 字段,...from 表1 left [outer] join 表2 on 条件;

右外连接:以右表为主,右表中的数据全部显示,左表没有匹配的数据,用null填充

-- 语法格式
select 字段,...from 表1 right [outer] join 表2 on 条件;

全外连接

        注意:MySQL是不支持全外连接的,但是可以通过union实现。

-- 语法结构
(SELECT  列名 FROM 表名 LEFT OUTER JOIN  表名 ON  连接条件) 
UNION 
(SELECT  列名 FROM 表名 RIGHT OUTER JOIN  表名 ON  连接条件);

        特点:将左外连接的结果和右外连接的结果进行合并,合并时去重。 

3.3内连接和外连接总结
3.3.1内连接

内连接:通过条件匹配两张表中的数据,能匹配就显示,不能匹配就不显示

SQL92:select 字段,...from 表1,表2 where 条件;
SQL99:select 字段,...from 表1 [inner] join 表2 on 条件;

 实现:
不同的表进行连接
同一张表(自连接)进行内连接
判断条件为等值判断,等值内连接

   SQL92:select  字段,...from 表1,表2 where 字段1=字段2
   SQL99:select  字段,...from 表1 join 表2 on 字段1=字段2


判断条件为非等值判断,非等值内连接

 SQL92:select  字段,...from 表1,表2 where 字段1 between 字段2 and 字段3;
 SQL99:select  字段,...from 表1 join 表2 on 字段1 between 字段2 and 字段3;
3.3.2外连接

左外连接:以左表为主,左表中的数据全部显示,右表没有匹配的数据,以null填充

select 字段,...from 表1 left [outer] join 表2 on 条件;

-- 不同的表进行左外连接
-- 同一张表(自连接)进行左外连接
-- 判段条件为等值判断,等值左外连接 


   SQL99:select 字段,...from 表1 left join 表2 on 字段1=字段2;

 -- 判断条件为非等值判断,非等值判断左外连接

SQL99:select 字段,...from 表1 left join 表2 on 字段1 between 字段2 and 字段3;

右外连接:以右表为主,右表中的数据全部显示,左表没有匹配的数据,以null填充

select 字段,...from 表1 right [outer] join 表2 on 条件;

 -- 不同的表进行右外连接
-- 同一张表(自连接)进行右外连接
-- 判段条件为等值判断,等值右外连接

SQL99:select 字段,...from 表1 right join 表2 on 字段1=字段2;

-- 判断条件为非等值判断,非等值判断右外连接        

 SQL99:select 字段,...from 表1 right join 表2 on 字段1 between 字段2 and 字段3;


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值