—多表查詢中的一些概念
—笛卡爾積
select * from emp e,dept d;
—等值連線
select * from emp e,dept d
where e.deptno=d.deptno;
—內連線
select * from emp e inner join dept d
on e.deptno=d.deptno;
—查詢出所有部門,以及部門下的 員工資訊【外連線】
select * from emp e right join dept d
on e.deptno=d.deptno;
—查詢出所有員工資訊,以及員工所屬部門【外連線】
select * from emp e left join dept d
on e.deptno=d.deptno;
—oracle中專用外連線
select * from emp e,dept d
where e.deptno(+)=d.deptno;
—查詢出員工姓名,員工領導姓名
—自連線:自連線其實就是站在不同的角度把一張表看成多張表
select e2.ename,e1.ename
from emp e1,emp e2
where e1.empno=e2.mgr;
—查詢出員工姓名,員工部門名稱,員工領導名稱,員工領導部門名稱
select e2.ename,e1.ename,d2.dname,d1.dname
from emp e1,emp e2,dept d2,dept d1
where e1.empno=e2.mgr
and e2.deptno=d2.deptno
and e1.deptno=d1.deptno
—子查詢
—子查詢返回乙個值
—查詢出工資和』scott』一樣的員工資訊
select * from emp where sal in
(select sal from emp where ename =『scott』);
—子查詢返回乙個集合
—查詢出工資和10號部門任意員工一樣的員工資訊
select sal from emp where sal in(
select sal from emp where deptno=10);
—子查詢返回一張表
—查詢出每個部門最低工資和最低工資員工姓名,和該員工所在的部門名稱
—1.先查詢出每個部門的最低工資
select deptno,min(e.sal) msal from emp e
group by deptno;
—2.三表聯查的到最終結果
select t.deptno,t.msal,e.ename,d.dname
from (
select deptno,min(e.sal) msal
from emp e
group by deptno) t,dept d,emp e
where t.deptno=e.deptno
and t.msal=e.sal
and e.deptno=d.deptno;
Oracle資料庫 內連線 外連線 左連線
總結 內連線 僅僅顯示匹配的行 外連線 設法顯示不匹配的行,包括左 外 連線 右 外 連線 全 外 連線 左 外 連線 左表的行全顯示 右表不存在匹配時填null 右 外 連線 右表的行全顯示 左表不存在匹配時填null 全 外 連線 左連線和右連線的結果再做合併 union sql ansi的寫法...
Oracle資料庫 內連線 外連線 左連線
內連線 僅僅顯示匹配的行 外連線 設法顯示不匹配的行,包括左 外 連線 右 外 連線 全 外 連線 左 外 連線 左表的行全顯示 右表不存在匹配時填null left join 右 外 連線 右表的行全顯示 左表不存在匹配時填null right join 全 外 連線 左連線和右連線的結果再做合併...
資料庫 內連線 外連線 左連線
總結 內連線 僅僅顯示匹配的行 外連線 設法顯示不匹配的行,包括左 外 連線 右 外 連線 全 外 連線 左 外 連線 左表的行全顯示 右表不存在匹配時填null 右 外 連線 右表的行全顯示 左表不存在匹配時填null 全 外 連線 左連線和右連線的結果再做合併 union sql ansi的寫法...