1. 程式人生 > >oracle 內連線、外連線、自然連線、交叉連線練習

oracle 內連線、外連線、自然連線、交叉連線練習

oracle 內連線、外連線、自然連線、交叉連線練習

--查詢員工資訊
select * from emp;
--查詢部門資訊
select * from dept;

--需求:查詢員工姓名、薪資和所在部門名稱、部門編號

--1.使用交叉連線(笛卡爾積)14條記錄
select ename,sal,dname,dept.deptno from emp,dept where emp.deptno=dept.deptno;
select ename,sal,dname,d.deptno from emp e,dept d where e.deptno=d.deptno;

--2.使用內連線(表1 inner join 表2 on 2個表連線條件)
select ename,sal,dname,d.deptno from emp e inner join dept d on e.deptno=d.deptno
select ename,sal,dname,d.deptno from emp e join dept d on e.deptno=d.deptno
select ename,sal,dname,deptno from emp e join dept d using(deptno)

--3.使用外連線(表1 outer join 表2 on 2個表連線條件)
--(1)左外連線  left   左表為基表(主),匹配表(從),主表的記錄為主,從表沒有匹配的記錄以null值填充
select ename,sal,dname,d.deptno from emp e left outer join dept d on e.deptno=d.deptno
select ename,sal,dname,d.deptno from dept d left outer join emp e on e.deptno=d.deptno
select ename,sal,dname,d.deptno from emp e ,dept d where e.deptno(+)=d.deptno
--(2)右外連線 right outer join 右表為基表,左表為匹配表
select ename,sal,dname,d.deptno from emp e right outer join dept d on e.deptno=d.deptno
--(3)全外連線full outer join,都可以當成主表,表1有的資料表2沒有,表2就用null填充,表2有的資料表1,表1用null填充
select ename,sal,dname,d.deptno from emp e full outer join dept d on e.deptno=d.deptno

--4.自然連線(類似內連線) natural join,預設找尋2個表當中相同的欄位
select ename,sal,dname,deptno from emp e natural join dept d 

--查詢員工上司的名字,顯示員工的姓名及其經理的姓名
--5.自連線
select e1.ename 員工姓名,e2.ename 經理姓名 from emp e1,emp e2 where e1.mgr=e2.empno