多表
MYSQL图型工具
1表与表之间的关系
有3类表关系:一对多(多对一)、多对多、一对一
2.外键约束
主表的主键和从表的外键来描述主外键关系,呈现就是一对多关系。
外键特点:
从表外键的值是对主表主键的引用。
从表外键类型,必须与主表主键类型一致。
声明外键约束
语法:alter table 从表 add [constraint] [外键名称] foreign key (从表外键字段名) references 主表 (主表的主键);
[外键名称] 用于删除外键约束的,一般建议“_fk”结尾
alter table 从表 drop foreign key 外键名称
也就是主表,必须提供主键cid
也就是从表,必须提供外键category_id
3.多表查询
1. 交叉连接查询(基本不会使用-得到的是两个表的乘积) [了解]
语法:select * from A,B;
2. 内连接查询(使用的关键字 inner join -- inner可以省略)
隐式内连接:select * from A,B where 条件;
select * from category c,products p where c.cid = p.category_id ;
显式内连接:select * from A inner join B on 条件;
select * from category c inner join products p on c.cid = p.category_id ;
3. 外连接查询(使用的关键字 outer join -- outer可以省略)(测试前添加null数据)
左外连接:left outer join
select * from A left outer join B on 条件;
select * from category c left outer join products p on c.cid = p.category_id ;
select * from products p left outer join category c on c.cid = p.category_id ;
右外连接:right outer join
select * from A right outer join B on 条件;
select * from products p right outer join category c on c.cid = p.category_id ;
4.子查询
子查询:一条select语句结果作为另一条select语法一部分(查询条件,查询结果,表等)。
select ....查询字段 ... from ...表.. where ... 查询条件
#查询“化妆品”和“家电”两个分类商品详情
SELECT * FROM products p
WHERE p.category_id in
(
SELECT c.cid FROM category c
WHERE c.cname='化妆品' or c.name='家电'
);
1. 获取化妆品和家电的编号id
select c.cid from category c where c.cname = '化妆品' or c.cname = '家电' ;
2.
询“化妆品”和“家电”两个分类商品详情
select * from products p where p.category_id in (1,3) ;
3. 合并
select * from products p where p.category_id in (select c.cid from category c where c.cname = '化妆品' or c.cname = '家电') ;