多表查询SQL99

Posted superdrew

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多表查询SQL99相关的知识,希望对你有一定的参考价值。

【1】交叉连接  cross join

select * from emp,dept;                   ---sql92
select * from emp cross join dept;     ---sql99

【2】自然连接  natural join

自然连接会自动查找两张表中所有的相同的字段,进行等值连接

select * from emp e, dept d where e.deptno = d.deptno;  ---sql92
select * from emp e natural join dept d;

查询所有的员工名称,部门编号和部门名称

select e.ename,d.deptno,d.dname
from emp e, dept d
where e.deptno = d.deptno;    ---sql92

select e.ename, deptno, d.dname
from emp e natural join dept d;     ---sql99

【3】using:指定字段进行等值连接

select e.ename ,  deptno,  d.dname   --注意:deptno不区分是哪个表中的。
from emp e inner join dept d     --内连接:通常inner可以省略。
using(deptno);    使用using指定列名,不区分在哪个表中。

【4】on子句;用于指定连接的条件

--查询30号部门员工的编号,姓名和部门的名称
select e.empno,e.ename,d.dname
from emp e,dept d
where e.deptno = d.deptno;  ---sql92

select e.empno,e.ename,d.dname
from emp e join dept d 
on e.deptno = d.deptno
where d.deptno = 30;    ---sql99   


--查看10部门员工姓名,薪水 和薪水等级
select e.ename, e.sal, s.grade
from emp e join salgrade s
on e.sal between s.losal and s.hisal
where e.deptno = 10;     --sql99

【5】自连接

select e1.empno,e1.ename, e2.empno,e2.ename
from emp e1 join emp e2
on e1.mgr = e2.empno;   --sql99
---但是注意;少了KING这个用户,所以使用外连接。

【6】外连接

外连接有三种:左外连接,右外连接,全外连接

--[6] 外连接 [outer] join   outer 可以省略 与 inner一样!
--   左外连接 left  [outer] join 
--   右外连接 right [outer] join
--   全外连接 full  [outer] join

select  e1.empno,e1.ename,e2.empno,e2.ename
from emp e1 
left join emp e2  --e1 是可以看作员工表  e2可以看作领导表
on e1.mgr = e2.empno;

--查询所有部门的详细信息以及每个部门的平均工资,包含没有员工的部门
select d.*,round(nvl(avg(sal),0)) avg_sal
from emp e1 
right join dept d 
on e1.deptno = d.deptno
group by d.deptno,d.dname,d.loc
order by d.deptno;--按照部门编号排序

--查询部门30员工编号,姓名,部门名称,薪水,薪水等级
select e.empno,e.ename,d.dname,e.sal,s.grade
from emp e 
join dept d on e.deptno = d.deptno
join salgrade s on e.sal between s.losal and s.hisal
where d.deptno = 30;

 

 

 

  

  


以上是关于多表查询SQL99的主要内容,如果未能解决你的问题,请参考以下文章

08_MySQL DQL(SQL99标准)_多表连接查询中的内连接

mybatis-基于xml的多表查询

多表联查--00---概述---SQL92,99语法

sql99 连接查询

Oracle - 查询语句 - 多表关联查询

MySQL基础语法之多表连接查询