1. 程式人生 > 實用技巧 >00-基礎SQL-SELECT語句

00-基礎SQL-SELECT語句

DML(資料操作語言,增刪查改)
DDL(資料定義語言,比如建立、修改或刪除資料庫物件)
DCL(資料控制語言,控制資料庫的訪問)

desc 表名:顯示表結構
dual : 偽表

對於日期型資料,做 * 、/ 運算不合法;
包含空值的數學表示式的值都為空值;
別名使用雙引號;

連線字串使用:“ ||
日期與字串只能在“單引號”中出現;
重複行:去重:distinct;


sql是一種語言;
sql*plus是一種環境,關鍵字可以縮寫,如(desc、ed);

where緊跟from語句;

過濾與排序:
  過濾 :where
  字串區分大小寫;
  日期格式敏感 DD-MM-YYYY(拋棄),用to_char()轉換;


賦值 :=
比較運算:欄位名 : between ..... and ..... 兩個之間,包含邊界
in :等值列中的多個;
like:模糊查詢;

轉義字元:escape 如 '%#_%' escape '#';
is null / is not null; 為空/不為空
排序:order by 欄位 asc(升序),desc(降序);


單行函式:只對一行進行變換,每行返回一個結果;
字元函式:
  Lower:轉小寫
  Upper:轉大寫
  Initcap:首字母大寫,其它小寫;

字元控制函式:
  concat:連線,如concat('Hello','World');


  substr('helloworld',1,4):1開始,輸出4個;
  Length:長度;
  Instr('helloworld','l'):返回首次出現的位置,無則返回0;
  LRAD/RPAD : 左對齊/右對齊,不足位,作補;如 LRAD(salary,10,'*')
  trim('h' from 'helloword'):去除首尾h;
  replace('abcd','b','m'):將所有b都轉為m;

數字函式:
  round 四捨五入;
  trunc 直接截斷;
  MOD:取餘;

日期:加一個數字或減一個數字,仍為日期;
日期相減為天數;
可以除以24來向日期加上或減去天數;

日期函式:


  months_between(sysdate,hire_date):兩個日期相差月數;
  add_months :向指定日期加上若干月;add_months(sysdate,2);
  next_day :指定的日期下一個星期某對應的日期;如next_day(sysdate,'星期一');
  Last_day:本月後的一天;last_day(sysdate)-1:倒數第二天
  round:日期四捨五入;
  trunc:日期戒斷;

轉換函式:
  to_char(hire_date,'yyyy-mm-dd');轉換為字串;
  to_date('1990-01-01','yyyy-mm-dd')=hire_date;轉換為日期
  to_number('$12345678.123','$000,000,000.00');前後對應;

通用函式:使用於任何資料型別,也適用於空值;
  NVL(EXP1,EXP2):如果exp1為空,值則為exp2;
  NVL2(EXP1.EXP2,EXP3):exp1不為空,返回EXP2 , 為空,返回exp3;
  NULLIF(EXP1,EXP2) : 相等返回null,不等返回exp1;
  COALESCE(EXP1,EXP2,EXP3.....):exp1為空,值則為EXP2,如果exp2為空,則一直往下...

條件表示式:
sql語言中使用if-then-else;
使用兩種方式:
  ① case:
    case 某列 when ..... then .....else .....end 無標點符號;
    譯:當某列的值為 某,則是 某值,否則 為某,結束;

eg:

  查詢部門號為 10, 20, 30 的員工資訊, 若部門號為 10, 則列印其工資的 1.1 倍, 20 號部門, 則列印其工資的 1.2 倍, 30 號部門列印其工資的 1.3 倍數;

SELECT last_name, job_id, salary,
       CASE job_id WHEN 'IT_PROG'  THEN  1.10*salary
                   WHEN 'ST_CLERK' THEN  1.15*salary
                   WHEN 'SA_REP'   THEN  1.20*salary
       ELSE      salary END     "REVISED_SALARY"
FROM   employees;

  

  ②decode:

    decode(變數,1,2,1,2);
    變數,為1時,值為2,依次往下,括號結束;

eg:  

SELECT last_name, job_id, salary,
       DECODE(job_id, 'IT_PROG',  1.10*salary,
                      'ST_CLERK', 1.15*salary,
                      'SA_REP',   1.20*salary,
                              salary)
       "REVISED_SALARY"
FROM   employees;