多表查询
1、查询员工的姓名和所在部门的名字
-
数据表结构 部门表和员工表
-
方式一
//两张表给别名
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 (工资等级)
select ename,dname,grade from emp
join dept join salgrade
on
emp.deptno = dept.deptno
and
emp.sal between losal and hisal
案例:在emp表中找出员工和经理和名字
表结构
把一张表当成两张表来查询
- 经理放在前面
select e.ename , m.ename from emp e join emp m on e.empno = m.mgr;
- 员工放在前面
select m.ename , e.ename from emp m join emp e on e.empno = m.mgr;
左外联和右外联
以join 为中间 左右两张表 在两边 例如 emp join dept
如果 想让左边的表补齐(显示完) 加 left join
如果 想让右边的表补齐(显示完) 加 right join
另外一种意思:
- 左外联:如果左边的表中存在记录,但是没有匹配上,还想显示 用left join
- 右外联:如果右边的表中存在记录,但是没有匹配上,还想显示 用right join
作业:
补充:
三表查询
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