4.3多表查询
--union
select *from t1
union
select *from t2;
-- union all,其中(a,12) 出现了2次
select * from t1
union all
select * from t2;
- 查询 manager 的姓名、所属部门名称和入职日期
-- 使用 on 声明连接条件
select ename,dname,job,hiredate
from emp
inner join dept on emp.deptno=dept.deptno
where job='manager';
-- 使用 using 声明连接条件
select ename,dname,job,hiredate
from emp
inner join dept using (deptno)
where job='manager';
查询每位员工的 ename、dname、sal
-- 使用 on 声明连接条件
select ename,dname,sal from emp
left join dept on emp.deptno=dept.deptno;
-- 使用 using 声明连接条件
select ename,dname,sal
from emp
left join dept using(deptno);
查询各地区的员工数量--
-- 使用 on 声明连接条件
select loc,count(empno) 员工数
from emp right join dept on emp.deptno=dept.deptno
group by loc;
-- 使用 using 声明连接条件
select loc,count(empno) 员工数
from emp
right join dept using (deptno)
group by loc;
-- 对表 t1 和表 t2 进行全连接
select * from tl left join t2 on t1.公共字段 1=t2。公共字段2
union
select * from tl right join t2 on t1.公共字段1=t2.公共字段2;
--查询所有员工的姓名及直属领导的姓名
select 员工表 .ename 员工姓名 ,领导表 .ename 领导姓名
from emp 员工表 left join emp 领导表 on 员工表 .mgr= 领导表empno;
查询入职日期早于直属领导的员工的姓名及所属部门
select 员工表 .empno,员工表 .ename,dname
from emp 员工表
left join emp 领导表 on 员工表 .mgr= 领导表 .empno
left join dept on 员工表 .deptno=dept.deptno
where 员工表 .hiredate< 领导表 .hiredate;
-- 使用 from 子句
select * from t1,t2;
-- 使用 cross join
select * from t1 cross join t2;
-- 表 t1和表 t2 中,均包含 4 条记录,最后返回 4*4,即 16 条记录
根据分组逻辑创建表--
create table salgrade(grade int,losal int,hisal int);
insert into salgrade values('低收入人群,700,1500), ('中等收入人群,,1501,3000), ('高收入人群,,3001,9999);
使用 on 声明不等值的连接条件
select empno,ename,sal,grade
from emp left join salgrade
on sal between losal and hisal;
-- 使用 where 声明不等值的连接条件
select empno,ename,sal,grade
from emp,salgrade
where sal between losal and hisal;
暂无数据