多表查询、外键、表与表之间的关系
来源:互联网 发布:宜信大数据研发中心 编辑:程序博客网 时间: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 条件;
阅读全文
0 0
- 多表查询、外键、表与表之间的关系
- 查询表之间的主外键关系
- MySQL---数据库从入门走向大神系列(四)-子查询、表与表之间的关系
- 数据库表与表之间的关系
- 表与表之间的关系
- hibernate 表与表之间的关系
- 关系型数据库表与表之间的关系
- Oracle 查询所有表之间的主外键关系
- 表之间的关系
- 表与表之间关系 --------实体与实体之间关系
- 数据库:多表之间的设计以及对应类之间的关系,与数据库的操作。
- 表和表之间的关系是多对多时该如何查询?
- mysql:day3--java访问数据库、CASE...WHEN、无关/相关子查询、表与表之间的关系
- SSH之 配置表与表之间的关系
- myBatis处理表与表之间的关系
- mybatis处理表与表之间的关系
- MyBatis处理表与表之间的关系
- mybatis处理表与表之间的关系
- PAT-The Largest Generation
- PHP基础教程-04 开发环境搭建
- D3 笔记一:选择元素、DOM 操作、绑定数据
- ThinkPHP rsa非对称加密类
- 收集苹果(动态规划法,二维)
- 多表查询、外键、表与表之间的关系
- HDU-2017 多校训练赛2-1001-Is Derek lying?
- HDU3377 Plan
- html5打开安卓本地应用android配置
- nginx虚拟主机的配置
- 仿饿了么,百度外卖这些App的双ListView列表联动效果
- ubuntu16.04 CAFFE 安装遇到的问题
- 静态顺序表的实现
- Vijos[1982]NOIP2015Day2T2 子串 substring 动态规划