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

出处:https://blog.csdn.net/xiaoyuxianshenging/article/details/76280614

外键

通常在实际工作中,数据库中表格都不是独立存在的,且表与表之间是有种联系的,比如两张表格,一张为分类表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";


实例:

 
  1. CREATE TABLE category(

  2. cid VARCHAR(32) PRIMARY KEY,

  3. cname VARCHAR(100)

  4. );

  5. DESC category;

  6. CREATE TABLE product(

  7. pid VARCHAR(32) PRIMARY KEY,

  8. pname VARCHAR(40),

  9. price DOUBLE,

  10. category_id VARCHAR(32)

  11. );

  12. INSERT INTO category(cid,cname) VALUES('c001','家电');

  13. INSERT INTO category(cid,cname) VALUES('c002','服饰');

  14. INSERT INTO category(cid,cname) VALUES('c003','化妆品');

  15.  
  16. INSERT INTO product(pid,pname,price,category_id) VALUES('p001','联想','5000','c001');

  17. INSERT INTO product(pid,pname,price,category_id) VALUES('p002','海尔','5000','c001');

  18. INSERT INTO product(pid,pname,price,category_id) VALUES('p003','雷神','5000','c001');

  19.  
  20. INSERT INTO product(pid,pname,price,category_id) VALUES('p004','JACK JONES','800','c002');

  21. INSERT INTO product(pid,pname,price,category_id) VALUES('p005','真维斯','200','c002');

  22. INSERT INTO product(pid,pname,price,category_id) VALUES('p006','花花公子','440','c002');

  23. INSERT INTO product(pid,pname,price,category_id) VALUES('p007','劲霸','2000','c002');

  24.  
  25. INSERT INTO product(pid,pname,price,category_id) VALUES('p008','香奈儿','800','c003');

  26. INSERT INTO product(pid,pname,price,category_id) VALUES('p009','相宜本草','200','c003');

  27.  
  28. ALTER TABLE product ADD CONSTRAINT key_fk FOREIGN KEY(category_id) REFERENCES category(cid);

表与表之间的关系:

1.一对多关系

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

实例同上

2.多对多关系

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

实例:

 
  1. CREATE TABLE orders(

  2. oid VARCHAR(32) PRIMARY KEY,

  3. totalprice DOUBLE

  4. );

  5.  
  6. CREATE TABLE orderitem(

  7. oid VARCHAR(50),

  8. pid VARCHAR(50)

  9. );

  10.  
  11. CREATE TABLE product(

  12. pid VARCHAR(32) PRIMARY KEY,

  13. pname VARCHAR(40),

  14. price DOUBLE,

  15. category_id VARCHAR(32)

  16. );

  17.  
  18. 订单表和订单项表的主外键关系

  19. ALTER TABLE orderitem ADD CONSTRAINT orderitem_orders_fk FOREIGN KEY(oid) REFERENCES orders(oid);

  20.  
  21. 商品表和订单项表的主外键关系

  22. ALTER TABLE orderitem ADD CONSTRAINT orderitem_product_fk FOREIGN KEY(pid) REFERENCES product(pid);

多表查询

  1. 1.交叉连接查询(一般不用)

  2. select * from A,B

  3. 2.内连接查询(使用关键字inner join --inner可以省略)

  4. 隐式内连接:select * from A,B where 条件;

  5. 显示内连接:selcet * from A inner join B on 条件;

  6. 3.外连接查询:(使用关键字outer join --outer 可以省略)

  7. 左外连接:left outer join

  8. select * from A left outer join B on 条件;

  9. 右外连接: right outer join

  10. select * from A right outer join B on 条件;

猜你喜欢

转载自blog.csdn.net/JackLiu16/article/details/82627025