簡介
SQL 語言
SQL 是結構化查詢語言 (SQL) 的縮寫。 SQL 是用來與關聯式資料庫進行通訊。 SQL 陳述式是用來執行如更新資料庫中的資料,或是從資料庫中取出資料等工作。 例如,您可以使用 SQL SELECT 陳述式查詢資料庫,並傳回一組資料列。 一些使用 SQL 的常見關聯式資料庫管理系統包括 Microsoft SQL Server、MySQL、PostgreSQL、MariaDB 及 Oracle。
美國國家標準局 (ANSI) 定義了 SQL 語言標準。 每個廠商都會新增自己的變化和延伸模組。
在此課程模組中,您將了解如何:
- 了解什麼是 SQL 及其使用方式
- 識別結構描述中的資料庫物件
- 識別 SQL 陳述式類型
- 使用 SELECT 陳述式查詢資料庫中的資料表
- 使用資料類型
- 處理 NULL
Transact-SQL
無論您使用哪一種關聯式資料庫系統,都可以使用基本的 SQL 陳述式,例如 SELECT、INSERT、UPDATE和 DELETE。 雖然這些 SQL 陳述式都是 ANSI SQL 標準的一部分,但許多資料庫管理系統還有自己的延伸模組。 這些擴充能提供 SQL 標準未涵蓋的功能,並包含如安全性管理和可程式性等領域。 Microsoft 資料庫系統 (例如 SQL Server、Azure SQL Database、Microsoft Fabric 等) 使用稱為 Transact-SQL (或 T-SQL) 的 SQL 方言。 T-SQL 包含用於撰寫預存程序和函式的語言延伸模組,這些是儲存在資料庫中及管理使用者帳戶的應用程式程式碼。
SQL 是一種「宣告式」語言
程式設計語言可分類為「程序性」或「宣告式」。 程序性語言可讓您定義一連串的指令,電腦必須遵循這些指令才能執行工作。 宣告式語言可讓您描述想要的輸出,並將產生輸出所需的步驟細節留給執行引擎。
SQL 支援某些程序性語法,但使用 SQL 查詢資料通常會遵循宣告式語意。 您可以使用 SQL 描述想要的結果,而資料庫引擎的查詢處理器會開發「查詢計劃」以擷取結果。 查詢處理器會使用資料庫中資料的相關統計資料,以及在資料表上定義的索引,以提出良好的查詢計劃。
關聯式資料
SQL 最常 (但不一定) 用來查詢「關聯式」資料庫中的資料。 在關聯式資料庫中,資料已分組到多個資料表中 (在技術上稱為「關聯」),各自代表某種類型的實體 (例如客戶、產品或銷售訂單)。 這些實體的屬性 (例如客戶名稱、產品價格或銷售訂單的訂單日期) 會定義為資料表的資料行或屬性,而資料表中每個資料列則代表實體類型的執行個體 (例如特定客戶、產品或銷售訂單)。
資料庫中資料表會使用可唯一識別所表示特定實體的「索引鍵」資料行彼此關聯。 針對每個資料表,會定義一個「主索引鍵」,並將此索引鍵參考定義為任何相關資料表中的「外部索引鍵」。 查看下列範例將有助您更容易了解:
此圖表顯示包含四個資料表的關聯式資料庫:
- 客戶
- SalesOrderHeader
- SalesOrderDetail
- 產品
每個客戶都是由唯一的 CustomerID 欄位所識別,此欄位是 Customer 資料表的主索引鍵。 SalesOrderHeader 資料表有一個名為 OrderID 的主索引鍵,以識別每個訂單,並包含一個參考 Customer 資料表中主索引鍵的 CustomerID 外部索引鍵,以便其識別與每個訂單建立關聯的客戶。 訂單中個別項目的相關資料會儲存在 SalesOrderDetail 資料表中,該資料表具有「複合」主索引鍵,可將 SalesOrderHeader 資料表中的 OrderID 與 LineItemNo 值合併。 這些值的組合可唯一識別一個明細項目。 OrderID 欄位也可作為外部索引鍵,以指出該明細項目所屬的訂單,而 ProductID 欄位則可作為 Product 資料表中 ProductID 主索引鍵的外部索引鍵,以指出訂購的產品。
以集合為基礎的處理
集合理論是資料管理中關聯式模式的數學基礎之一,也是使用關聯式資料庫的基礎。 雖然您可能不需要徹底了解集合就能在 T-SQL 中撰寫查詢,但您最終可能會難以撰寫一些更複雜的陳述式類型以獲得最佳效能。
不深入探討集合理論的數學,您可以將集合視為「視為整體的一組明確、相異物件集合」。就套用至 SQL Server 資料庫而言,您可以將集合視為包含相同類型零或多個成員的不同物件集合。 例如,Customer 資料表代表一個集合:具體而言,就是所有客戶的集合。 您會看到 SELECT 陳述式的結果也會組成一個集合。
當您深入了解 T-SQL 查詢陳述式時,請務必考慮整個集合,而不是個別成員。 這種思維方式可讓您更妥善地撰寫以集合為基礎的程式碼,而不是一次考慮一個資料列。 使用集合時,必須以「一次全部」(而不是一次一個) 發生的作業為觀點來考慮。
集合理論需要注意的一個重點是,沒有排序集合成員的任何規格。 缺少順序的這點適用於關聯式資料庫資料表。 沒有「第一個」資料列、「第二個」資料列或「最後一個」資料列的概念。 可依任意順序存取 (和擷取) 元素。 如果您需要依特定順序傳回結果,您必須在 SELECT 查詢中使用 ORDER BY 子句明確指定這麼做。