多表查询-SQL92
时间:2021-07-01 10:21:17
帮助过:21人阅读
笛卡尔积式的查询
select * from emp,dept;
--笛卡尔积查询的结果会有很多无效的数据,所以要通过关联条件进行筛选
--所以,出现了一些“关联符号”
--等值连接:提示查询结构中如果有相同的列,要指定表名 标识 是哪个表的字段
select * from emp,dept
where emp.deptno
= dept.deptno
order by dept.deptno;
--使用多表查询可以给表 指定 别名 表的别名不要加 AS 报错
--给表取别名之后,原来的表名不能再使用了 (只能使用的是别名)
select e.empno,e.ename,e.job,e.deptno,d.dname,d.loc
from emp e,dept d
where e.deptno
= d.deptno
order by deptno;
--非等值连接
--查询所有员工的姓名,职位,薪水和薪水等级
select e.ename,e.job,e.sal,s.grade
from emp e, salgrade s
where e.sal
>= s.losal
and e.sal
<=hisal
--条件也可以使用between...and...
select e.ename,e.job,e.sal,s.grade
from emp e,salgrade s
where e.sal
between s.losal
and s.hisal;
--自连接
--查询员工编号,姓名,领导的编号和姓名
--select * from emp;
select e1.empno ,e1.ename,e1.mgr,e2.ename
from emp e1,emp e2
--e1 可以看作是员工表,e2可以看作领导表
where e1.mgr
= e2.empno;
--让员工表领导的编号等于领导表的员工编号
select e1.empno ,e1.ename,e2.empno,e2.ename
from emp e1,emp e2
where e1.mgr
= e2.empno;
--查询所有的员工编号,姓名,有领导的显示领导的编号和姓名,没有领导的只显示员工信息
--外连接 :显示某张表中没有关联的信息,可以通过 "(+)" 来实现
select e1.empno ,e1.ename,e1.mgr,e2.ename
from emp e1,emp e2
where e1.mgr
= e2.empno(
+);
--左外连接
--查询所有部门的信息以及每个部门的平均工资,包涵没有员工的部门
select d.
*,
round(nvl(
avg(e.sal),
0)) avg_sal
from emp e,dept d
where e.deptno(
+)
= d.deptno
group by d.deptno,d.dname,d.loc
order by d.deptno;
--查询20部门的员工编号,姓名,薪水,部门名称,薪水等级
select e.empno,e.ename,e.sal,d.dname,s.grade
from emp e,dept d ,salgrade s
where e.deptno
= d.deptno
and e.sal
between s.losal
and s.hisal
and d.deptno
=20;
--n张表关联查询,至少需要n-1个条件关联
多表查询-SQL92
标签:group 笛卡尔积 员工 学习 from color 等值连接 mgr job