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 則兩個集合的笛卡爾積為。在資料庫中,如果直接查詢倆張表,那麼其查詢結果就...