Oracle從零開始 SQL語句 多表查詢

2021-06-13 13:51:45 字數 1728 閱讀 7496

a) 用where消除笛卡爾積

select * from emp,dept

where emp.deptno=dept.deptno;

如果表名太長,可以給表起別名:

select * from emp e,dept d

where e.deptno=d.deptno;

b)自相關

如查詢每個雇員的姓名、工作、雇員的直接上級領導的姓名(上級領導也是在雇員表中,所以是自相關)

select e.ename,e.job,m.ename

from emp e,emp m

where e.mgr=m.empno;

c)步步為營

如:查詢每個雇員的姓名、工資、部門名稱、工資在公司的等級、及其領導的姓名及工資所在公司的等級

分析:需要雇員表與部門表、工資等級表,雇員與部門用部門編號連線,雇員與工資等級是用sal在工資表的losal和hisal的範圍內來連線

第一步:首先查詢每個雇員的姓名、工資、部門名稱、工資在公司的等級

第二步:其領導的姓名及工資所在公司的等級,所以加入藍色部分

select e.ename, e.sal, d.dname, s.grade,m.ename, m.sal, ms.grade

from emp e, dept d, salgrade s, emp m,salgrade ms

where e.deptno=d.deptno and e.sal between s.losal and s.hisaland e.mgr=m.empno

and m.sal between ms.losal and ms.hisal;

第三步:要求按照以下的樣式顯示工資等級:

第五等工資

第四等工資

第三等工資

第二等工資

第一等工資

此時肯定只能使用decode()函式,將s.grade和ms.grade和改為紅色部分

select e.ename, e.sal, d.dname,

decode(s.grade,1,'第五等工資', 2,'第四等工資', 3,'第三等工資', 4,'第二等工資', 5,'第一等工資'),

m.ename, m.sal, 

decode(ms.grade,1,'第五等工資', 2,'第四等工資', 2,'第三等工資', 4,'第二等工資', 5,'第一等工資')

from emp e, dept d, salgrade s, emp m,salgrade ms

where e.deptno=d.deptno and e.sal between s.losal and s.hisaland e.mgr=m.empno

and m.sal between ms.losal and ms.hisal;

如dept表中有四個部門,emp表中的雇員在其中3個部門中,查詢雇員及所在部門的編號、名稱與位置

發現沒有編號為40的部門,因為雇員沒有在這個部門的,所以沒有顯示,如果想讓它顯示出來,就要用到右連線

(+)在=左邊:表示右連線

(+)在=右邊,表示左連線(系統預設就是左連線)

如:查詢雇員的編號、姓名及其領導的編號、姓名

Django 從零開始

方法1 pip install django 1.6.5 測試是否安裝成功 python import django 1,6,5,final 0 django 使用了 python 標準的 distutils 安裝法,在 linux 平台可能包括如下步驟 tar xzvf django tar.gz...

HTML從零開始

一 標籤 1.使用小寫 2.開始標籤常被稱為開放標籤 opening tag 結束標籤常稱為閉合標籤 closing tag 有效 示例 i reallystrong mean thatem 無效 示例 invalid i reallyem mean thatstrong 二 屬性 1.開始標籤包含...

vim 從零開始

相信大家一開始接觸linux時肯定不知道為什麼要用vim這個奇怪的東西,有各種奇怪的模式,還不如直接用gedit,簡單快捷。有關這個問題大家可以去看知乎大神,今天我在這裡只想記錄一下自己使用vim的過程。雖然vim很強大,但是如果沒用配置最初的狀態是很醜也不怎麼好用的。在配置的過程中,我參考了一下幾...