簡介

已完成

SQL 語言

SQL 是結構化查詢語言 (SQL) 的縮寫。 SQL 是用來與關聯式資料庫進行通訊。 SQL 陳述式是用來執行如更新資料庫中的資料,或是從資料庫中取出資料等工作。 例如,您可以使用 SQL SELECT 陳述式查詢資料庫,並傳回一組資料列。 一些使用 SQL 的常見關聯式資料庫管理系統包括 Microsoft SQL Server、MySQL、PostgreSQL、MariaDB 及 Oracle。

美國國家標準局 (ANSI) 定義了 SQL 語言標準。 每個廠商都會新增自己的變化和延伸模組。

A SQL SELECT query retrieves a table of data from a database

在此課程模組中,您將了解如何:

  • 了解什麼是 SQL 及其使用方式
  • 識別結構描述中的資料庫物件
  • 識別 SQL 陳述式類型
  • 使用 SELECT 陳述式查詢資料庫中的資料表
  • 使用資料類型
  • 處理 NULL

Transact-SQL

無論您使用哪一種關聯式資料庫系統,都可以使用基本的 SQL 陳述式,例如 SELECTINSERTUPDATEDELETE。 雖然這些 SQL 陳述式都是 ANSI SQL 標準的一部分,但許多資料庫管理系統還有自己的延伸模組。 這些擴充能提供 SQL 標準未涵蓋的功能,並包含如安全性管理和可程式性等領域。 Microsoft 資料庫系統 (例如 SQL Server、Azure SQL Database、Azure Synapse Analytics 等) 使用稱為 Transact-SQL (或 T-SQL) 的 SQL 方言。 T-SQL 包含用於撰寫預存程序和函式的語言延伸模組,這些是儲存在資料庫中及管理使用者帳戶的應用程式程式碼。

SQL 是一種「宣告式」語言

程式設計語言可分類為「程序性」或「宣告式」。 程序性語言可讓您定義一連串的指令,電腦必須遵循這些指令才能執行工作。 宣告式語言可讓您描述想要的輸出,並將產生輸出所需的步驟細節留給執行引擎。

SQL 支援某些程序性語法,但使用 SQL 查詢資料通常會遵循宣告式語意。 您可以使用 SQL 描述想要的結果,而資料庫引擎的查詢處理器會開發「查詢計劃」以擷取結果。 查詢處理器會使用資料庫中資料的相關統計資料,以及在資料表上定義的索引,以提出良好的查詢計劃。

關聯式資料

SQL 最常 (但不一定) 用來查詢「關聯式」資料庫中的資料。 在關聯式資料庫中,資料已分組到多個資料表中 (在技術上稱為「關聯」),各自代表某種類型的實體 (例如客戶、產品或銷售訂單)。 這些實體的屬性 (例如客戶名稱、產品價格或銷售訂單的訂單日期) 會定義為資料表的資料行或屬性,而資料表中每個資料列則代表實體類型的執行個體 (例如特定客戶、產品或銷售訂單)。

資料庫中資料表會使用可唯一識別所表示特定實體的「索引鍵」資料行彼此關聯。 針對每個資料表,會定義一個「主索引鍵」,並將此索引鍵參考定義為任何相關資料表中的「外部索引鍵」。 查看下列範例將有助您更容易了解:

A relational database containing four tables

此圖表顯示包含四個資料表的關聯式資料庫:

  • 客戶
  • SalesOrderHeader
  • SalesOrderDetail
  • 產品

每個客戶都是由唯一的 CustomerID 欄位所識別,此欄位是 Customer 資料表的主索引鍵。 SalesOrderHeader 資料表有一個名為 OrderID 的主索引鍵,以識別每個訂單,並包含一個參考 Customer 資料表中主索引鍵的 CustomerID 外部索引鍵,以便其識別與每個訂單建立關聯的客戶。 訂單中個別項目的相關資料會儲存在 SalesOrderDetail 資料表中,該資料表具有「複合」主索引鍵,可將 SalesOrderHeader 資料表中的 OrderIDLineItemNo 值合併。 這些值的組合可唯一識別一個明細項目。 OrderID 欄位也可作為外部索引鍵,以指出該明細項目所屬的訂單,而 ProductID 欄位則可作為 Product 資料表中 ProductID 主索引鍵的外部索引鍵,以指出訂購的產品。

以集合為基礎的處理

集合理論是資料管理中關聯式模式的數學基礎之一,也是使用關聯式資料庫的基礎。 雖然您可能不需要徹底了解集合就能在 T-SQL 中撰寫查詢,但您最終可能會難以撰寫一些更複雜的陳述式類型以獲得最佳效能。

不深入探討集合理論的數學,您可以將集合視為「視為整體的一組明確、相異物件集合」。就套用至 SQL Server 資料庫而言,您可以將集合視為包含相同類型零或多個成員的不同物件集合。 例如,Customer 資料表代表一個集合:具體而言,就是所有客戶的集合。 您會看到 SELECT 陳述式的結果也會組成一個集合。

當您深入了解 T-SQL 查詢陳述式時,請務必考慮整個集合,而不是個別成員。 這種思維方式可讓您更妥善地撰寫以集合為基礎的程式碼,而不是一次考慮一個資料列。 使用集合時,必須以「一次全部」(而不是一次一個) 發生的作業為觀點來考慮。

集合理論需要注意的一個重點是,沒有排序集合成員的任何規格。 缺少順序的這點適用於關聯式資料庫資料表。 沒有「第一個」資料列、「第二個」資料列或「最後一個」資料列的概念。 可依任意順序存取 (和擷取) 元素。 如果您需要依特定順序傳回結果,您必須在 SELECT 查詢中使用 ORDER BY 子句明確指定這麼做。