10_连表操作

表与表之间关系?

1对1

多对多

什么是1对多?

  在多的一方创建一个外键字段,把这个外键字段设置成外键,对应 少的一方主键

    -- 约束插入外键字段时候,数据必须关联表中已经存在的数据

外键类型和关联字段类型相同

    插入时候,先插入关联表数据,在插入原表数据

如何通过命令创建1对多关系?

-- 在创建表时候创建外键

constraint 外键名 foreing key (外键字段) references 关联表名(关联字段)

-- 在表外外键操作

-- alter table 表名 drop foreign key 外键名  -- 删除外键

-- alter table 表名 add constraint 外键名字 foreign key (外键字段) reference 关联表名(字段)

外键名命名规则 :fk_表名第一个字母_关联表第一个字母

如何通过命令创建多对多关系?

  -- 创建第三张表保存中间关,保存两个多的一方id,

    在第三张表中创建两个外键分别对应两张表的id,

    可以一个id,也可以两个外键联合起来做id

  -- 第三张表如何命令?

  表1名_to_表2名

-- 字段名怎么创建?

表1名_id      表2名_id

为何两个外键可以联合做主键?

因为每个外键都是组合起来都是唯一的

如何使两张表建立关系?

通过insert在第三张表中插入数据,前提是关联的两张表中有这个id

如何通过连表查询?

-- 1对多查询

      select 表名.字段,关联表.字段 from 表名 left join 关联表名 on 表名.外键字段 = 关联表名.id where 条件

-- A left join B on 关系

      -- 以A为主,可以把A中所有数据查出,只显示A对应的B数据,可以进行多次连接,那么说明主表有多个外键

-- right join                          以B为主,可以把B中所有数据查出,只显示B对应的A数据

-- inner join                         把没有对应关系的忽略掉

-- 多对多查询?

-- select 字段,+ form 第三张表名

      lelft join 第一张表名 on 第三张表名. 第一张表名_id = 第一张表名.id

      lelft join 第二张表名 on 第三张表名. 第二张表名_id = 第二张表名.id

    where 条件

     -- 本质上是双向的1对多,通过外键表连接关联表

如何进行关系分析?

  -- 求两者之间的关系,要用两个方向去看,

    先把前者看成1,对应后者有多少,再把后者看成1,

    对应前者有多少,多对多其实本质上是双向的一对多

时间: 2024-10-17 04:01:43

10_连表操作的相关文章

MySql基本的多表操作

多表操作 交叉查询(笛卡尔积查询): #A表中的每一条记录都对应B表中的所有记录,所以,A和B的交叉查询的条目数即为:A条目数*B条目数 语法: select 列名 from A cross join B where 条件 select 列名 from A,B where 条件 内查询 #A表与B表有主外键关系时,查询外键所对应的主键条目 语法: select 列名 from A inner join B on(A.外键 = B.主键);#显式内查询 select 列名 from A,B whe

多表操作

## 多表操作 (DBUtils框架)## # 基本概念 即数据库中一对多及多对多的表之间的操作: # 基本开发步骤: >> 添加jar包: >> 添加Util工具类: >> 添加domain中的基础类: |-- customer |-- orders |-- 添加素材中的表: >> 分析问题: |-- 类与类之间没有外键关系: |-- 那么如何完成表与表之间的关联呢? |-- 类与类之间有的关系 |-- 继承: |-- 包含与引用: |-- 可以通过一个L

Python之Django--ORM连表操作

一对多 class UserType(models.Model): caption = models.CharField(max_length=32) class UserInfo(models.Model): user_type = models.ForeignKey(UserType)# user_type对象中封装id,caption username = models.CharField(max_length=32) age = models.IntegerField() 增: 1.外键

学习MySQL之单表操作(二)

##单表操作 ##创建表 CREATE TABLE t_employee( empno INT(11), ename VARCHAR(20), job VARCHAR(40), MGR INT(11), Hiredate DATE DEFAULT '0000-00-00', sal DOUBLE(10,2), comm DOUBLE(10,2), deptno INT(11), UNIQUE INDEX uk_empno(empno) ##使用唯一索引 ); ##增 INSERT INTO t_

mysql基本认识【关系型数据库和nosql、mysql操作流程和体系,库操作,表操作,数据的操作,字符集的操作,以及php作为client操作数据库】对连接本身没有疑问

1.关系型数据库永久性保存数据的仓库php的变量只是php脚本执行期间,临时性保存变量的空间[使用内存空间临时保存] 关系型数据库:利用二者的关系来描述实体的信息.[利用二维表字段名和字段值来进行描述][关系型数据库根本不是可以使用外键将两个表构建成关联的意思,而是实现描述实体的二维表的形式] nosql:not only sql[sql表示操作关系型数据的语言]所以nosql指的就是非关系型数据库[典型的是键值对型的数据(redis.memcache)][nosql可以视情况添加信息,不需要对

mysql数据库表操作及授权

表操作:增删改查 把/etc/passwd文件的内容导入 passwd表里. mysql>load data infile"/etc/passwd" into table passwd fields terminated by ":"; 基于前面的passwd表,完成下列操作: 1:列出uid低于500且3个字母的用户 mysql> select name from passwd where uid<500 and name like "

表操作--建表语句

表操作--建表语句 1.创建默认字符集库 下面已默认格式的字符集库 mysql> create database Ysolin; Query OK, 1 row affected (0.00 sec) mysql> show create database Ysolin\G *************************** 1. row *************************** Database: Ysolin Create Database: CREATE DATABAS

前端学数据库之多表操作

× 目录 [1]准备工作 [2]多表更新 [3]两步更新[4]连接[5]无限级表 前面的话 上一篇博文中介绍了子查询的相关内容,最后我们将查询结果存储到一个新的数据表中.下面我们将接着子查询的案例,详细介绍数据库中的多表操作 准备工作 在上一篇博文,我们将详细数据存储到tdb_goods数据表中,将详细数据中的类别信息存储到tdb_goods_cates数据表中 接下来,我们要研究如何通过tdb_goods_cates数据表来更新tdb_goods表 多表更新 多表更新类似于单表更新 UPDAT

顺序表操作补充(查找方法增加)

顺序表操作补充 二分查找 a.非递归方法实现二分查找 1 //[] 2 int BinarySearch(SeqList *pSeq, ElemType x) 3 { 4 assert(pSeq); 5 int left = 0; 6 int right = pSeq->size - 1; 7 while(left<=right) 8 { 9 int cur = left+(right-left)/2; 10 if(pSeq->array[cur] == x) 11 { 12 retur