CASE語法介紹

何謂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:傳回第一個查詢結果有,而後一個查詢結果沒有的部分(不包含重複列)
集合操作符使用
  • UNION使用方式,下列一小段sql語法示範
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 ; 
  • MINUS使用方式,下列一小段sql語法示範
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值

  • 在表格欄位也可以包含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 員工;
  •  q'[]'有多種用法,下面sql語法示範:
select 姓名||q'['是']'||薪資 from 員工;
select 姓名||q'<'是'>'||薪資 from 員工;
select 姓名||q'#'是'#'||薪資 from 員工;
select 姓名||q'('是')'||薪資 from 員工; 
備註:q可以為Q
 補充
  • 欄位連接符號可連接各種資料型別欄位

Oracle資料型別介紹

字符資料型別

  • 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為資料型別長度