Oracle單表查詢(一)
阿新 • • 發佈:2018-11-12
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;