ningbaoer

导航

多表

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 = '家电') ;

 

posted on 2023-05-30 19:36  宁宝儿  阅读(20)  评论(0编辑  收藏  举报