程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 多表查詢(學習筆記),(學習筆記)

多表查詢(學習筆記),(學習筆記)

編輯:Oracle教程

多表查詢(學習筆記),(學習筆記)


語法:

SELECT [DISTINCT] * | 列名稱 [AS]別名,........
FROM 表名稱1 [別名1],表名稱2 [別名2],...
[WHERE 條件(s)]
[ORDER BY 排序的字段 1,ASC| DESC,排序的字段2 ASC| DESC,....] 
  • 示例一 查詢所有員工的信息和部門信息

   

SELECT * FROM EMP,DEPT;

查詢結果可以看到有56條記錄,而emp表只有14條,dept表只有4條,很多重復記錄,這就是多表查詢所產生的笛卡爾積

消除笛卡爾積,在where中加入條件來消除

  • 示例二 查詢所有員工的信息和部門信息
SELECT * FROM emp e,dept d
WHERE e.deptno=d.deptno;

這樣結果就正常了

  •    示例三 查詢每個員工的編號、姓名、職位、基本工資、部門名稱、部門位置
SELECT e.empno,e.ename,e.job,e.sal,d.dname,d.loc
FROM emp e,dept d
WHERE e.deptno=d.deptno;
  • 示例四 查詢出每個員工的編號、姓名、入職日期、基本工資、工資等級

此時要想進行等級查詢就要用要salgrade表,但是salgrade表中並沒有字段與emp表中字段相對應,但是在salgrade表中有losal(最低工資)、hisal(最高工資)用於表示一個工資等級的范圍,所以,可以通過BETWEEN...AND進行笛卡爾積的消除

 

SELECT e.empno,e.ename,e.hiredate,e.sal,s.grade
FROM emp e,salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal;

 

  • 示例五 示例四中的工資等級替換 1顯示為E等級工資,2顯示為D等級工資3顯示為C等級工資,4顯示為B等工資,5顯示為A等工資
SELECT e.empno,e.ename,e.hiredate,e.sal,
DECODE(s.grade,1,'E等工資',
                2,'D等工資',
                3,'C等工資',
                4,'B等工資',
                5,'A等工資'
) 工資等級
FROM emp e,salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal;
  • 示例六 查詢每個員工的姓名、職位、基本工資、部門名稱、工資等級

數據在3張表中emp,dept,salgrade

SELECT e.ename,e.sal,d.dname,
DECODE(s.grade,1,'E等工資',
                2,'D等工資',
                3,'C等工資',
                4,'B等工資',
                5,'A等工資'
) 工資等級
FROM emp e,dept d,salgrade s
WHERE e.deptno=d.deptno 
    AND e.sal BETWEEN s.losal AND s.hisal;

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved