【Oracle】常見函式、用法(部分)

【Oracle】常見函式、用法(部分)

無論MySQL/SQL server/還是Oracle 關係型資料庫嘛、趕腳語法都差不多但是也各有千秋,所以不說廢話了,總得來說學習成本不是很高

 

SQL執行順序

    from    where    group by      having     select    rownum     order by

 

笛卡爾:兩張表的乘積

 

DECODE函式:特有函式計算方式 ***

     語法:【百度一下科

          DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )

          Value 代表某個表的任何型別的任意列或一個通過計算所得的任何結果。當每個value值被測試,如果value的值為if1,Decode 函式的結果是then1;如果value等於if2,Decode函式結果是then2;等等。事實上,可以給出多個if/then 配對。如果value結果不等於給出的任何配對時,Decode 結果就返回else 。

DECODE(VALUE,'0','1','2')"row_name"
若value為0,則為1,否則為2,此值被展示在row_name列

 

連線:特此說明外連線

       左外連線:left join 左表中所有記錄,如果右表無對應記錄則顯示空(笛卡爾積基礎上 自己的理解);右同左

 

子查詢:

      注意null值,where語句限制,建立時not null

 

exists:

rownum:系統自動生成的一列,標識行號

      oracle特有,起始值1(查詢出結果後 1);最好不要做大於號判斷

rowId:每行記錄所存放的真實實體地址

 

case when語句:

      計算條件列表並返回多個可能結果表示式之一【


CASE
WHEN Boolean_expression THEN
result_expression [...n ] [
ELSE
else_result_expression
END

     簡單來說和程式碼用到的CASE是一樣的


SELECT
CASE
WHEN parent_id < 3 THEN
'<3'
WHEN parent_id >= 3
AND parent_id < 5 THEN
'>=3 && <5'
ELSE
'>=5'
END AS parent_id_new ,
count(*) AS num_count ,
parent_id ,
type_id ,
type_name
FROM
tdb_goods_types
GROUP BY
parent_id_new
ORDER BY
num_count

轉換函式:【

to_date():將字串型別按格式轉化為日期型別

YYYY:四位表示的年份 
YYY,YY,Y:年份的最後三位、兩位 一位,預設為當前世紀 
MM:01~12的月份編號 
MONTH:九個字元表示的月份,右邊用空格填補 
MON:三位字元的月份縮寫 
WW:一年中的星期 
D:星期中的第幾天 
DD:月份中的第幾天 
DDD:年中的第幾天 
DAY:九個字元表示的天的全稱,右邊用空格補齊 
HH,HH12:一天中的第幾個小時,12進製表示法 
HH24:一天中的第幾個小時,取值為00~23 
MI:一小時中的分鐘 
SS:一分鐘中的秒 
SSSS:從午夜開始過去的秒數 
to_date('2018-07-29 13:34:43', 'yyyy-mm-dd hh24:mi:ss') 
24小時格式下時間範圍為: 0:00:00 - 23:59:59.... 
12小時格式下時間範圍為: 1:00:00 - 12:59:59 .... 

to_char():將日期轉按一定格式換成字元型別 

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') time from dual; 

1、next_day函式 
next_day(sysdate,6)是從當前開始下一個星期五。後面的數字是從星期日開始算起。 

2、add_months()用於從一個日期值增加或減少一些月份 

select add_months(sysdate,12) “Next Year” from dual; 

3、months_between()判斷兩個日期之間的月份數量 

TO_NUMBER函式將字元轉換為數字 

TO_CHAR 和 TO_DATE的一些用法總結

count(1):1查詢的表裡的第一個欄位

 

集合運算

差集: minus結果相減(不包含)

(運算中多個sql語句)列的型別一致,按順序寫、(查詢)列的數量一致 如果沒有*列 空值會對應型別的*

交集:union 去除重複並排序    union all不會去除重複的

優化:

1、關於count(1)/count(*)count(列名)的區別【

     count(*) count(列名) 消耗資源是一樣的,但是他們不是等價的:count(*)針對全表,count(列)針對一列、如果列值為空則不會統計這一行;

     列的偏移量決定效能,列靠後、開銷大;count(*)演算法與列偏移量無關,所以最快

     越常用的列,越靠前

 

oracle子查詢實現分頁