多表关系一对多(多对一)多对多创建中间表示例一对一与多对一、一对多不同的就是将外键设置为unique常用于单表的拆分概述在进行多表查询时要删除笛卡尔积需要使其条件为外键主键正常使用select * from emp, dept; 会导致出现以下情况然后实际一个人仅对应一个部门因此需要让emp员工表中的外键dept_id等于dept部门表中的主键dept.id即可使用select * from emp, deptwhere emp.dept_id dept.id; 这样就消除了无效的记录即消除了笛卡尔积分类连接查询内连接查询查询交集部分也就是图中绿色的共有部分隐式内连接即前面概述中采用的方法显示内连接仅是写法不同inner可省略外连接查询查询完整的表本身包含交集部分outer可以省略左外连接右外连接其中还是左外连接用的多因为对于左外连接只要将顺序调换即可具体如下自连接查询一定要起别名自己连接自己可以是内查询也可以是外查询以下图表为例两个案例联合查询就是将两个查询合起来对于关键字all有all就是直接合并两个结果省略all就是合并后去重注意查询的字段以及列数必须一致否则会报错子查询(嵌套查询)标量子查询案例1要查询销售部的所有员工信息需要先知道销售部门id再根据id去查员工信息步骤如下其实直接能合成同一行即采用子查询如下图同时因为括号中的内容只会返回一个信息(销售部门id),所以称为标量子查询案例2查询在方东白之后入职的员工信息列子查询案例1查询 销售部 和 市场部 的所有员工信息案例2查询比 财务部 所有人工资都高的员工信息案例3查询比 研发部 任意一人 工资高的员工信息any也可以换成some返回的列中只要有1个或多个满足条件就可以行子查询案例查询与张无忌薪资与直属领导相同的员工信息(工资一样、领导一样)常规方法先通过下面一行查询出张无忌的薪资与领导id再通过下面一行查询换一种写法要求与括号中的内容一一对应转换成行子查询的方式因为括号中的内容返回的就是salary与managerid的信息表子查询案例1查询与鹿杖客、宋远桥的职位和薪资相同的员工信息先查询鹿杖客、宋远桥的职位和薪资但是由于这不是一个单行数据不能和行子查询一样使用而是使用in表示只要满足其中一行即可、案例2查询入职日期是2006-01-01之后的员工信息及其部门信息先查询该日期之后的员工信息查询这部分员工对应的部门信息