一、表设计之关联关系
-  外键:主键是用于表示数据的唯一性字段,外键是用于建立关联关系的字段,值通常指向另一张表的主键 
-  一对一-  什么是一对一的关系:有A,B两张表,A表中一条数据对应B表中的一条数据,称之为一对一的关系 
-  应用场景:用户表和用户详情表,商品表和商品信息扩展表 
-  如何建立关系:在从表中添加外键执行主表的主键 
-  练习:创建User(id,username,password)和user_info表(uid,nick,age,phone,address)然后插入以下数据 1 李白 libai123 太白 28 13838283388 四川江邮 2 杜甫 dufu123 子美 24 13232323322 四川成都 3 白居易 bai123 乐天 27 13131313311 河南郑州 -- 创建表 create table user( id int primary key auto_increment, #主表的主键 username varchar(50), password varchar(50) );  create table user_info( uid int, #从表的外键,指向主表的主键 nick varchar(50), age int, phone varchar(50), address varchar(50) );  -- 添加数据 insert into user values (null,'李白','libai123'), (null,'杜甫','dufu123'), (null,'白居易','bai123');  insert into user_info values (1,'太白',28,'13838283388','四川江邮'), (2,'子美',24,'13232323322','四川成都'), (3,'乐天',27,'13131313311','河南郑州');  
-  查询每一个用户的用户名,昵称和电话 select u.username,ui.nick,ui.phone from user u left join user_info ui on u.id = ui.uid;
-  查询太白的用户名和密码 select u.username,u.password from user u left join user_info ui on u.id = ui.uid where ui.nick = '太白'
-  查询白居易的昵称和家庭住址 select ui.nick,ui.address from user u left join user_info ui on u.id = ui.uid where u.username = '白居易'
 
-  
-  一对多-  什么是一对多的关系,有A,B两张表,A表中的一条数据对应B表中的多条数据,同时B表中的一条数据对应A表中的一条数据 
-  应用场景:员工表和部门表,商品表和商品分类表 
-  如何建立关系:在多的表中添加外键指向另一张表的主键 
-  练习 -  创建 t_emp(id,name,sal,dept_id) 和t_dept(id,name, loc) create table t_emp( id int primary key auto_increment, name varchar(50), sal double, dept_id int # 外键 指向t_dept表的主键 );  create table t_dept( id int primary key auto_increment, name varchar(50), loc varchar(50) )
-  保存以下数据 1 诸葛亮 3000 法师部 A国 2 周瑜 2000 法师部 A国 3 关羽 1500 战士部 B国 4 张飞 1000 战士部 B国 5 孙尚香 5000 射手部 C国 insert into t_dept values (null,'法师部','A国'), #1 (null,'战士部','B国'), #2 (null,'射手部','C国'); #3  insert into t_emp values (null,'诸葛亮',3000,1), (null,'周瑜',2000,1), (null,'关羽',1500,2), (null,'张飞',1000,2), (null,'孙尚香',5000,3)  -  查询每个员工的名字和所在部门的名称 SELECT e.name,d.name FROM t_emp e LEFT JOIN t_dept d ON e.dept_id = d.id
-  查询A国的员工姓名 SELECT e.name FROM t_emp e LEFT JOIN t_dept d ON e.dept_id = d.id WHERE d.loc='A国' 
-  查询张飞的部门名称 SELECT d.name FROM t_emp e LEFT JOIN t_dept d ON e.dept_id = d.id WHERE e.name='张飞'
-  查询工资在2000以下员工的姓名,所在地 SELECT e.name,d.loc FROM t_emp e LEFT JOIN t_dept d ON e.dept_id = d.id WHERE e.sal <2000
 
-  
 
-  
 
-  
-  多对多-  什么是多对多:A B两张表,A表中的一条数据对应B表中的多条数据,同时B表中的一条数据对应A表中的多条数据 
-  应用场景:学生表和老师表 
-  如何建立关系:创建一个关系表,两个字段,分别执行另外两张表的主键 
-  练习: -  创建student(id,name)表和teacher(id,name) 和关系表 
-  保存以下数据 张老师: 张三,李四,刘红,赵小绿,钱小能 李老师:张三,赵小绿,李小红,江波,西门长海 孙老师:江波,张三,钱枫,刘红,赵德柱 王老师:西门长海,赵德柱,江波,钱小能,李菲菲  
-  表设计  创建表并添加数据 create table student( id int primary key auto_increment, name varchar(30) );  insert into student values (null,'张三'),(null,'李四'),(null,'刘红'), (null,'赵小绿'),(null,'钱小能'),(null,'李晓红'), (null,'江波'),(null,'西门长海'),(null,'钱枫'), (null,'赵德柱'),(null,'李菲菲');   create table teacher( id int primary key auto_increment, name varchar(50) );  insert into teacher values (null,'张老师'),(null,'李老师'), (null,'孙老师'),(null,'王老师');  create table s_t_table( t_id int, s_id int );  insert into s_t_table values (1,1),(1,2),(1,3),(1,4),(1,5), (2,1),(2,4),(2,6),(2,7),(2,8), (3,7),(3,1),(3,9),(3,3),(3,10), (4,8),(4,10),(4,7),(4,5),(4,11); 
-  查询每个学生对应的老师 SELECT s.name,t.name FROM student s LEFT JOIN s_t_table stt ON s.id = stt.s_id LEFT JOIN teacher t ON t.id = stt.t_id;
-  查询孙老师的学生有哪些 SELECT s.name FROM student s LEFT JOIN s_t_table stt ON s.id = stt.s_id LEFT JOIN teacher t ON t.id = stt.t_id WHERE t.name = '孙老师' 
-  查询江波的老师是谁 SELECT t.name FROM student s LEFT JOIN s_t_table sst ON s.id = sst.s_id LEFT JOIN teacher t ON t.id = sst.t_id WHERE s.name = '江波'
 
-  
 
-  
二、自关联
-  当前表的外键指向当前表的主键,这种关联方式叫做自关联 
-  应用场景:需要保存上下级关系的时候( Z-Tree) 
-  查询时使用内连接即可 join on 
-  查询员工姓名和对应的主管名称 SELECT e.ename,m.ename FROM emp e JOIN emp m ON e.mgr = m.empno
三、连接方式和关联关系
-  连接方式:包括 等值连接 、内连接,外连接(左外连接,右外连接) 是指查询多张表(等值连接和内连接是把一张表看做两张表的)数据的时候使用的查询方式 
-  关联关系:包括:一对一 , 一对多, 多对多, 是指设计表的时候,两张表之间存在的逻辑关系 







![[Python进阶] Pyinstaller打包程序时为程序添加图标](https://img-blog.csdnimg.cn/ce7bded798394ff39b16e74e01ce0eb4.png)











