外键约束 foreign key

外键:表示表与表之间的关系字段的参照关系。在后续的增删改操作中,如果遇到违反外键约束的情况时,数据库会阻止这类行为。

声明外键

创建子表1 创建子表2
create table 子表名(
…….
dept-no char(5) references dept(id) #子表中设置外键字段数据类型必须和参照的字段一样,参照字段必须是主键或唯一列

);
create table 子表名(
…….
父_no char(5),
foreign key(dept父_no) references 父(列)
);

表已存在,通过修改表 增加外键

alter table 表名 add constraint 外键名 foreign key(子表字段) references 父类(字段);

删除外键约束

alter table 表名 drop foreign key 外键名;
【补充】
一对多关系:在多的一方设计外键参照一方的主键
多对多关系:需要新建第三方的关系表,在关系表中设计外键
一对一关系:外键可以设计在任何一张表中
注意:建立时,先父后子;删除表时,先子后父。添加数据,先父后子;删除数据时,先子后父。

连接查询

内连接查询 inner join

查询出左表,右表【都有】的数据记录

select 父表.列1 别名,子表.列2 别名
from 表名1,表名2
where 父表.列=子表.父_no; #连接查询一定要有连接条件法二
select 父表.列1 别名,子表.列2 别名
from 父表 inner join 子表
on 父表.列=子表.父_no;

左外连接查询 left join

在内连接的基础上,增加左表有,右表没有的数据

select 父表.列1 别名,子表.列2 别名
from 父表 left join 子表
on 父表.列=子表.父_no;

右外连接查询 right join

全外连接 full join

嵌套查询

指一个查询语句嵌套在另一个查询语句内部的查询

带比较运算符的子语句 <<=>>=!=
select *
from 子表
where 父表_no=(select 父表_no from emp where条件);
想大的,把后面的再换复杂,细致
in关键字 子查询
当子查询返回结果为多行时
select *
from 表
where in(select from emp where条件in);
any或all操作符 子查询
select *
from 表
where any或all(select from emp where条件);