1、定义 :让当前表的字段值在另一张表的范围内去选择
2、语法格式
foreign key(参考字段名)
references 主表(被参考字段名)
on delete 级联动作
on update 级联动作;
3、使用规则
1、主表、从表字段数据类型要一致
2、主表 :被参考字段是主键
4、示例
1、表1:缴费信息表(财务) :jftab
id 姓名 班级 缴费金额
1 唐伯虎 AID07 300
2 点秋香 AID07 300
表2:学生信息表(班主任) :bjtab
stu_id 姓名 缴费金额
2、创建表
表1 :jftab
create table jftab(
id int primary key,
name varchar(20) not null,
class char(5),
money smallint
)character set utf8;
insert into jftab values
(1,"唐伯虎","AID07",300),
(2,"点秋香","AID07",300),
(3,"文征明","AID07",300);
表2 :bjtab
create table bjtab(
stu_id int,
name varchar(20),
money smallint,
foreign key(stu_id) references jftab(id)
on delete cascade
on update cascade
)character set utf8;
3、删除外键
alter table 表名 drop foreign key 外键名;
外键名查看 :show create table 表名;
4、已有表添加外键
alter table 表名 add
foreign key(stu_id) references jftab(id)
on delete 级联动作
on update 级联动作;
5、级联动作
1、cascade
数据级联删除,级联更新(参考字段)
2、restrict(默认)
从表中有相关联记录,不允许主表操作
3、set null
主表删除、更新,从表相关联记录字段值为NULL
1、定义 :把内层的查询结果作为外层的查询条件
2、语法
select ... from 表名 where 字段名 运算符 (select ... from 表名 where 条件);
3、练习
1、把攻击值小于平均攻击值的名字和攻击值显示出来
1、先求平均值
select avg(gongji) from sanguo;
2、找结果
select name,gongji from sanguo where gongji<值;
select name,gongji from sanguo where
gongji<(select avg(gongji) from sanguo);
2、找出每个国家攻击力最高的英雄的名字和攻击值
# 有问题语句
select name,gongji from sanguo
where
gongji in(select max(gongji) from sanguo group by country);
# 无问题语句
select name,gongji from sanguo
where
(country,gongji) in(select country,max(gongji) from sanguo group by country);
1、两种方式
1、笛卡尔积 :不加where条件
select ... from 表1,表2;
2、加where条件
select ... from 表1,表2 where 条件;
3、
1、记录多的表的每一条记录,去匹配另一张表的所有记录
2、2张表记录条数相同,则后表的每一条记录去匹配前表的所有记录
2、练习
1、显示 省、市详细信息
河北省 石家庄市
河北省 廊坊市
广东省 广州市
广东省 深圳市
select sheng.s_name,city.c_name from sheng,city where
sheng.s_id=city.cfather_id;
2、显示省、市、县详细信息
select sheng.s_name,city.c_name,xian.x_name from
sheng,city,xian
where
sheng.s_id=city.cfather_id and city.c_id=xian.xfather_id;
1、内连接(inner join)
1、语法格式
select 字段名列表 from 表1
inner join 表2 on 条件
inner join 表3 on 条件;
2、练习
1、显示省、市详细信息(只显示匹配到的)
select sheng.s_name,city.c_name from sheng
inner join city
on sheng.s_id=city.cfather_id;
2、显示省市县详细信息
select sheng.s_name,city.c_name,xian.x_name from sheng
inner join city on sheng.s_id=city.cfather_id
inner join xian on city.c_id=xian.x_father_id;
2、外连接
1、左连接(left join)
1、以 左表为主 显示查询结果
2、select 字段名列表 from 表1
left join 表2 on 条件
left join 表3 on 条件;
3、练习
1、显示省、市详细信息,要求省全部显示
2、显示省市县详细信息,要求省全部显示
select sheng.s_name,city.c_name,xian.x_name from sheng
left join city on sheng.s_id=city.cfather_id
left join xian on city.c_id=xian.xfather_id;
2、右连接(right join)
以右表为主显示查询结果,用法同左连接
想要看更多的课程请微信关注SkrEric的编程课堂