(2)多表操作
一.创建多表及多表的关系
- 多表之间的关系
外键约束:forerign key- 给product中的cno添加一个外键约束
//product是商品表,cno是其中一列代表的是所属分类
//category是商品分类表,cid是其中一列代表的是其id
alter table product add forerign key(cno) references category(cid); - 从分类表中删除一条cid = 5的信息,需要先去product表,删除所有分类id5的商品
- 给product中的cno添加一个外键约束
- 建数据库原则:
通常情况下,一个项目/应用建一个数据库 - 多表之间的建表原则:
一对多:商品和分类
建表原则:在多的一方添加一个外键指向一的一方
多对多:学生和选课
建表原则:多建一张中间表,中间表至少要有两个外键,这两个外键分别指向原来的那张表
一对一:公民和身份证
建表原则:将一对一的情况,当作是一对多情况处理
直接将两张表合并成一张表
将两张表的主键建立起连接,让两张表里面主键相等
实际用途:(拆表操作)
相亲网站:个人信息:姓名,性别,年龄,身高,体重,爱好(##,##,##,##)
拆标操作:将个人的常用信息和不常用信息,减少表的臃肿
二.多表查询内连接
- 交叉连接查询 笛卡儿积 查出来的是两张表的乘积,查出来的结果没有意义
select * from product ,category where cno = cid; //过滤出有意义的数据 - 内连接查询
--隐式内连接
select * from product p,category c where p.cno = c.id;
--显示内连接
select * from product p inner join category c on p.cno = c.cid; - 左外连接查询
左外连接,会将左表中的所有数据都查询出来,如果右表中没有对应的数据,用
select * from product p left outer join category c on p.cno = c.cid; - 右外连接查询
右外连接,会将左表中的所有数据都查询出来,如果左表中没有对应的数据,用null代替
select * from product p right outer join category c on p.cno = c.cid; - 分页查询
每页数据 假设是10
起始索引从0
第1页: 0
第2页:11
起始索引:index代表显示第几页 页数从1开始
每页显示3条数据
startIndex = (index -1)*3;
select * from product limit 0,10; //第一个参数是索引,第二个参数是显示的个数