加入RUN!PC粉絲團
最近新增的精選文章
 
最多人點閱的精選文章
 
 
精選文章 - 網管資安
分享到Plurk
分享到FaceBook
 
T-SQL 與 SQL Server 的關係
文/Iris.Liu 2017/3/3 下午 04:45:27

雖然 NoSQL 資料庫近來頗受矚目,不過,目前產業界的主流資料庫仍然是關聯式資料庫,至今也歷經了數十年的發展且屹立不搖。記得第一次接觸資料庫課程時,就是從學習關聯式資料庫開始,而實作的工具則是利用微軟的 SQL Server,而當中除了從管理面的操作學習 SQL Server之外,SQL (Structured Query Language) 結構化查詢語言,通常是使用者與 SQL Server 互動的主角。因此,SQL 查詢語法的運用與應用也是學習資料庫的重要階段。
而後,當我再學習 Access、Informix、以及 Oracle 之後,才注意到微軟的 SQL Server 應用的是T-SQL (Transact-SQL) ,Oracle 資料庫用的是 PL/SQL (Procedural Language/SQL),以及IBM 的資料庫用的是 SQL PL等。而這些資料庫的查詢語言雖然都會被簡略稱為 SQL,但是,雖然格式類似卻有許多的不同之處,也都各有其擅長之處。
SQL 的原型是 IBM 所開發與運用的關聯式資料模型
在1970年代時期,SQL語言是為了支援IBM內部所運用的關聯式資料模型。而在1980年代,SQL取得了美國國家標準局 (American National Standards Institute , ANSI) ,以及國際標準化組織 (International Organization for Standardization , ISO) 所頒布的認證標準。
ANSI認證標準則歷經了數個版本,從SQL-89 以及 SQL-92 開始,到 SQL:1999、SQL:2003、SQL:2006、、、等。T-SQL則支援這些標準,在後續的版本中也同時隨著標準的改版而持續發展其功能與擴展其所支援的能力。

T-SQL 是宣告式語言

T-SQL是一種以資料集合為基礎的宣告式語言 (declarative language),並不是程序性語言 ( procedural language )。因此,當應用程式開發者在撰寫從SQL Server中擷取資料的查詢語法時,是透過查詢語的規格敘述想要顯示的資料,而不是告訴SQL Server如何擷取資料。也就是指,開發者並不是提供程序的步驟以獲得資料,而是提供SQL Server您想要取得的資料屬性。

T-SQL指令式的類別

T-SQL包含許多的元件,像是,指令、變數、迴圈、函式、以及計算等。而 T-SQL 包含了三個類別,分別為資料操作語言、資料定義語言、以及資料控制語言,分別說明如下所示:
(一) 資料操作語言 ( Data Manipulation Language,DML )
  DML 主要是應用於查詢與修改資料的指令式的集合。其中,包含SELECT指令,以及其他修改指令,例如,INSERT、UPDATE、以及DELETE 等指令。
(二) 資料定義語言( Data Definition Language,DDL )
  DDL主要是應用於處理資料表 (tables)、虛擬資料表 (views)、以及儲存程序 (procedures) 等資料庫物件的定義和生命週期的指令式的集合。其中,包含像是CREATE、ALTER、以及DROP等指令。
(三) 資料控制語言( Data Control Language ,DCL)
  DCL主要是應用於管理使用者和物件的安全權限指令的集合。其中,包括像是GRANT、REVOKE、以及DENY等指令。

T-SQL 的主要元件

T-SQL的主要元件有,述詞 ( Predicates )、運算子 ( Operators )、函數 (Functions)、變數 ( Variables )、表達式 ( Expressions )、流程控制 ( Control of Flow )、錯誤 ( Errors )、交易( Transactions )、以及註解 ( Comments ) 等。
使用者若能夠藉由這些主要元件的應用,讓 SQL Server 發揮其最佳效能,也能學習如何撰寫出有效率的查詢語法。
本段內容將簡介述詞、運算子、函數、變數、表示式、以及控制流程等主要的元件。

(一) 述詞包含 IN、BETWEEN、以及 LIKE 等,分別說明如下所示:
1. IN:用於決定某個值是否存在於某個清單或是子查詢中。例如,WHERE day IN (11,19,35)。
2. BETWEEN:用於指定一個範圍內的數值。例如,WHERE size BETWEEN 29 AND 40。
3. LIKE:用於找出符合未個特定樣式的字串。例如, WHERE firstname LIKE ‘%ri%’ 。

(二) 運算子包含比較、邏輯、計算、串聯、以及指派等,分別說明如下所示:
1. 比較 ( Comparison )。相等或是不相等的比較,如,=、<、>、>=、<=、!=、!>、!<。
2. 邏輯 ( Logical )。測試條件式的合法性,如,AND、OR、NOT。
3. 計算 ( Arithmetic )。執行數學的運算,如,+、-、*、 /、%。
4. 串聯 ( Concatenation )。連接兩個字串,如,+。
5. 指派 ( Assignment )。設定數值,如,=。

(三) 函數可以搭配運算子,運用出更多的應用,而這種方式可以歸納出數個類別,分別說明如下所示:
1. 字串函數,如,SUBSTRING、LEFT、RIGHT、LEN、DATALENGTH、REPLACE、REPLICATE、UPPER、LOWER、RTRIM、LTRIM、STUFF、SOUNDEX
2. 日期和時間函數,如,GETDATE、SYSDATETIME、GETUTCDATE、DATEADD、 DATEDIFF、YEAR、MONTH、DAY、DATENAME、DATEPART、ISDATE
3. 彙總函數,如,SUM、MIN、MAX、AVG、COUNT、COUNT_BIG、STDEV、STDEVP、VAR
4. 數學函數,如,RAND、ROUND、POWER、ABS、CEILING、FLOOR

(四) 像程式語言的應用一般,T-SQL也提供將特定資料類型的值暫時儲存起來的方法。例如,以單一個at符號 ( @ ) 用於表示使用者自訂變數﹔而兩個at符號 ( @@ ) 則用於表示系統函數。

(五) T-SQL提供識別碼、符號、以及運算子的組合式做為表示式 ( expressions ),而SQL Server會將表示式的運算後,回傳一個單一的數值。一般在SELECT指令式中,常見的表達式有:
1. CASE表示式,應用於將符合邏輯表示的值以另一個值取代。
2. 在WHERE的線索中,透過述詞過濾資料列。
3. 以資料表的表示式,產生應用於後續處理的暫時資料集合。

(六) T-SQL主要是一個應用於擷取資料的查詢語言,而不是程序語言,不過,T-SQL仍然支援某種範圍的執行流程控制的指令式。常見的流程控制指令式包含:
1. IF ... ELSE,提供依據一個邏輯測試的分叉控制。
2. WHILE,當條件為真 (true) 的情況下重複執行一個或是一段指令式。
3. BEGIN ... END,定義一段T-SQL指令式的範圍。
4. TRY ... CATCH,應用於定義例外處理的區塊結構。
5. BEGIN TRANSACTION,應用於標記一段指令式,作為一個明確的交易起點。
6.以COMMIT TRANSACTION 或 ROLLBACK TRANSACTION作為結束。

結論
一般而言,不同的資料所運用的不同 SQL查詢語法,常見的差異有資料型別的宣告、程式結構、以及變數/函數的運用方式等。不過,我們若能進一步理解 SQL 查詢的主要元件所扮演的角色與重要性之外,以及述詞的運用方式,與運算的邏輯次序,將會有助於使用者將 SQL 查詢語法轉變為資料查詢的利器。