SQL外键约束和多表查询之内外连接

1.SQL外键约束

特点:使用在多表中(从表中的外键值必须在朱标的主键值中存在)
关键词:constrains foreign key references
新建表时添加外键约束:
	constrains 外键名 foreign key(外键字段) references 主表(主键字段)
为已创建好的表添加外键约束:
	alter table 从表名 add constrains 外键名 foreign key(外键字段) references 主表(主键字段);
 外键约束作用:
	1.操作从表
		1.向子表中添加外键值时,添加的外键值必须在主表关联的主键值中存在
		2.修改子表中外键值时,修改后的外键值必须在主表关联的主键值中存在
	2.操作主表
		1.删除主表中的数据时,从表中有关联的外键值,设置为null,或者直接删除外键数据
		2.变更主表中主键值时,从表中有关联的外键值,设置为null,或者直接删除外键数据,或者将从表中关联外键值同步为新主键值
	删除表时:先删除从表,后删除主表
	创建表时:先创建主表,后创建从表
1.删除时:
	1.restrict 默认 No action 作用类似,都会检查外键约束
	2.set null 删除主表中数据时,将关联从表中的外键值设置为null
	3.cascade 删除主表中数据是,将关联从表中的数据删除
2.变更时:
	1.restrict 默认 No action 作用类似,都会检查外键约束
	2.set null 变更主表中数据时,将关联从表中的外键值设置为null
	3.cascade  变更主表中数据时,将关联从表中的外键值变为新值
# 方式一
-- 1.手动删除从表中关联的数据
delete from emp where did = 1;
-- 2.删除主表中的数据
delete from dept where did = 1;

# 方式二
-- 1.手动将从表中关联的外键值设置为null
update emp set did=null where did=2;
-- 2.删除主表中的数据
delete from dept where did = 2;

2.内连接

定义:通过条件(等值的判断条件)匹配两张表中的数据,匹配上就显示,匹配不上就不显示。

格式:

SQL92: select 字段,... from1,表2 where 条件;
SQL99: select 字段,... from1 [inner] join2 on 条件;

实现:

1.不同的表进行内连接
2.同一张表(自连接)进行内连接
3.判断条件为等值判断,等值内连接
	SQL92: select 字段,... from1,表2 where 字段1=字段2;
	SQL99: select 字段,... from1 join2 on 字段1=字段2;
4.判断条件为非等值判断,非等值内连接
	SQL92: select 字段,... from1,表2 where 字段1 between 字段2 and 字段3;
	SQL99: select 字段,... from1 join2 on 字段1 between 字段2 and 字段3;

自连接:一张表当两张表使用,自己连接自己

3.外连接

3.1左外连接

定义:以左表为主,左表中的数据都会显示,右表没有匹配的数据以null填充。

格式:

select 字段,... from1 left [outer] join2 on 条件;

实现:

1.不同的表进行左外连接
2.同一张表(自连接)进行左外连接
3.判断条件为等值判断,等值左外连接
	SQL99: select 字段,... from1 left join2 on 字段1=字段2;
4.判断条件为非等值判断,非等值左外连接
	SQL99: select 字段,... from1 left join2 on 字段1 between 字段2 and 字段3;

3.2右外连接

定义:以右表为主,右表中的数据都会显示,左表没有匹配的数据以null填充

格式:

select 字段,... from1 right [outer] join2 on 条件;

实现:

1.不同的表进行右外连接
2.同一张表(自连接)进行右外连接
3.判断条件为等值判断,等值右外连接
	SQL99: select 字段,... from1 right join2 on 字段1=字段2;
4.判断条件为非等值判断,非等值右外连接
	SQL99: select 字段,... from1 right join2 on 字段1 between 字段2 and 字段3;

3.3全外连接

MySQL不支持全外连接:左右表中数据全展示,没有匹配就用null填充

定义:将左外连接的结果与右外连接的结果合并,合并时去重

左外连接与右外连接用union连接
	select 字段,... from1 left [outer] join2 on 条件
	union
	select 字段,... from1 right [outer] join2 on 条件;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值