【日常學習筆記】2019/1/10(Oracle語句學習)

Oracle語句學習

 

(1)select * from dual中的dual到底是什麼?

    

在sql-developer中測試發現,dual只是一個包含一列,永遠只返回一條數據記錄的虛擬表。使用dual,是爲了構成select的語法規則。當我們需要查詢一些不需要表名的數據時,但爲了保證sql語法正確性,我們需要添加dual。

比如:

【1】查詢當前用戶

select user from dual;

【2】查詢Oracle的系統時間

select sysdate from dual;


(2)trunc(number)函數

trunc()的作用是按照一定的規則截取傳入的參數

【1】select trunc(123.456) from dual;    返回123    即直接去除小數位

【2】select trunc(123.456,2) from dual;    返回123.45    將小數點後2位的數字截去,說減去可能更容易理解

123.456-0.006=123.45

【3】select trunc(123.456,-2) from dual;    返回100    將小數點前2位的數字減去,即123.456-23.456=100


(3)nvl(a,b)函數

如果a爲null值時,則返回b。如果a不爲null值時,則返回a本來的值。

用java語言來概括就是

return a==null?b:a;


(4)sign(a)函數

如果a是負數,則返回-1

如果a是0,則返回0

如果a是正數,則返回1


(5)decode(key,x1,y1,x2,y2,.....xn,yn,defaultValue)函數

含義如下:類似於switch語句

switch(key){
    case x1:
        return y1;
    case x2:
        return y2;
    .......
    case xn:
        return yn;
    default:
        return defaultValue;
}

【1】查詢某班男生和女生的數量

通常我們這麼寫:

select count(*) from 表 where 性別 = 男;

select count(*) from 表 where 性別 = 女;

之後好需要進行union

現在利用decode,可以這樣寫

select sum(decode(性別,男,1,0)),sum(decode(性別,女,1,0)) from 表


(6)listagg()函數的作用

列轉行,能夠將多條記錄轉化成一條記錄,中間用特定的分隔符連接

話不多說。示例:

查看每個人身上的標籤,標籤之間以逗號隔開

對應的sql語句爲:

 select name,listagg(tag,',') within group(order by tag) tags from table_a group by name

此時輸出爲:

group bu name,先按照name字段就行分組

listagg(tag,',') 實現行轉列,將分組後的tag列表轉化成一行記錄,各個tag之間用逗號連接

within group(order by tag),tag行記錄內的多個tag,升序排列


(7)||是什麼意思?

相當於字符串連接,即相當於“+”

話不多說,示例:


(8)(+)代表什麼?

這個要談到左連接與右連接。

當此符號出現在連接條件的右邊時,此時是左連接。

當此符號出現在連接條件的左邊時,此時是右連接。

更加詳細的解釋見Oracle(+)號用法

不過需要注意的是,oracle中才有這種語法。mysql中是沒有的,只能乖乖的寫join了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章