久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Oracle PL/SQL開發(fā)基礎(chǔ)(第六彈:簡單查詢)

 張小龍net館藏 2017-10-17

查詢表數(shù)據(jù)

查詢特定的列數(shù)據(jù)

如:

SELECT ename, empno, job, hiredate
  FROM scott.emp;
  • 1
  • 2

查詢所有列數(shù)據(jù)

如:

SELECT * FROM emp;
  • 1

使用DISTINCT查詢唯一列數(shù)據(jù)

可以使用DISTINCT關(guān)鍵字獲取列中的唯一值,,即去除重復(fù)數(shù)據(jù),,如:

SELECT DISTINCT job FROM emp;
  • 1

要注意,,DISTINCT會導(dǎo)致索引失效,,在大型數(shù)據(jù)集查詢中應(yīng)該盡量避免DISTINCT查詢,。

在查詢中使用表達(dá)式

如:

SELECT empno, ename, sal * (1 + 0.12) FROM emp;
  • 1

在進(jìn)行算術(shù)運(yùn)算時,如果列包含NULL值,,那么結(jié)果也為NULL,。

使用列別名

如:

SELECT empno 員工名稱, ename "員工姓名_NAME", sal * (1 + 0.12) raised_sal, sal AS 薪水 FROM emp;
  • 1

AS關(guān)鍵字可選。
如果列別名中包含空格,、特殊字符或者大小寫敏感字符,,則要用雙引號把別名引起來。

字符串連接

使用||符號,,如:

SELECT ename || '的薪資為:' || sal 員工薪水 FROM emp;
  • 1

指定查詢條件

簡單WHERE子句

如:

SELECT * FROM emp WHERE deptno = 20;

SELECT empno, ename, job FROM emp WHERE sal >= 1500 AND sal <= 2500;
  • 1
  • 2
  • 3

使用范圍操作符

可以使用BETWEEN AND,,IN,LIKE,。

BETWEEN AND

如:

SELECT empno, ename, job FROM emp WHERE sal BETWEEN 1500 AND 2500;
  • 1

實(shí)際上在使用BETWEEN AND操作符時,,Oracle會將該語句轉(zhuǎn)換為一對AND條件,因此,上面的語句會被Oracle翻譯成:

SELECT empno, ename, job FROM emp WHERE sal >= 1500 AND sal <= 2500;
  • 1

因此使用BETWEEN AND并沒有提高性能,,只是邏輯上給了用戶一種更接近自然語言的表達(dá)方式,。

IN

如:

SELECT empno, ename, job, mgr, hiredate, sal
  FROM emp
 WHERE job IN ('SALESMAN', 'CLERK', 'ANALYST');
  • 1
  • 2
  • 3

對于IN查詢條件,Oracle會將其轉(zhuǎn)換為一組OR條件,,因此對于上面的語句,,Oracle會將其轉(zhuǎn)換為如下語句:

SELECT empno, ename, job, mgr, hiredate, sal
  FROM emp
 WHERE job = SALESMAN OR job = CLERK OR job = ANALYST;
  • 1
  • 2
  • 3

LIKE

LIKE查詢也成為模糊查詢,%通配符表示零個或多個字符,,_通配符表示一個字符,,如“”

SELECT empno, ename, job, mgr, hiredate, sal
  FROM emp
 WHERE ename LIKE 'J%';

SELECT empno, ename, job, mgr, hiredate, sal
  FROM emp
 WHERE hiredate LIKE '%81';

SELECT empno, ename, job, mgr, hiredate, sal
  FROM emp
 WHERE ename LIKE '__A%';
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

判斷NULL值

如:

SELECT empno, ename, job, mgr, hiredate
  FROM emp
 WHERE mgr IS NULL;

SELECT empno, ename, job, mgr, hiredate
  FROM emp
 WHERE mgr IS NOT NULL;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

使用邏輯組合

如:

SELECT empno, ename, job, mgr, hiredate, sal, deptno
  FROM emp
 WHERE deptno = 20 AND hiredate LIKE '%82';

SELECT empno, ename, job, mgr, hiredate, sal, deptno
  FROM emp
 WHERE deptno = 20 OR hiredate LIKE '%82';

SELECT empno, ename, job, mgr, hiredate, sal, deptno
  FROM emp
 WHERE job NOT IN ('CLERK', 'MANAGER', 'SALESMAN');

SELECT empno, ename, job, mgr, hiredate, sal, deptno
  FROM emp
 WHERE sal NOT BETWEEN 1000 AND 2500;

SELECT empno, ename, job, mgr, hiredate, sal, deptno
  FROM emp
 WHERE ename NOT LIKE '%A%';
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

排序

ORDER BY指定要對結(jié)果集進(jìn)行排序,可選擇ASC表示升序,,DESC表示降序,。默認(rèn)為ASC。
ORDER BY子句必須是SELECT語句的最后一個子句,。
如:

SELECT   empno, ename, job, mgr, hiredate, sal, deptno
    FROM emp
   WHERE deptno = 20
ORDER BY empno;

SELECT   empno, ename, job, mgr, hiredate, sal, deptno
    FROM emp
   WHERE deptno = 20
ORDER BY empno, ename DESC;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

除了直接指定列名之外,,還可以根據(jù)SELECT語句的字段列表的索引順序指定排序,如根據(jù)SELECT語句中的第4個字段mgr進(jìn)行排序:

SELECT   empno, ename, job, mgr, hiredate, sal, deptno
    FROM emp
   WHERE deptno = 20
ORDER BY 4 DESC;
  • 1
  • 2
  • 3
  • 4

如果指定一個不存在的SELECT語句中的索引號,,Oracle會提示異常,,如:

SELECT   empno, ename, job, mgr, hiredate, sal, deptno
    FROM emp
   WHERE deptno = 20
ORDER BY 8 DESC;
  • 1
  • 2
  • 3
  • 4

異常為:

ORA-01785:ORDER BY項必須是SELECT-list表達(dá)式的數(shù)目
  • 1

統(tǒng)計函數(shù)

記錄統(tǒng)計

如:

SELECT COUNT(*) 記錄條數(shù) FROM emp WHERE deptno=20;
  • 1

COUNT(*)返回SELECT語句標(biāo)準(zhǔn)的行數(shù),包括重復(fù)行和有空值列的行,。
如果要統(tǒng)計某個字段的非空值得個數(shù),,可以這么寫:

SELECT COUNT(comm) 提成員工數(shù) FROM emp;
  • 1

COUNT默認(rèn)使用ALL參數(shù),表示提取所有包括重復(fù)的記錄,,因此上面的語句等同于:

SELECT COUNT(ALL comm) 提成員工數(shù) FROM emp;
  • 1

如果要獲得唯一記錄數(shù),,則可以:

SELECT COUNT(DISTINCT job) 職位個數(shù) FROM emp;
  • 1

匯總和平均值計算

SUM函數(shù)可以用來匯總,如:

SELECT SUM(sal) 薪水總計, SUM(comm) 提成總計 FROM emp;
  • 1

AVG函數(shù)可以用來計算平均值,,如:

SELECT AVG(sal) 平均薪資,AVG(comm) 平均提成 FROM emp;
  • 1

最小值和最大值

如:

SELECT MIN(sal) 最低薪資,MAX(sal) 最高薪資 FROM emp;
SELECT MIN(hiredate) 最早雇傭日期,MAX(hiredate) 最晚雇傭日期 FROM emp;
  • 1
  • 2

統(tǒng)計函數(shù)的NULL值處理

可以使用NVL函數(shù)將NULL替換成別的值,,如:

SELECT MIN(NVL(comm,0)) 最低提成,MAX(NVL(comm,0)) 最高提成 FROM emp;
  • 1

分組統(tǒng)計

使用GROUP BY來分組,如:

SELECT   deptno, SUM (sal) 部門薪資小計
    FROM emp
GROUP BY deptno
ORDER BY SUM (sal);
  • 1
  • 2
  • 3
  • 4

分組對于初學(xué)者來說比較難于掌握,,這里就簡單地說一下,。
在使用GROUP BY子句時,除了作為分組函數(shù)(如:SUM,,AVG,,COUNT等)參數(shù)的列不用包含在GROUP BY子句中之外,任何在SELECT列表中的其他列都必須出現(xiàn)在GROUP BY子句中,。不過在GROUP BY子句中的列不必一定出現(xiàn)在SELECT列表中,。
分組結(jié)果通過分組列隱式排序,也可以用ORDER BY指定不同的排序順序,,但也只能用分組函數(shù)或分組列進(jìn)行排序,。

HAVING子句

例如如果只是想對部門編號為20和30的員工進(jìn)行分組統(tǒng)計,,使用WHERE子句即可,如:

SELECT   deptno, job, SUM (sal) 薪資小計
    FROM emp
   WHERE deptno IN (20, 30)
GROUP BY deptno, job
  • 1
  • 2
  • 3
  • 4

如果要對分組的結(jié)果進(jìn)行進(jìn)一步的過濾,,比如要顯示分組后薪資小計大于2000的分組結(jié)果,,那么可以:

SELECT   deptno, job, SUM (sal) 薪資小計
    FROM emp
   WHERE deptno IN (20, 30)
GROUP BY deptno, job
  HAVING SUM (sal) > 2000;
  • 1
  • 2
  • 3
  • 4
  • 5

HAVING子句只能用在GROUP BY子句的后面,不能使用WHERE子句來取代HAVING子句,,否則將會產(chǎn)生異常,。

使用DUAL表

DUAL表是Oracle系統(tǒng)中對所有用戶可用的一個實(shí)際存在的表,是一個1行1列的表,,這個表不能實(shí)際存儲信息,,也不具有任何其他的 意義,在實(shí)際應(yīng)用中僅用來執(zhí)行SELECT語句,,如:

-- 查詢當(dāng)前系統(tǒng)日期
SELECT TO_CHAR (SYSDATE, 'yyyy-mm-dd hh24:mi:ss') FROM DUAL;
-- 查詢當(dāng)前系統(tǒng)用戶
SELECT USER FROM DUAL;
-- 輸出靜態(tài)文本
SELECT 'hello' FROM DUAL;
-- 計算表達(dá)式
SELECT 500 * 60 FROM DUAL;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多