1. 程式人生 > >Oracle單表查詢(一)

Oracle單表查詢(一)

1.1獲取表中所有的行與列

若領導要看所有員工的資訊,大家應該都會用,直接select * 就可以了。

1.2從表中檢索出部分行

  例如我們只想看job是‘salesman’的員工,則增加判斷條件 where job='SALESMAN'(此處必須是大寫,oracle的關鍵字、表名、使用者名稱、密碼是不區分大小寫的,但是此處是具體的欄位值,區分大小寫~!),為了方便大小寫的兩種情況都附上

 

 1.3查詢空值

 oracle中查詢某一列為空的方法是用 ‘is null’,而非'= null',例如我們要查詢沒有提成的員工資訊

 

 null不支援加減乘除以及大小比較、相等比較,否則只能返回空

 

1.4將空置轉換為實際的值

比如我們要查詢所有的員工姓名以及他們的提成,並把提成為空的置為0,在這裡有兩種寫法,第一種是使用nvl

select ename,nvl(comm) from EMP;

第二種是使用coalesce

相對於nvl來說coalesce支援多個引數,可以直接返回第一個不為空的值,例如我們先建立一個檢視(以後會介紹)

CREATE or REPLACE VIEW v as
(SELECT null as c1,null as c2, 1 as c3, null as c4,2 as c5, null as c6 FROM dual)
UNION ALL
(SELECT null as c1,null as c2,null as c3,3 as c4,null as c5,2 as c6 from dual);


select * from v;

 

這時我們去查詢,每一行不為空的第一個元素,直接
SELECT coalesce(C1,C2,C3,C4,C5,C6)FROM v;

 

 

 如果要用nvl完成這個功能(巢狀好多層)

 

SELECT nvl(nvl( nvl( nvl(nvl(c1,c2),c3),c4),c5),c6) as 第一個不為空的 from v;

 

 

1.5查詢滿足多個條件的行

  查詢部門10中所有沒有提成的員工

SELECT * FROM EMP WHERE DEPTNO=10 AND comm  is null

查詢部門20中工資不超過2000的員工

 

SELECT * from EMP WHERE DEPTNO=20 AND SAL<=2000

 

只需要用‘and’ 拼接where的條件就可以了

1.6從表中檢索部分列

    之前查詢的列都是直接  * 全出查出,這樣會導致效率低下,一般我們需要什麼欄位就去查什麼欄位,例如我們想檢視部門20的員工編號、姓名、上級編號

select EMPNO,ENAME,MGR FROM EMP WHERE DEPTNO=20;

1.7給列取別名

在1.6的查詢中,我們想把EMPNO顯示為‘編號’,ENAME顯示為‘姓名’,‘MGR’顯示為上級,則需要使用AS

 

select EMPNO as 編號,ENAME as 姓名,MGR as 上級 FROM EMP WHERE DEPTNO=20;

其實as是可以省略的

 

select EMPNO  編號,ENAME  姓名,MGR  上級 FROM EMP WHERE DEPTNO=20;