多表查询、外键、表与表之间的关系

来源:互联网 发布:宜信大数据研发中心 编辑:程序博客网 时间:2024/05/17 05:07

外键


通常在实际工作中,数据库中表格都不是独立存在的,且表与表之间是有种联系的,比如两张表格,一张为分类表category,一张为商品表product。在分类表中有两个信息,cid、cname,商品表中有三个数据信息pid、name、price。两张表要想有着某种联系,需要设定主键和外键两个属性,其中在分类表(主表)中将cid设置为主键商品表(从表)中pid设置为外键

外键特点:

从表外键的值是对主表键的引用。

从表外键类型,必须与主表主键类型一致。


声明外键约束:

alter table produnct add constraint key_fk(外键名称) foreign key category_id(从表外键字段名) references category(cid);

外键名称用于删除外键约束时使用,也可不设置,一般建议“_fk”为结尾。

删除外键约束

alter table product drop foreign key key_fk;

在不接触外键约束时,主表不能直接删除与从表有约束关系的数据信息,如:

delete from category where cid="XXX";

实例:

CREATE TABLE category(cid VARCHAR(32) PRIMARY KEY,cname VARCHAR(100));DESC category;CREATE TABLE product(pid VARCHAR(32) PRIMARY KEY,pname VARCHAR(40),price DOUBLE,category_id VARCHAR(32));INSERT INTO category(cid,cname) VALUES('c001','家电');INSERT INTO category(cid,cname) VALUES('c002','服饰');INSERT INTO category(cid,cname) VALUES('c003','化妆品');INSERT INTO product(pid,pname,price,category_id) VALUES('p001','联想','5000','c001');INSERT INTO product(pid,pname,price,category_id) VALUES('p002','海尔','5000','c001');INSERT INTO product(pid,pname,price,category_id) VALUES('p003','雷神','5000','c001');INSERT INTO product(pid,pname,price,category_id) VALUES('p004','JACK JONES','800','c002');INSERT INTO product(pid,pname,price,category_id) VALUES('p005','真维斯','200','c002');INSERT INTO product(pid,pname,price,category_id) VALUES('p006','花花公子','440','c002');INSERT INTO product(pid,pname,price,category_id) VALUES('p007','劲霸','2000','c002');INSERT INTO product(pid,pname,price,category_id) VALUES('p008','香奈儿','800','c003');INSERT INTO product(pid,pname,price,category_id) VALUES('p009','相宜本草','200','c003');ALTER TABLE product ADD CONSTRAINT key_fk FOREIGN KEY(category_id) REFERENCES category(cid); 

表与表之间的关系:


1.一对多关系

一对多建表原则:在从表创建一个字段,字段作为外键指向主表的主键

实例同上

2.多对多关系

多对多关系建表原则:需要创建第三张表,中间表中至少有两个字段,这两个字段分别作为外键指向各自一方的主键。

实例:

CREATE TABLE orders(oid VARCHAR(32) PRIMARY KEY,totalprice DOUBLE);CREATE TABLE orderitem(oid VARCHAR(50),pid VARCHAR(50));CREATE TABLE product(pid VARCHAR(32) PRIMARY KEY,pname VARCHAR(40),price DOUBLE,category_id VARCHAR(32));订单表和订单项表的主外键关系ALTER TABLE orderitem ADD CONSTRAINT orderitem_orders_fk FOREIGN KEY(oid) REFERENCES orders(oid);商品表和订单项表的主外键关系ALTER TABLE orderitem ADD CONSTRAINT orderitem_product_fk FOREIGN KEY(pid) REFERENCES product(pid);

多表查询


1.交叉连接查询(一般不用)select * from A,B2.内连接查询(使用关键字inner join --inner可以省略)隐式内连接:select * from A,B where 条件;显示内连接:selcet * from A inner join B on 条件;3.外连接查询:(使用关键字outer join --outer 可以省略)左外连接:left outer joinselect * from A left outer join B on 条件;右外连接: right outer joinselect * from A right outer join B on 条件;







原创粉丝点击