oracle數據庫的一些語法

字符串操做【CONCAT】,【||】,【LENGTH】,【UPPER,LOWER,INITCAP】,【TRIM,LTRIM,RTRIM】 ,【LPAD,RPAD】,【SUBSTR】,【INSTR】;數值操做【ROUND】,【TRUNC】,【MOD】,【CEIL】,【FLOOR】;日期操做;空值操做;查詢語句的一些查詢條件;聚合函數;EXISTS關鍵字;僞列ROWNUM;DECODE函數;CASE ;排序函數;並、交、差集;高級分組函數java

--------------------------------------------------------------------------------------------
oracle

oracle的字符串操做:
1.字符串鏈接:【CONCAT】
SELECT CONCAT(ename,sal) FROM emp

2.鏈接字符串操做符:【||】
SELECT ename||','||sal FROM emp

3.獲取字符串長度:【LENGTH】
SELECT ename,LENGTH(ename) FROM emp

4.大小寫字母轉換:【UPPER,LOWER,INITCAP】
SELECT UPPER('helloworld'),LOWER('HELLOWORLD'),INITCAP('hello world') FROM dual

5.去重函數:【TRIM,LTRIM,RTRIM】  
SELECT LTRIM('eeeeeliteeeee','e') FROM dual      --liteeeee
SELECT LTRIM('esesesliteee','es') FROM dual      --liteee

6.補位函數:【LPAD,RPAD】
SELECT LPAD(sal,6,'$') FROM emp

7.截取字符串:【SUBSTR】
參數:從指定字符串的指定位置開始連續取若干字符。第三個字符能夠不傳入,不傳入則是取到末尾,若第三個參數的值大於實際能夠獲取的字符長度時也默認取到字符串末尾
SELECT SUBSTR('thinking in java',10,2) FROM dual   -- in

8.【INSTR】函數:查找給定字符串在當前字符串中位置
參數3:從第幾個字符開始查找。  參數4:查找第幾回出現。若沒有符合要求則返回值爲0.
參數3,4均可以不指定,不指定則默認爲1
SELECT INSTR('thinking in java','in',4,2) FROM dual  -- 10
-------------------------------------------------------------------------------------
oracle數值操做:
1.四捨五入:【ROUND】
參數2表示保留到小數點後多少位,0則是保留到整數位,負數則是10位以上的單位。
SELECT ROUND(45.678,2) FROM dual    -- 45.68
SELECT ROUND(45.678,-1) FROM dual   -- 50
SELECT ROUND(45.678,-2) FROM dual   --0

2.截取數值函數:【TRUNC】
SELECT TRUNC(45.789,2) FROM dual    -- 45.78
SELECT TRUNC(45.789,-1) FROM dual   -- 40
SELECT TRUNC(45.789,-2) FROM dual   -- 0

3.求餘:【MOD】
SELECT MOD(11.1,3) FROM dual    -- 2.1

4.向上取整:【CEIL】   向下取整:【FLOOR】
SELECT CEIL(45.678) FROM dual    -- 46
SELECT FLOOR(45.678) FROM dual     -- 45
------------------------------------------------------------------------------------
oracle日期操做
1.DATE與TIMESTAMP
DATE:表示日期,精度到秒,七個字節分別表示世紀年月日時分秒
TIMESTAMP時間戳:表示日期,精度到納秒,前七個字節與DATE一致,後四個字節記錄秒如下的精度。
SELECT SYSDATE FROM dual
SELECT SYSTIMESTAMP FROM dual

2.日期計算:
    【1】對一個日期類型的值加上一個指定的數字,等於加上了指定的天數。返回的日期是計算                   後的日期,減去同理。
    【2】兩個日期類型額值相減,差是相差的天數,日期越晚的越大。
**RR是2位數字表示年的日期格式中的關鍵字,RR與YY的區別在於RR會根據當前系統時間自動判斷世紀.

3.TO_DATE函數:將指定的字符串按照指定的日期格式轉換爲日期
SELECT TO_DATE('2008-08-08 20:08:08','YYYY-MM-DD HH24:MI:SS') FROM dual
**在日期格式字符串中,除英文與符號外的其餘字符,都應當使用雙引號括起來。
SELECT TO_DATE('2008年08月08日 20:08:08','YYYY"年"MM"月"DD"日" HH24:MI:SS') FROM dual

4.TO_CHAR函數:將指定的日期按照指定的日期格式轉換爲字符串
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') FROM dual

**一些經常使用的日期函數:
1.LAST_DAY(date):返回日期所在月的最後一天。
SELECT LAST_DAY(SYSDATE) FROM dual
SELECT LAST_DAY('20-2月-09') FROM dual  --  28-2月- 09

2.ADD_MONTHS()對指定的日期加上指定的月
SELECT ADD_MONTHS('20-2月-09',2) FROM emp  -- 20-4月- 09

3.MONTHS_BETWEEN(date1,date2)
計算兩個日期之間相差的天數,計算是用date1-date2的結果換算的。

4.NEXT_DAY(date,i)從給定的date次日開始算,返回下週的周幾。1表示週日,2表示週一。
SELECT NEXT_DAY('20-2月-09',2) FROM dual  -- 23-4月- 09

5.GREATEST(expr1[,expr2[,expe3]]...)
  LEAST(expr1[,expr2[,expr3]]...)返回參數列表中最大或最小的值

6.EXTRACT函數:能夠提取給定日期中指定時間份量的值
  DATE能夠提取年月日,TIMESTAMP能夠提取時分秒
SELECT EXTRACT(YERA FROM SYSDATE) FROM dual
-----------------------------------------------------------------------------------
空值操做
一.NULL的操做
1.更新NULL值
UPDATE student SET gender=NULL

2.判斷NULL的條件
要用IS NULL或IS NOT NULL判斷,不要使用「=」判斷空
UPDATE student SET gender='M' WHERE gender is NULL

3.NULL的計算:
NULL與字符串拼接等於什麼都沒拼接
NULL與任何數字計算結果仍是NULL
SELECT '你好'||NULL FROM dual   -- 你好
SELECT NULL+2 FROM dual     -- NULL

二.空值函數:
1.NVL(p1,p2)
若p1的值是null則函數返回p2,不然返回p1
SELECT ename,sal,comm,sal+NVL(comm,0) FROM emp

2.NVL2(P1,P2,P3)
若p1的值不爲NULL時函數返回p2,若爲NULL則返回p3.p2與p3類型要相同。
SELECT ename,comm,NVL2(comm,'有獎金','沒獎金') FROM emp
-------------------------------------------------------------------------------------------
查詢語句的一些查詢條件:
1.> , < , >= , <= , != , <> , =
2.AND和OR
  AND的優先級高於OR,能夠經過括號來提升OR的優先級。

3.LIKE用於模糊查詢字符串,支持兩個通配符:
_ :表示任意一個字符
% :表示任意多個字符(0到多個)
SELECT ename,job FROM emp WHERE ename LIKE '_A%'

4.IN與NOT IN
IN:用於判斷等於列表之一,IN經常使用於子查詢。
NOT IN 用於判斷不在列表中。
SELECT ename,job FROM emp WHERE job IN('MANAGER','CLERK')

5.BETWEEN...AND...用來判斷在一個範圍內:
SELECT ename,sal FROM emp WHERE sal BETWEEN 1500 AND 3000

6.ANY與ALL
不能單獨使用,須要配合單行比較操做符(>,>=,<,<=)一塊兒使用。
>ALL:大於全部列表中的值(大於最大)
>ANY:大於列表中的任意值(大於最小)
<ALL:小於全部列表中的值(小於最小)
<ANY:小於列表中的任意值(小於最大)
**列表中的內容一般是一個查詢的結構集,而不是給定的具體值。不然實際沒意義。
SELECT ename,job,sal FROM emp WHERE sal>ANY(2500,3000,3500)  --  列表中一般爲查詢結果集
--------------------------------------------------------------------------------------
聚合函數:會將指定字段查詢出的每一條記錄對應的值所有進行統計,而後得出一個結果。
1.最大值與最小值:【MAX,MIN】
SELECT MAX(sal),MIN(sal) FROM emp

2.求平均值與求和:【AVG,SUM】
SELECT AVG(NVL(comm,0)),SUM(comm) FROM emp
SELECT ROUND(AVG(NVL(comm,0))),SUM(comm) FROM emp

3.統計給定字段的記錄條數(不爲NULL的記錄):【COUNT】
SELECT COUNT(*) FROM emp
SELECT COUNT(ename) FROM emp
---------------------------------------------------------------------------------------
EXISTS關鍵字:用於WHERE中做爲判斷條件使用的,其後須要緊跟一個子查詢,
只要該子查詢能查詢至少一條記錄,那麼EXISTS表達式就返回真。也能夠用NOT EXISTS表示反效果。
查看有員工的部門信息?
SELECT dname,deptno FROM dept d WHERE EXISTS
(SELECT *FROM emp e WHERE e.depton=d.deptno)
------------------------------------------------------------------------------------------
僞列:RACLE支持一個關鍵字ROWNUM
ROWNUM是一個僞列,該列不存在於任何一張表,但每張表均可以查詢該列,該列在結果集中的值是結果集中每條記錄的行號,ROWNUM給結果集編號是在查詢的過程當中進行的,只要能夠從表中查詢出一條記錄,該記錄的行號就會做爲這條記錄ROWNUM字段的值,ROWNUM從1開始遞增。

**因爲ROWNUM從一開始,因此在第一次查詢表中數據進行編號時,不要使用ROWNUM作大於1以上的數字判斷,不然查詢不到數據。
-------------------------------------------------------------------------------------------
DECODE函數,能夠實現相似if-else的操做

SELECT ename,job,sal,
      DECODE(job,
            'MANAGER',sal*1.2,
            'ANALYST',sal*1.1,
            'SALESMAN',sal*1.05,
            sal
      ) decode
FROM emp

CASE 字段 WHEN ...THEN....也能夠實現相似fi-else的操做

SELECT ename,job,sal,
      CASE job WHEN 'MANAGER' THEN sal*12
               WHEN 'ANALYST' THEN sal*1.1
               WHEN 'SALESMAN' THEN sal*1.05
               ELSE sal END
      bonus
FROM emp               

在GROUP BY中使用DECODE能夠作到將字段值不一樣的記錄看作一組,只要將須要看作一組的記錄的該字段的

值替換爲相同的值便可。例如:
SELECT COUNT(*),DECODE(job,
                      'MANNAGE','VIP',
                      'ANALYST','VIP',
                      'OTHER')
FROM emp
GROUP BY DECODE(job,
                'MANNAGE','VIP',
                'ANALYST','VIP',
                'OTHER')

也能夠在ORDER BY中使用DECODE來幫助排序               
SELECT deptno,dname,loc
FROM dept
ORDER BY
  DECODE(dname,
        'OPERRATIONS',1,
        'ACCOUNTING',2,
        'SALES',3)
------------------------------------------------------------------------------------------
排序函數:能夠按照指定的字段分組,而後再按照指定的字段排序,最後位記錄生成組內的編號。
1.【ROW_NUMBER()】函數:生成組內連續且惟一的數字。
查看每一個部門中的工資排名:
SELECT ename,sal,depton,
ROW_NUMBER() OVER(
  PARTITION BY depton
  ORDER BY sal DESC
) RANK
FROM emp

2.【RANK()】:生成組內不連續不惟一的數字
3.【DENSE_RANK()】生成組內連續但不惟一的數字
-----------------------------------------------------------------------------------------
UNION並集:去重
SELECT ename,job,sal FROM emp
WHERE job='MANAGER'
UNION
SELECT ename,job,sal FROM emp
WHERE sal>2500

UNION ALL並集:不去重
INTERSECT;交集
MINUS:差集   ** 集合A 差集 集合B  =  A-A交B
------------------------------------------------------------------------------------------
高級分組函數:
1.GROUP BY ROLLUP(a,b,c)等價於:abc,ab,a,全表
GROUP BY a,b,c
UNION ALL
GROUP BY a,b
UNION ALL
GROUP BY a
UNION ALL
全表

2.CUBE函數:
會將每一個參數的不一樣組合進行分組,而後將全部分組統計結果並在一塊兒分組次數是2的參數 個數次方
GROUP BY(a,b,c)
abc  ab  ac  bc  a  b  c  所有

3.GROUPING SETS:
該函數能夠按照指定的分組方式進行分組,而後將結果集並在一塊兒,其中每個參數就是一種組合方式。
查看天天及每個月的營業額?
SELECT year_id,month_id,day_id,SUM(sales_value)
FROM sales
GROUP BY
      GROUPING SETS(
      (year_id,month_id,day_id),
      (year_id,month_id)
      )
ORDER BY year_id,month_id,day_id
函數

相關文章
相關標籤/搜索