多表的关系介绍

  • 在实际的开发过程中,项目一定是有多张表的,且这些表之间是都有关系的
  • 表与表之间的关系分类:一对一 一对多 多对多
    一对一:A表的一行对应B表的一行,反之也成立,此时,两张表可以合并成一张表

    一对多:A表的一行对应B表的多行,反之不成立

    多对多:A表的一行对应B表的多行,B表的一行对应A表的多行

多表的关系-一对多关系

  • 初始化数据
  • 一对多的创建流程

    》创建主表(分类表)
    》创建从表(商品表)
    》给主表和从表之间添加外键约束
    alter table 从表 add [constraint] [外键名称] foreign key (从表外键字段名) references 主表 (主表的主键);
    》给主表添加数据(随便添加)
    》给从表添加数据(添加数据是必须依赖主表)
    (3)一对多特点
    添加数据: 主表:随意添加,从表:受主表限制
    删除数据: 主表:如果某一行的数据受到从表的依赖,则不能删除, 从表:可以随意删除
#创建主表(分类表)
CREATE TABLE category(cid INT PRIMARY KEY AUTO_INCREMENT,cname VARCHAR(20)
);
#创建从表(产品表)
CREATE TABLE product(pid INT PRIMARY KEY AUTO_INCREMENT,pname VARCHAR(20),price DOUBLE,cid INT -- 外键 表示属于哪个分类
);
》给主表和从表之间添加外键约束
`alter table 从表 add [constraint] [外键名称] foreign key (从表外键字段名) references 主表 (主表的主键);`
alter table product add  foreign key (cid) references category(cid)
》给主表添加数据
insert into category value(null,'电子')
insert into category value(null,'服装')
》给从表添加数据(添加数据是必须依赖主表)
insert into product value(null,'联想',2000,1)
insert into product value(null,'华为',4000,1)
insert into product value(null,'真维斯',100,2)

多表的关系-多对多关系

多对多创建流程
》》创建订单表(主表) order
》》创建中间表(从表) 保存交叉线
》》给中间表建立外键约束(2次)
》》给订单表添加数据(随意)
》》给中间表添加数据(受限)

#创建从表(产品表)
CREATE TABLE product(pid INT PRIMARY KEY AUTO_INCREMENT,pname VARCHAR(20),price DOUBLE,cid INT -- 外键 表示属于哪个分类
);
CREATE TABLE orders(oid INT PRIMARY KEY AUTO_INCREMENT,money DOUBLE
);
CREATE TABLE product(pid INT PRIMARY KEY AUTO_INCREMENT,pname VARCHAR(20),price DOUBLE,cid INT -- 外键 表示属于哪个分类
)
INSERT INTO product VALUE(NULL,'联想',2000,1)
INSERT INTO product VALUE(NULL,'华为',4000,1)
INSERT INTO product VALUE(NULL,'真维斯',100,2)
CREATE TABLE orders_product(oid INT , -- 必须存在 外键pid INT  -- 必须存在 外键
);
#给中间表建立外键约束(2次)
ALTER TABLE orders_product ADD FOREIGN KEY(oid) REFERENCES orders(oid);
ALTER TABLE orders_product ADD FOREIGN KEY(pid) REFERENCES product(pid);

多对多(演员与角色的关系)

创建表:多对多的关系(演员表与角色表)
》》 创建演员表(左侧主表)
》》 创建角色表(右侧主表)
》》创建中间表(从表)
》》建立外键约束(2次)
》》给演员表添加数据
》》给角色表添加数据
》》给中间表添加数据

# 创建演员表(左侧主表)
CREATE TABLE users(uid INT PRIMARY KEY AUTO_INCREMENT,uname VARCHAR(20)
)
# 创建角色表(右侧主表)
CREATE TABLE role(rid INT PRIMARY KEY AUTO_INCREMENT,rname VARCHAR(20)
)
# 创建中间表(从表)
CREATE TABLE users_role(rid INT , -- 数据必须在role存在uid INT   -- 数据必须在users存在
)
#建立外键约束两次
ALTER TABLE users_role ADD FOREIGN KEY(rid) REFERENCES role(rid);
ALTER TABLE users_role ADD FOREIGN KEY(uid) REFERENCES users(uid);

总结

  • 要分析表与表之间的关系是属于一对多还是多对多

sql语句之多表关系 一对多 多对多相关推荐

  1. MySQL中修改表结构的关键字_下列SQL语句中,修改表结构的关键字是

    [单选题]对<将进酒>全诗分析不正确的是 [单选题]下列划线词语的解释有误的一项是 [多选题]下列食品属于不完全蛋白质的是 ( ) . [单选题]下列聚合函数中属性列必须是数值型的是 [单 ...

  2. sql语句语法多表关联_SQL Delete语句-如何删除行或表,语法示例

    sql语句语法多表关联 To delete a record in a table you use the  DELETE  statement. 要删除表中的记录,请使用DELETE语句. Be c ...

  3. oracle修改表结构的sql命令是什么,sql语句中修改表结构的命令是什么?

    sql语句中修改表结构的命令是:"ALTER TABLE"命令. ALTER TABLE 语句用于在已有的表中添加.删除或修改列. SQL ALTER TABLE 语法 如需在表中 ...

  4. 导入数据的sql语句,两表互导

    导入数据的sql语句,两表互导 insert into Product(C_ID,Pname,Ptitle,Ptype,IsProduct,onLine,FisrtSort,SecSort,Sort, ...

  5. oracle创建表语句_利用FME去拼接SQL语句并创建表

    在之前的工作中,我遇到了这么一个需求,需要将数据库内一千多个旧表按其原来表结构,重新创建对应的新表.然后对旧数据的进行处理后,存储新的数据. 不只是结构需要保持一致,还有用户.表空间.约束.备注等也需 ...

  6. MySQL删除s表命令_SQLServer数据库sql语句中----删除表数据drop、truncate和delete的用法...

    本文主要向大家介绍了SQLServer数据库sql语句中----删除表数据drop.truncate和delete的用法,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助. 虽 ...

  7. html 数据库 编写学生表,用sql语句创建学生表如何做

    在数据库中使用SQL语句创建学生表代码如下:( 学号 char(12) primary key, 姓名 char(6) not null, 性别 char(2) check(性别 IN ('男','女 ...

  8. oracle维护常用SQL语句(查看系统表和视图)

    转:http://www.360doc.com/content/11/1230/15/7489308_176090474.shtml oracle维护常用SQL语句(查看系统表和视图) 1.查看表空间 ...

  9. 关于oracle sql语句查询时表名和字段名要加双引号的问题

    oracle初学者一般会遇到这个问题. 用navicat可视化创建了表,可是就是不能查到! 后来发现②语句可以查询到 ①select * from user; 但是,我们如果给user加上双引号就可以 ...

最新文章

  1. GDPR:我们将如何对待你的数据?
  2. php跨平台总结 常用预定义常量
  3. 为什么说OLAP产品毁了BI?
  4. [From 10.1~10.5] 对象和集合初始化器(C#语法糖系列)
  5. 微信小程序android错误,app安卓端 跳转到微信小程序失败
  6. lua jit java jit_Lua JIT 2.0 发布了,一百五十倍的性能提升!
  7. 数字化赋能智能生产,一套数据决策分析体系,完美解决生产管理
  8. 面试题系列-Spring连环10问
  9. kinect内参数的标定
  10. 前端必须学会的5个原生JavaScript对象方法
  11. NodeJS Stream(可读流、可写流) API解读
  12. JS的正则表达式 举例
  13. 内核调试神器SystemTap — 更多功能与原理(三)
  14. CSS小技巧---半透明边框
  15. 自行车改装电动车怎么样_电动车听起来应该是什么样?
  16. 苹果cms影视系统成品站打包+电影先生6.1.1模板优化版+15W+数据
  17. SAP 教程之 01 如何为 Inbound IDOC 配置 SAP
  18. 程序员编程艺术第三十 三十一章 字符串转换成整数,通配符字符串匹配
  19. 前端实战复习——歌词滚动
  20. 如何经营企业公众号?企业公众号怎样才能吸粉?

热门文章

  1. Linux Kdump内核崩溃转储部署详解
  2. Maven项目在eclipse中使用junit进行单元测试时报错:ClassNotFoundException
  3. 理解Word2vec
  4. Error:Module ‘app‘:platform ‘Google lnc.:Google APIs:22‘ not found.
  5. 【今日数据】 2022年最新的中国分层级(全国、省、城市)道路矢量数据(OSM)
  6. Git中Your branch is ahead of ‘origin/master‘ by x commits的解决办法
  7. Chartistic - 操作简单且免费的数据可视化图表生成工具
  8. 朋友圈点赞发红包视频的播放Pc端微信加群app端微信加群 测试用例的设计点
  9. python抢券代码_抢券抢不到生气了,准备写一个自动抢券的东东,时间成本最低的 web 方案是什么?...
  10. 查询微信号被谁投诉封方法