多表查询::::
关联查询 ------ (多表查询)---
需求: 查询 员工及其所在部门 员工的姓名 和部门名称:
2-1: 这种叫交叉 连接 查询 产生 笛卡尔乘机现象 4*4=16 就是有些重复的记录
这种不是很推荐 使用
SELECT empName,deptName FROM employee ,dept;
就是正常套路 完了用 empName是 员工名字 逗号 分隔 deptName 是部门名称
from 完了是俩个表的 名字y,x; 逗号分隔
就是 张三 记在 业务部 也在 销售部 重复
多表查询的规则: 确定查询那些表2: 确定哪些哪些字段 3(表与表之间连接条件
3: 规律 连续条件数量 -1 简单点说 连接条件3个 就是2个连接 连接 要是 4个就是3个连接 现在 是 2个 就是一个链接
2:重点 内连接查询 只有 (满足条件的结果才能显示)
SELECT empName, deptName --(2 确定哪些 哪些字段
FROM employee,dept 1:确定查询哪些表
WHERE employee.deptId=dept.id 3 表与表之间连接的关系
第三个就是 用主表的部门id 来连接 副表的部门id
2-4:内连接的另一种 语法
使用别名!
SELECT e.empName,d. deptName
FROM employee e
INNER JOIN dept d
ON e. deptId=d.id;
套路跟上面一样 不一样的 是 可以 吧名字用AS 或者直接改为e 或者d
2——5: 需求查询每个部门的员工
1: 预期的结果: 员工id vs 部门id
软件开发部: 张三;
软件开发部 李四;
应用维护部 王五;
秘书部 陈六;
总经办 null;
SELECT d.deptName,e.empName
FROM dept d,employee e
WHERE d.id=e.deptId;
首先 用 正常套路 select 完了 是 第二行 先把 部门id 和 员工id 进行赋值 d 或者e
完了就是 where 部门id= 员工 id;
但是 null 总经办他 不显示呀 所以 这个 链接 不符合 要求
3:: 左外连接查询:使用左边表的数据去匹配右边表 如果符合链接条件的结果则显示,如果
不符合则不显示 符合则显示。
用部门员工 去找 员工表
如果 左右俩边都有 数据 就抖显示
注意: 左外连接 左边的数据一定会完成显示 XX 左边链接 关键词 OUTER JOIN
SELECT d.deptName, e.empName
FROM dept d
LEFT OUTER JOIN employee e
ON D.ID=E.DEPTid;
就是 正常套路 上面俩个是 俩个 部门表和 员工表
下一行 是 把他们变成d 和e 用 左边链接语句
最后一句 对比 部门表 =员工表
这样就把 null 显示出来了
匹配到 就显示 匹配 不对 不显示
3-4: 右外链接查询:
3:: 右外连接查询:使用右边表的数据去匹配左边表 如果符合链接条件的结果则显示,如果
不符合则不显示 符合则显示。
3-4: 内连接 查询 又叫自连接 就是 都是 员工表 内部查询的意思
需求 查询员工 及其 上司的预期 结果:
张三 null
李四 张三
王五 李四
陈六 王五
SELECT e.empName,b.empName
FROM employee e
LEFT OUTER JOIN employee b
ON e.bossId=b.id;
自查逊 就是内部查询 就是 设置 a和b 代表着俩个值 是否相等 因为都是 一个员工表
表与表链接条件 一定不要少 就少一个 5个 4个链接条件 这样的 ,否则的话就是 笛卡尔乘积