关联查询之92语法和99语法

92语法

-- 查询部门编号为10的员工信息和所在部门的信息
-- 92 等值连接
select e.ename,d.dname
from emp e,dept d
where e.deptno = d.deptno

--92非等值连接
-- 查询员工姓名 薪资 和薪资等级
select e.ename, e.sal, sg.grade
from emp e, salgrade sg
where e.sal between sg.losal and sg.hisal

--92 外连接
-- 左外连接 以左边的表为主表 右边为添加的数据 
-- 左边表中所有的数据都会出现在结果集 右边表对应跟左边有合适的就显示出来,没有合适的就空着
select e.ename,d.dname
from emp e,dept d
where e.deptno(+) = d.deptno

-- 92 自连接
-- 本表中的一条数据 使用到了本表中的另外一条数据
-- 查询出来员工以及他的上司的名字 
select e.ename || '的上司是:' || mgr.ename
from emp e, emp mgr
where e.mgr = mgr.empno


--- 查询员工姓名 薪资 部门名称 薪资等级
select
from emp e,dept d,salgrade sg
where e.deptno = d.deptno
and e.sal between sg.losal and sg.hisal

select * from emp,dept

 

 

-- 99语法
-- 99交叉连接 相当于是92语法中的笛卡尔积
select * from emp e cross join dept d

-- 自然连接
-- 系统自动使用两张表中同名的列进行等值连接
select * from emp e natural join dept d

--制定某一列左自然连接
select * from emp e join dept d using (deptno)


-- 如果两张表没有同名的列 或者做的不是等值连接
-- join on(万能,除了外连接)
select *
from emp e
join salgrade sg
on e.sal between sg.losal and sg.hisal
where e.deptno = 10

-- 99 左外连接
select e.ename, d.dname
from emp e
left outer join dept d
on e.deptno = d.deptno

-- 99 右外连接
select e.ename, d.dname
from emp e
right outer join dept d
on e.deptno = d.deptno

99语法练习
--使用99语法更改相应作业:
--1.列出所有雇员的姓名及其上级的姓名。
--92语法
select e.ename, mgr.ename from emp e, emp mgr where e.mgr = mgr.empno

--99语法
select e.ename, mgr.ename from emp e join emp mgr on e.mgr = mgr.empno

--2.列出入职日期早于其直接上级的所有雇员。
select e.ename, mgr.ename
from emp e
join emp mgr
on e.mgr = mgr.empno
and e.hiredate < mgr.hiredate

--3.列出所有部门名称及雇员


select e.ename, d.dname from emp e join dept d on e.deptno = d.deptno


--4.列出所有“CLERK”(办事员)的姓名及其部门名称。
select e.ename, d.dname
from emp e
join dept d
on e.deptno = d.deptno
and e.job = 'CLERK'


--5.列出从事“SALES”(销售)工作的雇员的姓名,假定不知道销售部的部门编号。
select e.*
from emp e
where e.deptno = (select d.deptno from dept d where d.dname = 'SALES')


--6.列出在每个部门工作的雇员的数量以及其他信息。
select *
from (select e.deptno, count(e.ename) from emp e group by e.deptno) t01 natural
join dept d


--7.列出所有雇员的雇员名称、部门名称和薪金。
select ename, dname, sal from emp e natural join dept d


--8.求出部门编号为20的雇员名、部门名、薪水等级
select e.ename, e.ename, sg.grade
from emp e
join dept d
on e.deptno = d.deptno
join salgrade sg
on e.sal between sg.losal and sg.hisal

原文地址:https://www.cnblogs.com/su-chu-zhi-151/p/11171508.html