MySQL之多表操作
目录
多对多(学生和课程) ------将一个多对多,拆分成两个一对多
内连接查询(使用关键字 inner join --inner可以省略)
外连接查询(使用关键字 outer join --outer可以省略)
多表关系
-
外键
假设现在我们有两张表“分类表”和“商品表”,为了表明“商品”属于哪个“分类”,我们在“商品表”上添加一列,用于存放“分类”cid的信息,此列称为:外键
此时,“分类表”称为主表,cid称为主键。“商品表”称为从表,category_id称为外键。呈现的是一对多的关系
外键特点
1)从表外键的值是对主表主键的引用
2)从表外键类型,必须与主表主键类型一致
-
表与表之间的关系
一对一(实际开发中应用不多,一对一可以建成一张表)
两种建表原则:
外键唯一(unique):主表的主键和从表的外键形成主外键关系,外键唯一unique
外键是主键:主表的主键和从表的主键,形成主外键关系
一对多(商品与分类)
建表原则:从从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键
语法:
alter table 从表 add [constraint] [外键名称] foreign key (从表外键字段名) references 主表(主表主键字段名)
小结:
从表不能添加(更新),主表不存在的数据
主表不能删除(更新),从表已经使用的数据
多对多(学生和课程) ------将一个多对多,拆分成两个一对多
建表原则:需要创建第三张表,中间表至少两个字段,这个两个字段分别作为外键指向各自一方的主键
语法
联合主键(可省略)
alter table 'order_item' add primary key(oid,pid);
订单表和订单表项的主外键关系
alter table 'order_item' add constraint orderitem_orders_fk foreign key(oid) references orders(oid);
商品表和订单表象的主外键关系
alter table 'order_item' add constraint orderitem_products_fk foreign key(pid) references products(pid);
-
多表查询
交叉连接查询(基本不会遇到,笛卡尔积,遍历所有可能)
select * from A,B
内连接查询(使用关键字 inner join --inner可以省略)
隐式内连接: select * from A,B where 条件;
显示内连接: select * from A inner join B on 条件;
外连接查询(使用关键字 outer join --outer可以省略)
左外连接: left outer join
select * from A left outer join B on 条件;
右外连接: right outer join
select * from A right outer join B on 条件;
内外连接的区别
#隐式内连接
select distinct cname from category c, products p where c.cid = p.category_id;
#显式内连接
select distinct cname from category c inner join products p on c.cid = p.category_id;
上一篇: Android 屏幕适配
下一篇: php 生成excel文件