一对多关系的建表原则:建立两张表
一张叫主表(一方)
一张叫从表(多方):从表(多方)中必须有个字段(列),引用主表(一方)的主键
外键:从表(多方)引用主表(一方)主键的那个字段(列)
多对多关系建表原则:需要创建第三张表
中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键.
外键约束
语法:alter table 从表 add [constraint] 外键名称 foreign key (从表外键字段名) references 主表 (主表的主键);
[外键名称] 用于删除外键约束的,一般建议“_fk”结尾
alter table 从表 drop foreign key 外键名称
多表查询
1.交叉查询:查询到的数据是两个表相乘(主表(A,B,C),从表(a,b,c))=Aa,Ab,Ac…Ba,Bb,Bc…Ca,Cb,C*c,9条数据
2.内连接查询(使用的关键字 inner join – inner可以省略)
隐式内连接:select * from 主表,从表 where 主表.主键=从表.外键;
显示内连接:select * from A inner join B on 主表.主键=从表.外键;
3.外连接查询:
左外连接:select * from 主表 left outer join 从表 on 主表.主键=从表.外键----以左表为准,左表中的数据必须每条都有;
右外连接:select * from 主表 right outer join 从表 on 主表.主键=从表.外键;
多表查询小练习
#一对多
CREATE TABLE leimu(
lid INT PRIMARY KEY AUTO_INCREMENT,
lname VARCHAR(100)
);
CREATE TABLE shangpin(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(100),
leimu_id INT,
shangjia INT,
##也可以把外键约束放从表里面,要注意标点符号
CONSTRAINT id_leimu_fk FOREIGN KEY (leimu_id) REFERENCES leimu(lid)
);
ALTER TABLE shangpin ADD CONSTRAINT id_leimu_fk FOREIGN KEY (leimu_id) REFERENCES leimu(lid);
INSERT INTO leimu(lname) VALUES('服装');
INSERT INTO leimu(lname) VALUES('鞋子');
INSERT INTO leimu(lname) VALUES('手机');
INSERT INTO leimu(lname) VALUES('日化');
INSERT INTO leimu(lname) VALUES('汽车');
INSERT INTO shangpin(sname,leimu_id,shangjia) VALUES('奥迪'