w888

多表查询::::

关联查询 ------ (多表查询)---

需求:  查询 员工及其所在部门  员工的姓名 和部门名称:

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个链接条件 这样的 ,否则的话就是  笛卡尔乘积

 

分类:

技术点:

相关文章: