Oracle多表查詢

2021-09-24 04:47:30 字數 3488 閱讀 7812

select * from bonus;

select * from salgrade;

/* 多表查詢:

笛卡爾積: 實際上是兩張表的乘積,但是在實際開發中沒有太大意義

格式: select * from 表1,表2

*/select * from emp;

select * from dept;

select * from emp, dept;

select * from emp e1, dept d1 where e1.deptno = d1.deptno;

/* 內聯接:

隱式內聯接:

等值內聯接: where e1.deptno = d1.deptno;

不等值內聯接: where e1.deptno <> d1.deptno;

自聯接: 自己連線自己

顯示內聯接:

select * from 表1 inner join 表2 on 連線條件

inner 關鍵字可以省略

*/select * from emp e1, dept d1 where e1.deptno <> d1.deptno;

--查詢員工編號,員工姓名,經理的編號,經理的姓名

select e1.empno,e1.ename,e1.mgr,m1.ename

from emp e1, emp m1 where e1.mgr= m1.empno;

--查詢員工編號,員工姓名,員工的部門名稱,經理的編號,經理的姓名

select e1.empno,e1.ename,d1.dname,e1.mgr,m1.ename

from emp e1, emp m1,dept d1 where e1.mgr= m1.empno and e1.deptno = d1.deptno;

--查詢員工編號,員工姓名,員工的部門名稱,經理的編號,經理的姓名,經理的部門名稱

select e1.empno,e1.ename,d1.dname,e1.mgr,m1.ename,d2.dname

from emp e1, emp m1,dept d1,dept d2

where

e1.mgr= m1.empno

and e1.deptno = d1.deptno

and m1.deptno = d2.deptno

;--查詢員工編號,員工姓名,員工的部門名稱,員工的工資等級,經理的編號,經理的姓名,經理的部門名稱

select e1.empno,e1.ename,d1.dname,s1.grade,e1.mgr,m1.ename,d2.dname

from emp e1, emp m1,dept d1,dept d2,salgrade s1

where

e1.mgr= m1.empno

and e1.deptno = d1.deptno

and m1.deptno = d2.deptno

and e1.sal between s1.losal and s1.hisal

;--查詢員工編號,員工姓名,員工的部門名稱,員工的工資等級,經理的編號,經理的姓名,經理的部門名稱,經理的工資等級

select e1.empno,e1.ename,d1.dname,s1.grade,e1.mgr,m1.ename,d2.dname,s2.grade

from emp e1, emp m1,dept d1,dept d2,salgrade s1,salgrade s2

where

e1.mgr= m1.empno

and e1.deptno = d1.deptno

and m1.deptno = d2.deptno

and e1.sal between s1.losal and s1.hisal

and m1.sal between s2.losal and s2.hisal

;--查詢員工編號,員工姓名,員工的部門名稱,員工的工資等級,經理的編號,經理的姓名,經理的部門名稱,經理的工資等級

--將工資等級 1,2,3,4 顯示成 中文的 一級 二級 **...

select e1.empno,

e1.ename,

d1.dname,

case s1.grade

when 1 then '一級'

when 2 then '二級'

when 3 then '**'

when 4 then '四級'

else

'五級'

end "等級",

e1.mgr,

m1.ename,

d2.dname,

decode(s2.grade,1,'一級',2,'二級',3,'**',4,'四級','五級') "等級"

from emp e1, emp m1,dept d1,dept d2,salgrade s1,salgrade s2

where

e1.mgr= m1.empno

and e1.deptno = d1.deptno

and m1.deptno = d2.deptno

and e1.sal between s1.losal and s1.hisal

and m1.sal between s2.losal and s2.hisal

;--查詢員工姓名和員工部門所處的位置

select e1.ename,d1.loc from emp e1,dept d1 where e1.deptno = d1.deptno;

select * from emp e1 inner join dept d1 on e1.deptno = d1.deptno;

/* 外連線: (標準,通用寫法)

左外連線: left outer join 左表中所有的記錄,如果右表沒有對應記錄,就顯示空

右外連線: right outer join 右表中的所有記錄,如果左表沒有對應記錄,就顯示空

outer 關鍵字可以省略

oracle中的外連線: (+) 實際上是如果沒有對應的記錄就加上空值

select * from emp e1,dept d1 where e1.deptno = d1.deptno(+);

*/select * from emp e1 left outer join dept d1 on e1.deptno = d1.deptno;

insert into emp(empno,ename) values(9527,'huaan');

select * from emp e1,dept d1 where e1.deptno = d1.deptno(+);

select * from emp e1 right outer join dept d1 on e1.deptno = d1.deptno;

select * from emp e1,dept d1 where e1.deptno(+) = d1.deptno;

Oracle 多表查詢

sql 外連線 sql 按部門統計員工人數 部門號 部門名稱 人數 sql select d.deptno,d.dname,count e.empno 2 from dept d,emp e 3 where d.deptno e.deptno 4 group by d.deptno,d.dname ...

Oracle 多表查詢

等值和不等值連線查詢 為了避免笛卡爾集,可以在 where 加入有效的連線條件。oracle 連線多表查詢 在 where 子句中寫入連線條件。在表中有相同列時,在列名之前加上表名字首 select table1.column,table2.column from table1,table2 whe...

oracle 多表查詢

多表查詢 多表查詢,又稱表聯合查詢,即一條sql語句涉及到的表有多張,資料通過特定的連線進行聯合顯示.笛卡爾積 在數學中,兩個集合x和y的笛卡尓積 cartesian product 又稱直積,表示為x y.假設集合a 集合b 則兩個集合的笛卡爾積為。在資料庫中,如果直接查詢倆張表,那麼其查詢結果就...