首页 > 其他 > 详细

多表查询

时间:2020-05-31 13:18:36      阅读:37      评论:0      收藏:0      [点我收藏+]

主要是想记录一下多表查询

技术分享图片

 

 

 

技术分享图片

 

 

 emp表中的dept_id 是 dept表中的外键和 id相对应

一、内连接  (就比如两个集合 A,B,取他们相交的元素)

  技术分享图片

 

 

 

  1.隐式内连接  (获取员工和部门的信息)

  SELECT * FROM emp e,dept d WHERE e.dept_id = d.id

  结果

  技术分享图片

 

 

 

  2.显式内连接 (获取女员工和部门的信息)

  SELECT * FROM emp e INNER JOIN dept d ON e.dept_id = d.id WHERE e.gender=‘女‘

  结果

  技术分享图片

 

 

  可以看到,员工关羽没有填写dept_id 无法与dept表相匹配,导致记录不存在。因此可以采用外连接方式。

     

 

二、外连接

  左外连接 (就比如两个集合 A,B,取他们相交的元素)

技术分享图片

 

 

 

  SELECT * FROM emp e LEFT JOIN dept d ON e.dept_id = d.id

  结果

  技术分享图片

 

 

     带有条件查询  (查询所有员工和部门信息以及工资大于2000)

  SELECT * FROM emp e LEFT JOIN dept d ON e.dept_id = d.id WHERE e.salary>2000

  结果

  技术分享图片

 

 

 

三、子查询

  1. 查询部门为市场部的员工信息 (单行单列)

  SELECT * FROM emp WHERE emp.dept_id = (SELECT id FROM dept WHERE name=‘市场部‘)

  结果

  技术分享图片

 

 

   

  2. 查询部门为市场部和科研部的员工信息 (多行单列)

  SELECT * FROM emp e WHERE e.dept_id IN (SELECT id FROM dept WHERE name=‘市场部‘ OR name=‘科研部‘)

  结果

  技术分享图片

 

 

 

  3. 查询入职时间为2018-04-05 10:08:48 之后的员工信息和部门信息 (多行多列)

  SELECT * FROM dept d,(SELECT * FROM emp e WHERE date>‘2018-04-05 10:08:48‘) t WHERE d.id = t.dept_id 

  结果

  技术分享图片

 

 

   这里将 SELECT * FROM emp e WHERE date>‘2018-04-05 10:08:48‘ 作为虚拟表 来查询,这里由于员工关羽没有填写dept_id,因此没被          添加。

  可以采用左外连接实现  SELECT * FROM emp e LEFT JOIN dept d ON e.dept_id = d.id WHERE e.date>‘2018-04-05 10:08:48‘

  结果

  技术分享图片

 

 

 

四、例子 

  获取部门编号,部门名称,每个部门人数

  SELECT d.*,t.total FROM dept d,(SELECT dept_id,count(*) total FROM emp e GROUP BY e.dept_id) t
  WHERE d.id = t.dept_id

  结果

  技术分享图片

 

多表查询

原文:https://www.cnblogs.com/Alida/p/12997087.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!