何謂CASE語法
- CASE語法等同於在SQL語法加上if子句,寫入你想要的判斷轉換資料數值,功能跟DECODE一樣,在閱讀上,CASE語法可讀性較高,建議使用CASE語法
CASE格式
CASE [expr]
WHEN comp_expr THEN return_expr
[WHEN comp_expr THEN return_expr]
[ELSE else_expr]
END;
expr:表格欄位
comp_expr:表格欄位條件判斷
return_expr:傳回值
else_expr:與表格欄位條件判斷不符合的傳回值
[]:代表裡面的語句可有可無,至少要一個WHEN comp_expr THEN return_expr語句
select case salary when salary>1000 then 500
when salary>2000 then 600
else 400
end;
from emp;
說明:在emp表格裡如果salary欄位的薪水大於1000就為500,如果薪水大於2000就為600,如果都不是就為400
select case when salary>1000 then 500
when salary>2000
then 600
else 400 end;
from emp;
說明:在emp表格裡如果salary欄位的薪水大於1000就為500,如果薪水大於2000就為600,如果都不是就為400
何謂集合操作符
- 多個查詢的結果進行合併,輸出成單一查詢結果,如果你想得到不同表格的相關資訊,可以使用這種方式達成
集合操作符介紹
- UNION:傳回不包含重複列的所有查詢結果
- UNION ALL:傳回包含重複列的所有查詢結果
- INTERSECT:傳回兩方查詢結果都有的部分(不包含重複列)
- MINUS:傳回第一個查詢結果有,而後一個查詢結果沒有的部分(不包含重複列)
集合操作符使用
select salary,department_id from emp
union
select salary,department_id from emp2
order by department_id ;
- UNION ALL使用方式,下列一小段sql語法示範
select salary,department_id from emp
union all
select salary,department_id from emp2
order by department_id ;
- INTERSECT使用方式,下列一小段sql語法示範
select salary,department_id from emp
intersect
select salary,department_id from emp2
order by department_id ;
select salary,department_id from emp
minus
select salary,department_id from emp2
order by department_id ;
補充
- 集合操作符可以合併多個select語句,要記住欄位數量要一致,資料型別要一致,order by 只能放在最後一行
註解介紹
- 註解是對SQL語法所做的解說(註釋),表達處理內容,目標欄位名稱,或是建立說明,實際處理SQL時會予以忽略,基本上就是程式碼註解
註解格式
--string (單行註解)
/* string */ (多行註解)
備註:string為註解內容
欄位別名方便性
- 某些欄位因為使用欄位連接符號造成欄位名稱較長,在欄位名稱閱讀上非常的不方便,使用別名可大幅縮短欄位名稱,易閱讀
欄位別名使用方式
- 在員工表格的薪資欄位你的別名想稱為salary或薪水,下列一小段sql語法示範(有兩種用法)
select 薪資 salary from 員工;(不易閱讀偷懶寫法)
select 薪資 as salary from 員工;(易閱讀正規寫法)
select 薪資 薪水 from 員工;(不易閱讀偷懶寫法,雙引號可加可不加)
select 薪資 as "薪水" from 員工;(易閱讀正規寫法,雙引號可加可不加)
備註:使用英文為別名名稱不論是大小寫,Oracle會自動把別名名稱轉大寫,如果想區分大小寫或想在別名中加入空格,就在別名名稱使用雙引號刮起來,例如"Salary"或 "salary"或"Sal ary",使用中文為別名名稱可用或可不用雙引號都可以,除非你的中文別名名稱有空格
何謂NULL值
- 在表格欄位也可以包含null值,他不是數字和字串也不是0值,他是一種空值,何謂空值呢?空值在表格欄位上顯示就是NULL,對空值做+-*/運算出來所輸出的結果還是NULL,除非使用函數對NULL值做轉換,NULL值可以放在各種資料型別欄位上
如何使用NULL做條件式比較
- 如果你想取出在員工表格的薪資為NULL值,下列一小段sql語法做示範
select 薪資 from 員工 where 薪資 is null;
- 如果你想取出在員工表格的薪資不為NULL值,下列一小段sql語法做示範
select 薪資 from 員工 where 薪資 is not null;
補充
- is 或 is not 的使用方式只能用在NULL值
第一種欄位連接符號(||)使用
- 在員工表格裡有薪資欄位和姓名欄位,如果你想把薪資欄位和姓名欄位做合併可以使用||符號,下面一小段sql語法示範:
select 姓名||薪資 from 員工;
- 如果你想在薪資欄位和姓名欄位加入文字可這樣使用,下面一小段sql語法示範:
select 姓名||'是'||薪資 from 員工;
- 你也可以使用多從合併(沒有限制可以合併多少表格欄位),下面一小段sql語法示範:
select 姓名||'是'||薪資||'元' from 員工;
第二種欄位連接符號(q'[]')使用
- 這第二種的欄位連接符號是方便表格欄位可連接單引號或雙引號等,如果你想連接單引號或雙引號可以這樣使用,下面一小段sql語法示範:
select 姓名||q'['是']'||薪資||q'['元']' from 員工;
select 姓名||q'['是']'||薪資 from 員工;
select 姓名||q'<'是'>'||薪資 from 員工;
select 姓名||q'#'是'#'||薪資 from 員工;
select 姓名||q'('是')'||薪資 from 員工;
備註:q可以為Q
補充
字符資料型別
- CHAR[(n [BYTE | CHAR] )]:固定長度字串資料型別
- NCHAR[(n)]:固定長度Unicode字串資料型別
- VARCHAR2[(n [BYTE | CHAR] )]:可變長度字串資料型別
- NVARCHAR2(n):可變長度Unicode字串資料型別
- CLOB:字元大型物件(bigfile)資料型別
- NCLOB:Unicode字元大型物件(bigfile)資料型別
n為引數
數值資料型別
- NUMBER[(n1[,n2])]:帶有精密度和位數的數值資料型別
- FLOAT[(n)]:NUMBER的子型別
- BINARY_FLOAT:浮點數(32位元)資料型別
- BINARY_DOUBLE:浮點數(64位元)資料型別
n為引數
n1為整數值幾位
n2為小數點下幾位
日期時刻及期間資料型別
- DATE:日期格式
- TIMESTAMP[(n)]:日期和時間格式
- TIMESTAMP[(n)] WITH TIME ZONE:整個TIMESTAMP與時區及個世界地區時差
- TIMESTAMP[(n)] WITH LOCAL TIME ZONE:整個TIMESTAMP沒有世界地區時差
- INTERVAL YEAR[(n)] TO MONTH:期間(年月單位)
- INTERVAL DAY[(n1)] TO SECODE[(n2)]:期間(日時分秒單位)
n為引數
n1為日期的位數
n2為秒的小數部分位數
二進制資料型別
- BLOB:二進制大型物件(例如:影像檔,圖片檔)
- BFILE:二進制檔案的定位符
- RAW(size):二進制資料
size:RAW資料的位元組數
ROWID資料型別
- ROWID:用來表示列位址的BASE64字串
- UROWID[(n)]:用來表示索引構成表格列之邏輯位址的BASE64字串
n為資料型別長度