web后端进阶
一、多表关系
1.多表关系
一对多(多对一) 一对一 多对多
2.解决方案
一对多
在数据库表中多的一方,添加字段,来关联一的一方的主键
一对一
在某一方添加一个字段,关联对方的主键(并且设置为unique)
多对多
需要新创建一个表实现

3.物理外键
现在已经不推荐,使用逻辑外键
俩种添加方式 -- 创建表时指定 create table 表名( 字段名 数据类型, ... [constraint] [外键名称] foreign key (外键字段名) references 主表 (字段名) ); -- 建完表后,添加外键 alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(字段名);也可以使用图形化界面添加
通过右击表,点击showdiagram可以展现俩张表直接关系
使用物理外键约束后,更新父表会受限,从而保证数据一致性
二、多表查询
1.定义
多表查询: 指从多张表中查询数据
直接使用
select * from dept,emp;会出现笛卡尔积即将所有情况全部组合
加入约束,
select * from dept,emp where dept.id = emp.dept_id;即可获取正常结果
2.分类
连接查询
内连接(查询交集部分级)
隐式内连接
查询交集部分级 select * from dept,emp where dept.id = emp.dept_id;显式内连接
select emp.name,dept.name from emp inner join dept on emp.dept_id = dept.id; inner可以省略
外连接
左外连接与右外连接 完全查询左边与完全查询右边 select 字段列表 from 表1 left [outer] join 表2 on 连接条件 ...; select emp.name,dept.name from emp left join dept on emp.dept_id = dept.id;将左边的全部挑出,同时右侧字段可以使用
左右外连接可以互相转化
子查询(SQL语句中嵌套select语句,称为嵌套查询,又称子查询。)
标量子查询
查询最早入职员工 select * from emp where entry_date = (select min(entry_date) from emp)
列子查询
select emp.name,dept.name from emp,dept where emp.dept_id=dept.id and dept_id in (select id from dept
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
已在FreeBuf发表 0 篇文章
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)




