1 / 48

資料庫系統概論 CH09 T-SQL 設計

資料庫系統概論 CH09 T-SQL 設計. 鄧姚文. 大綱. 關於 T-SQL 基本語法說明 實務說明. 9-1 關於 T-SQL 關於 T-SQL. 全名是 Transact-SQL 是 SQL Serrver 提供的程式語言 T-SQL 的組成 基本語法 系統資源 資料定義語言 資料操作語言. 9-1 關於 T-SQL 撰寫及執行. 可以在查詢視窗中測試及執行. 9-1 關於 T-SQL 撰寫及執行. 提示清單. 9-1 關於 T-SQL 撰寫及執行. 剖析及驗證. 9-1 關於 T-SQL 撰寫及執行. 批次執行

regis
Download Presentation

資料庫系統概論 CH09 T-SQL 設計

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 資料庫系統概論CH09 T-SQL設計 鄧姚文

  2. 大綱 關於T-SQL 基本語法說明 實務說明

  3. 9-1關於T-SQL關於T-SQL • 全名是Transact-SQL • 是SQL Serrver提供的程式語言 • T-SQL的組成 • 基本語法 • 系統資源 • 資料定義語言 • 資料操作語言

  4. 9-1關於T-SQL撰寫及執行 • 可以在查詢視窗中測試及執行

  5. 9-1關於T-SQL撰寫及執行 提示清單

  6. 9-1關於T-SQL撰寫及執行 • 剖析及驗證

  7. 9-1關於T-SQL撰寫及執行 • 批次執行 • 批次是編譯及執行的單位,也就是「GO」關鍵字,多個GO之間是一個批次 • 有些陳述式或語法,SQL Server規定必須自成一個批次 • 變數生命週期無法跨越批次

  8. 9-1關於T-SQL撰寫及執行 • 部份執行 • 只要執行部份程式,可以選取後再按下按鈕 • 逐行執行及中斷點 • 按下F5鍵,表示執行全部程式或選取的部份程式碼 • 按下F11鍵,逐行執行 • 設定中斷點

  9. 9-2 基本語法說明變數及常數 • 變數 • 名稱以@為首 • 以DECLARE予以宣告 • DECLARE @manager NVarChar(10); • 不區分英文字母大小寫 • 分號(;)可以省略

  10. 9-2 基本語法說明變數及常數

  11. 9-2 基本語法說明變數及常數 • 常數 • 固定不變的『資料』(Literal) • 文字:字串以單引號括住,前頭加 N 表示編碼方式為 Unicode • SET @pid = N'981AE123' • 二進位資料 • DECLARE @x BINARY; -- 宣告成二進位資料 • SET @x = 0x123; -- 數值前加 0x 以16進位表示

  12. 9-2 基本語法說明變數及常數 • 常數 • 數字 • DECLARE @x INT, @y MONEY; • SET @x = 12; • SET @y = $10.5; • 日期與時間 • DECLARE @x DateTime, @y DateTime, @z DateTime; • SET @x = '2012/05/17 12:00'; • SET @y = '05/17/2012'; • SET @z = '05 17, 2012';

  13. 9-2 基本語法說明資料類型優先順序 • 在一個運算式中,有不同的型態的資料時,SQL Server引擎會嘗試予以轉換 • 當一個運算式裡有兩個不同型態的資料時,將優先順序較低者轉換成優先順序較高者

  14. 9-2 基本語法說明資料類型優先順序

  15. 9-2 基本語法說明算術運算子

  16. 使用函數 ISNULL ( check_expression , replacement_value ) http://msdn.microsoft.com/en-us/library/ms184325.aspx

  17. 9-2 基本語法說明位元運算子

  18. 9-2 基本語法說明位元運算子

  19. 9-2 基本語法說明位元運算子

  20. 9-2 基本語法說明位元運算子

  21. 9-2 基本語法說明比較運算子

  22. 9-2 基本語法說明邏輯運算子

  23. 9-2 基本語法說明流程控制 • IF...ELSE • 沒有EndIF • 加上Begin…End,表示區段的開始及結束 • WHILE迴圈-程式9-2, pp.9-17 • Continue及Break -程式9-3, pp.9-18 • Return-中止執行 • Goto -程式9-4

  24. IF ELSE

  25. WHILE 迴圈 RAND ( [ seed ] )產生亂數,介於0和1之間,包括0不包括1 ROUND() 四捨五入 DATEADD() 日期加減

  26. 在迴圈內使用 break 和 continue Break 中斷,迴圈結束 Continue 結束這一個回合,立即開始下一回合

  27. 這個日期已經抓過了,跳過不儲存 日期轉換成字串

  28. GOTO • 配合 IF-ELSE 和行標記 使用 • 在特定的情況下跳到指定的位置,以改變程式執行路徑 • 行標記:LINE_BABEL: • 程式 9-4, pp.9-20

  29. GOTO 星期六、星期日不抽查 重新產生亂數

  30. 9-2 基本語法說明其它 • WaitFor • 等待一段時間,再執行以下的程式 • WaitFor Delay '00:00:05' • exec sp_helpdb • 錯誤處理 • 傳統的@@ERROR-程式9-6, pp.9-22 • Try…Catch敘述-程式9-7, pp.9-23 • 註解文字 • 兩個「-」符號為始 • 以「/*」為始及以「*/」結束

  31. 9-3 實務說明日期處理 http://msdn.microsoft.com/en-us/library/ms189491.aspx http://msdn.microsoft.com/en-us/library/ms187928.aspx • 格式設定 • SET DATEFORMAT敘述 • Convert函數-可使用在任何型態的轉換

  32. SET DATEFORMAT

  33. 9-3 實務說明日期的加減處理 http://msdn.microsoft.com/en-US/library/ms186819%28v=sql.105%29.aspx • 可直接加或減 • 使用DateAdd函數 • 使用DateDiff函數計算兩個日期之間的差距 • 使用GetDate函數取得今天日期

  34. 9-3 實務說明小數資料處理 http://msdn.microsoft.com/en-us/library/ms175003.aspx • 兩種方式執行四捨五入 • 型態的自動處理 • ROUND函數

  35. 9-3 實務說明自動編號 Set IDENTITY_INSERT Category On; Insert Into Category (CateID, CateName, CateType) Values(60,'教育','行業別'); Set IDENTITY_INSERT Category Off; • 輸入資料至自動編號 • 使用 SET IDENTITY_INSERT 開啟或關閉手動輸入 ID

  36. 9-3 實務說明自動編號 • 取得剛產生的自動編號 • 取出@@IDENTITY

  37. 9-3 實務說明uniqueIdentifier • NewID() • 使用於uniqueIdentifier類型的函數 • 16位元GUID值 • 使用NewID()函數做為預設值

  38. 多種情況的條件判斷 CASE…WHEN 條件1 THEN 動作1WHEN 條件2 THEN 動作2…ELSE 以上皆非時的動作END

  39. 計算年資 SELECT E.EMPCode AS 員工編號, e.NameChn as 員工姓名, CONVERT(DATE, E.InDate, 111) AS 到職日期, CASE WHEN MONTH(GETDATE()) < MONTH(E.InDate) OR (MONTH(GETDATE()) = MONTH(E.InDate) AND (DAY(GETDATE()) < DAY(E.InDate))) THEN DATEDIFF(YEAR, E.InDate, GETDATE()) - 1 ELSE DATEDIFF(YEAR, E.InDate, GETDATE()) END AS 年資 FROM Employee E WHERE E.OutDate IS NULL;

  40. 這個月的第一天 DECLARE @firstDay Date; SELECT @firstDay = DateAdd(day, -DAY(GetDate())+1, GetDate()); PRINT @firstDay;

  41. 這個月的最後一天 DECLARE @today DATE; DECLARE @firstDay Date, @lastDay Date; DECLARE @y INT, @m INT; SET @today = GETDATE(); SET @y = YEAR(@today); SET @m = MONTH(@today); SET @firstDay = CONVERT(Date, CAST(@y AS VARCHAR)+'-'+CAST(@m AS VARCHAR)+'-01', 111); SET @lastDay = DATEADD(month, 1, @firstDay);--下一個月的第一天 SET @lastDay = DATEADD(day, -1, @lastDay);--這一個月的最後一天 為何不直接算?@lastDay=CONVERT(Date, CAST(@y AS NVARCHAR)+'-'+CAST(@m AS NVARCHAR)+'-31', 111);

  42. 下一個月的第一天 DECLARE @firstDay Date; SET @firstDay = DateAdd(month, 1, GetDate()); SET @firstDay = DateAdd(day, -DAY(@firstDay)+1, @firstDay); PRINT @firstDay;

  43. 練習:季度計算 • 輸入: • 今天日期 • 輸出: • 這一季的第一天日期 • 這一季的最後一天日期 • 這一季總共有多少天

More Related