原表的结构:
多表之间的关系维护
外键约束:foreign key
alter table 外表名 add foreign key(列名) references 主表名(列名);
补充删掉外键约束:alter table 表名 drop foreign key 约束名
多表之间的建表原则
- 一对多:商品和分类
- 建表原则:在多的一方添加一个外键指向一的一方的主键
- 多对多:老师和学生,学生和课程
- 建表原则:建立一张中中间表,将多对多的关系,中间表至少要有两个外键,分别指向另一张表
- 一对一:班级和班长,公民和身份证,国家和国旗
- 建表原则:
- 将一对一的情况,当作是一对多情况处理,在任意一张表添加一个外键,并且这个外键唯一,指向另一张表
- 直接将两张表合并成一张
- 将两张表的主键建立连接,让两张表里面主键相等
- 实际用途:用的不是很多.(拆表操作)
- 相亲网站
- 个人信息:姓名,性别,年龄,身高,年收入,兴趣爱好(特长,学历,职业,要求…)
- 拆表操作:将个人信息和不常用信息,减少表的臃肿,
- 相亲网站
- 建表原则:
交叉链接查询
笛卡尔积
查出来的结果是两张表的乘积,查出来的结果没有意义
select * from product,category
_过滤出有意义的数据
select * from product,category where cno=cid;
避免不知道条件来自哪里给表加上别名
select * from prodyct as p,category as c where p.cno=c.cid;
__内连接查询
___隐式内连接
:在查询出结果的基础上去做的where条件过滤
select * from product p,category c where p.cno=c.cid;
___显示内连接
:带着条件去查询结果,执行效率要高
select * from product p inner join categpry c on p.cno=c.cid;
__左外链接
:会将左表中的所有数据都查询出来,如果右表中没有对应的数据,用NULL代替
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;
分页查询
select * from 表名 limit 起始索引,每页参数显示的个数
如:select 8 from product limit 0,3;
子查询
select * from product where cno = (select cid from category where cname='手机数码');
select pname, (select cname from category c where p.cno=c.cid) as 商品分类名称 from product p;