SQL 簡介

已完成

SQL 代表結構化查詢語言。 SQL 是用來與關係資料庫通訊。 這是關係資料庫管理系統的標準語言。 SQL 陳述式是用來執行如更新資料庫中的資料,或是從資料庫中取出資料等工作。 一些使用 SQL 的常見關聯式資料庫管理系統包括 Microsoft SQL Server、MySQL、PostgreSQL、MariaDB 及 Oracle。

備註

SQL 最初由美國國家標準研究所(ANSI)於1986年標準化,1987年由國際標準化組織(ISO)標準化。 此後,隨著關係資料庫廠商已將新功能新增至其系統,標準已擴充數次。 此外,大部分的資料庫廠商都包含本身不屬於標準一部分的專屬延伸模組,這導致了各種SQL 方言。

在本單元中,您將瞭解 SQL。 您將瞭解如何用來查詢和維護資料庫中的數據,以及可用的不同方言。

瞭解 SQL 方言

您可以使用 SELECTINSERTUPDATEDELETECREATEDROP 等 SQL 語句,幾乎完成一個資料庫所需執行的所有作業。 雖然這些 SQL 語句是 SQL 標準的一部分,但許多資料庫管理系統也有自己的其他專屬延伸模組來處理該資料庫管理系統的特定數據。 這些擴充能提供 SQL 標準未涵蓋的功能,並包含如安全性管理和可程式性等領域。 例如,Microsoft SQL Server 會使用 Transact-SQL。 此實作包含撰寫預存程式和觸發程式的專屬延伸模組(可儲存在資料庫中的應用程式程式代碼),以及管理用戶帳戶。 PostgreSQL 和 MySQL 也有自己的這些功能版本。

SQL 的一些熱門方言包括:

  • Transact-SQL (T-SQL) 。 MICROSOFT SQL Server 和 Azure SQL Database 會使用此版本的 SQL。

  • pgSQL。 這是實作於 PostgreSQL 中,具有擴充的方言。

  • PL/SQL。 這是 Oracle 所使用的方言。 PL/SQL 代表程序語言/SQL。

計劃特別使用單一資料庫系統的用戶應該瞭解慣用 SQL 方言和平臺的複雜度。

瞭解 SQL 語句類型

SQL 語句會分組為兩個主要邏輯群組,且為:

  • 資料操作語言 (DML)
  • 資料定義語言 (DDL)

使用 DML 語句

您可以使用 DML(數據操作語言)語句來操作關係型數據表中的行。 這些語句可讓您擷取 (query) 數據、插入新的數據列,或編輯現有的數據列。 您也可以刪除不再需要的資料列。

四個主要 DML 語句如下:

聲明 說明
SELECT 從數據表選取/讀取數據列
INSERT 將新數據列插入數據表
更新 編輯/更新現有的數據列
刪除 刪除資料表中的現有數據列

INSERT 陳述式的基本形式將會一次插入一個資料列。 根據預設, SELECTUPDATEDELETE 語句會套用至數據表中的每個數據列。 您通常會套用具有這些語句的 WHERE 子句來指定準則;只會選取、更新或刪除符合這些準則的數據列。

警告

SQL 未提供 您確定嗎? 提示,因此在使用 DELETE 或 UPDATE 時請小心,而不使用 WHERE 子句,因為您可以遺失或修改大量數據。

下列程式代碼是 SQL 語句的範例,會從數據表中選取符合單一篩選條件的所有數據列。 FROM 子句會指定要使用的數據表:

SELECT *
FROM MyTable
WHERE MyColumn2 = 'contoso'

如果查詢傳回許多數據列,它們不一定出現在任何特定序列中。 如果您想要排序數據,您可以新增 ORDER BY 子句。 資料會依指定的資料列排序:

SELECT *
FROM MyTable
ORDER BY MyColumn1

您也可以執行 SELECT 語句,以使用 JOIN 子句從多個數據表擷取數據。 聯結表示一個數據表中的數據列如何與另一個數據表中的數據列連接,以判斷要傳回的數據。 聯結條件會定義兩個資料表在查詢中相關的方式:

  • 指定每個資料表中要用於聯結的資料行。 典型的聯結條件會指定一個數據表的外鍵,以及另一個數據表中相關聯的主鍵。
  • 指定邏輯運算子 (例如 = 或 <>) 以用來比較來自資料行的值。

下列查詢顯示聯結兩個數據表的範例,名為 InventoryCustomerOrder。 它會擷取 Inventory 數據表中 ID 數據行中值符合 CustomerOrder 資料表中 InventoryID 數據行值的所有數據列。

SELECT *
FROM Inventory
JOIN CustomerOrder
ON Inventory.ID = CustomerOrder.InventoryID

SQL 提供聚合函數。 聚合函數會跨一組數據列或整個數據表計算單一結果。 下列範例會尋找 MyTable 資料表中所有數據列之 MyColumn1 數據行中的最小值:

SELECT MIN(MyColumn1)
FROM MyTable

有一些其他聚合函數可供使用,包括 MAX(傳回數據行中的最大值)、AVG(傳回平均值,但只有在數據行包含數值數據時)和 SUM(這會傳回數據行中所有值的總和,但前提是數據行是數值)。

下一個範例示範如何使用 SQL 更新現有的數據列。 它會修改第二個數據行的值,但僅適用於 MyColumn1 中值為 3 的數據列。 所有其他列都保持不變:

UPDATE MyTable
SET MyColumn2 = 'contoso'
WHERE MyColumn1 = 3

警告

如果您省略 WHERE 子句, UPDATE 語句 會修改資料表 中的每個數據列。

使用 DELETE 語句移除資料列。 您可以指定要從中移除的資料表,以及可識別要刪除之資料列的 WHERE 子句:

DELETE FROM MyTable
WHERE MyColumn2 = 'contoso'

警告

如果您省略 WHERE 子句, DELETE 語句將會從數據表中移除 每個 數據列。

INSERT 語句採用稍微不同的形式。 您可以在 INTO 子句中指定資料表和資料行,以及要儲存在這些資料列中的值清單。 標準 SQL 只支援一次插入一個數據列,如下列範例所示。 某些方言可讓您指定多個 VALUES 子句,一次新增數個資料列:

INSERT INTO MyTable(MyColumn1, MyColumn2, MyColumn3)
VALUES (99, 'contoso', 'hello')

使用 DDL 語句

您可以使用 DDL 語句來建立、修改和移除資料庫中的數據表和其他物件(資料表、預存程式、檢視表等等)。

最常見的 DDL 語句如下:

聲明 說明
CREATE 在資料庫中建立新的物件,例如數據表或檢視表。
ALTER 修改對象的結構。 例如,改變數據表以新增數據行。
DROP 從資料庫移除物件。
RENAME 重新命名現有的物件。

警告

DROP 語句非常強大。 當您刪除資料表時,該資料表中的所有數據列都會遺失。 除非您有備份,否則您將無法擷取此數據。

下列範例會建立新的資料庫數據表。 括弧之間的項目會指定每個欄的詳細資訊,包括名稱、資料類型、欄是否一律包含值(NOT NULL),以及欄中的資料是否用來唯一識別該欄中的行(PRIMARY KEY)。 雖然 SQL 不會強制執行此規則,但每個數據表都應該有主鍵。

備註

標示為 NOT NULL 的數據行稱為 強制數據 行。 如果您省略 NOT NULL 子句,您可以建立不包含資料行值的數據列。 數據列中的空白數據行據說具有 NULL 值。

CREATE TABLE MyTable
(
    MyColumn1 INT NOT NULL PRIMARY KEY,
    MyColumn2 VARCHAR(50) NOT NULL,
    MyColumn3 VARCHAR(10) NULL
);

數據表中數據行可用的數據類型會因資料庫管理系統而異。 不過,大部分的資料庫管理系統都支援 INT 等數值類型(整數或整數),以及 VARCHAR 等字串類型(VARCHAR 代表可變長度字元數據)。 如需詳細資訊,請參閱所選資料庫管理系統的檔。