资源预览内容
第1页 / 共41页
第2页 / 共41页
第3页 / 共41页
第4页 / 共41页
第5页 / 共41页
第6页 / 共41页
第7页 / 共41页
第8页 / 共41页
第9页 / 共41页
第10页 / 共41页
亲,该文档总共41页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
課程 一 PL/SQL 基本查詢與排序 本課重點: 1、寫 SELECT 語句進行資料庫查詢 2、進行數學運算 3、處理空值 4、使用別名 ALIASES 5、連接列 6、在 SQL PLUS 中編輯緩衝,修改 SQL SCRIPTS 7、ORDER BY 進行排序輸出。 8、使用 WHERE 欄位。 一、寫 SQL 命令: 不區分大小寫。 SQL 語句用數字分行,在 SQL PLUS 中被稱為緩衝區。 最後以;或 / 結束語句。 也可以用 RUN 來執行語句 二、例 1:SQL SELECT dept_id, last_name, manager_id 2 FROM s_emp; 2:SQL SELECT last_name, salary * 12, commission_pct 2 FROM s_emp; 對於數值或日期型的欄位,可以進行相應的四則運算,優先順序與標準的高階語言相同。 SQL SELECT last_name, salary, 12 * (salary + 100) 2 FROM s_emp; 三、列的別名 ALIASES: 計算的時候特別有用; 緊跟著列名,或在列名與別名之間加“AS”; 如果別名中含有 SPACE,特殊字元,或大小寫,要用雙引號引起。 例(因字體原因,讀者請記住:引號為英文雙引號 Double Quotation): SQL SELECT last_name, salary, 2 12 * (salary + 100) ”Annual Salary” 3 FROM s_emp; 四、連接符號:| 連接不同的列或連接字串 使結果成為一個有意義的短語: SQL SELECT first_name | | last_name 2 | , | title ”Employees” 3 FROM s_emp; 五、管理 NULL 值: SQL SELECT last_name, title, 2 salary * NVL(commission_pct,0)/100 COMM 3 FROM s_emp; 此函數使 NULL 轉化為有意義的一個值,相當於替換 NULL。 六、SQL PLUS 的基本內容,請參考 七、ORDER BY 操作: 與其他 SQL92 標準資料庫相似,排序如: SELECT expr FROM table ORDER BY column,expr ASC|DESC; 從 Oracle7 release 7.0.16 開始,ORDER BY 可以用別名。 另:通過位置判斷排序: SQL SELECT last_name, salary*12 2 FROM s_emp 3 ORDER BY 2; 這樣就避免了再寫一次很長的運算式。 另:多列排序: SQL SELECT last name, dept_id, salary 2 FROM s_emp 3 ORDER BY dept_id, salary DESC; 八、限制選取行: SELECT expr FROM table WHERE condition(s) ORDER BY expr; 例 1: SQL SELECT first_name, last_name, start_date 2 FROM s_emp 3 WHERE start_date BETWEEN 09-may-91 4 AND 17-jun-91; 例 2: SQL SELECT last_name 2 FROM s_emp 3 WHERE last_name LIKE _a%; /顯示所有第二個字母為 a 的 last_name 例 3: 如果有列為 NULL SQL SELECT id, name, credit_rating 2 FROM s_customer 3 WHERE sales_rep_id IS NULL; 優先順序: Order Evaluated Operator 1 All comparison operators (=, , =, SELECT first_name, last_name 2 FROM s_emp 3 WHERE UPPER(last_name) = PATEL; FIRST_NAME LAST_NAME - - Vikram Patel Radha Patel 三、數學運算函數 1、ROUND 四捨五入:ROUND(45.923,2) = 45.92 ROUND(45.923,0) = 46 ROUND(45.923,-1) = 50 2、TRUNC 截取函數 TRUNC(45.923,2)= 45.92 TRUNC(45.923)= 45 TRUNC(45.923,-1)= 40 3、MOD 餘除 MOD(1600,300) 實例: SQL SELECT ROUND(45.923,2), ROUND(45.923,0), 2 ROUND(45.923,-1) 3 FROM SYS.DUAL; 四、ORACLE 日期格式和日期型函數: 1、默認格式為 DD-MON-YY. 2、SYSDATE 是一個求系統時間的函數 3、DUALdju:el 是一個偽表,有人稱之為空表,但不確切。 SQL SELECT SYSDATE 2 FROM SYS.DUAL; 4、日期中應用的算術運算符 例:SQL SELECT last_name, (SYSDATE-start_date)/7 WEEKS 2 FROM s_emp 3 WHERE dept_id = 43; DATE+ NUMBER = DATE DATE-DATE= NUMBER OF DAYS DATE + (NUMBER/24) = 加 1 小時 5、函數: MONTHS_BETWEEN(date1, date2) 月份間隔,可正,可負,也可是小數 ADD_MONTHS(date,n) 加上 N 個月,這是一個整數,但可以為負 NEXT_DAY(date,char) 如:NEXT_DAY (restock_date,FRIDAY),從此日起下個週五。 ROUND(date,fmt) TRUNC(date,fmt) 解釋下面的例子: SQL SELECT id, start_date, 2 MONTHS_BETWEEN (SYSDATE,start_date) TENURE, 3 ADD_MONTHS(start_date,6) REVIEW 4 FROM s_emp 5 WHERE MONTHS_BETWEEN (SYSDATE,start_date) select round(sysdate,MONTH) from dual ROUND(SYSD - 01-11 月-01 round(sysdate,YEAR) = 01-1 月 -02 ROUND 之後的值比基值大的最小符合值,大家可以用更改系統時間的方法測試,以 15 天為分界線,也是非常形象的四捨五入,而 TRUNC 恰好相反,是對現有的日期的截取。 五、轉換函數: 1、TO_CHAR 使一個數位或日期轉換為 CHAR 2、TO_NUMBER 把字元轉換為 NUMBER 3、TO_DATE 字元轉換為日期 這幾個函數較為簡單,但要多多實踐,多看複雜的實例。 SQL SELECT ID,TO_CHAR(date_ordered,MM/YY) ORDERED 2 FROM s_ord 3 WHERE sales_rep_id = 11; 轉換時,要注意正確的缺省格式: SELECT TO_DATE(03-MAR-92) CORRECT FROM DUAL;/正確 SELECT TO_DATE(031092) CORRECT FROM DUAL;/不正確 SELECT TO_DATE(031095,MMDDYY) ERRORR FROM DUAL 輸出 3 月 10 日 SELECT TO_DATE(031095,DDMMYY) ERRORR FROM DUAL 輸出 10 月 3 日 4、實例: select to_char(sysdate,fmDDSPTH “of“ MONTH YYYY AM) TODAYS FROM DUAL; TODAYS - SIXTEENTH of 11 月 2001 下午 大小寫沒有什麼影響,引號中間的是不參與運算。 實例 : SELECT ROUND(SALARY*1.25) FROM ONE_TABLE; 意義:漲 25%工資後,去除小數位。在現實操作中,很有意義。 5、混合實例: SQL SELECT last_name, TO_CHAR(start_date, 2 fmDD ”of” Month YYYY) HIREDATE 3 FROM s_emp 4 WHERE start_date LIKE %91; LAST_NAME HIREDATE - - Nagayama 17 of June 1991 Urguhart 18 of January 1991 Havel 27 of February 1991 這裏要注意:fmDD 和 fmDDSPTH 之間的區別。 SQL SELECT id, total, date_ordered 2 FROM s_ord 3 WHERE date_ordered = 4 TO_DATE(September 7, 1992,Month dd, YYYY); 六、獨立的函數嵌套 SQL SELECT CONCAT(UPPER(last_name), 2 SUBSTR(title,3) ”Vice Presidents” 3 FROM s_emp 4 WHERE title LIKE VP%; * 嵌套可以進行到任意深度,從內向外計算。 例: SQL SELECT TO_CHAR(NEXT_DAY(ADD_MONTHS 2 (date_ordered,6),FRIDAY), 3 fmDay, Month ddth, YYYY) 4 ”New 6 Month Review” 5 FROM s_ord 6 ORDER BY date_ordered; SQL SELECT last_name, 2 NVL(TO_CHAR(manager_id),No Manager) 3 FROM s_emp 4 WHERE manager_id IS NULL; 對於例子,大家重要的理解,並多做測試,並注意英文版和中文版在日期上的區別。 有些教材上的例子,不要盲目的相信其結果,實踐後才有發言權,希望大家能夠在學習的過程中不要忽略了用, 多想一想為什麼實例要如此設計,在何種情況下應用此實例來解決問題。這樣,我們才真正掌握了知識。14:41 | 添加評論 | 閱讀評論 (6) | 固定鏈結 | 引用通告 (0) | 寫入日誌 | 電腦與 InternetPL/Sql 循序漸進全面學習教程-Oracle(2)課程 三 從多個表中提取資料本課重點:1、SELECT FROM 多個表,使用等連接或非等連接2、使用外連接 OUTER JOIN3、使用自連接注意:以下實例中標點均為英文半形一、連接的概念: 是指一個從多個表中的資料進行的查詢。連接一般使用表的主鍵和外鍵。連接類型:等連接、不等連接、外連接、自連接二、Cartesian product :指的是當 JOIN 條件被省略
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号