多表查询

多表查询

1、查询员工的姓名和所在部门的名字

  • 数据表结构 部门表和员工表


    image.png
  • 方式一


    image.png
//两张表给别名
select ename,dname from emp e,dept d where e.deptno = d.deptno;
  • 方式二


//用join 联合另一张表 on 是条件,替换了 where
select ename,dname from emp join dept on emp.deptno = dept.deptno;

三张表的案例

别外一张表是 salgrade (工资等级)

image.png
select ename,dname,grade from emp
join dept join salgrade
on 
emp.deptno = dept.deptno
and
emp.sal between losal and hisal

image.png

案例:在emp表中找出员工和经理和名字

表结构

image.png

把一张表当成两张表来查询

  • 经理放在前面
select e.ename , m.ename from emp e join emp m on e.empno = m.mgr;
image.png
  • 员工放在前面
select m.ename , e.ename from emp m join emp e on e.empno = m.mgr;
image.png

左外联和右外联
以join 为中间 左右两张表 在两边 例如 emp join dept
如果 想让左边的表补齐(显示完) 加 left join
如果 想让右边的表补齐(显示完) 加 right join

另外一种意思:

  • 左外联:如果左边的表中存在记录,但是没有匹配上,还想显示 用left join
  • 右外联:如果右边的表中存在记录,但是没有匹配上,还想显示 用right join
image.png

作业:


image.png

补充:
三表查询

SELECT a.*,b.*,c.* FROM (grace_event a left join grace_event_title b  on a.title_id = b.id ) left join  grace_event_group c 
on b.group_id = c.id WHERE b.group_id = 1 ORDER BY a.time ASC

四表查询

SELECT a.*,b.*,c.*,d.name FROM ((grace_event a left join grace_event_title b  on a.title_id = b.id ) left join  grace_event_group c on b.group_id = c.id) left join grace_event_president d on b.president_id = d.id WHERE b.group_id = 1 ORDER BY a.time ASC
image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容