SQL(Structured Query Language,結構化查詢語言)是專為關聯式資料庫設計的標準化語言,功能強大、易學易用,已成為幾乎所有主流資料庫(SQL Server, Oracle, MySQL, PostgreSQL, DB2 等)的通用操作介面。
| 傳統關聯術語 | SQL 標準術語 | 說明 |
|---|---|---|
| 外模式 | 視圖 | 使用者視角的邏輯資料子集 |
| 概念模式/模式 | 基本表 | 實際儲存資料的邏輯結構定義 |
| 內模式/儲存模式 | 儲存檔案 | 實體儲存結構與存取路徑 |
| 元組 | 列 | 一筆資料記錄 |
| 屬性 | 欄 | 資料項/欄位 |
CREATE/ALTER/DROP DATABASE, TABLE, VIEW, INDEX — 定義邏輯結構。SELECTINSERT, UPDATE, DELETEGRANT/REVOKE 權限、COMMIT/ROLLBACK 交易控制、完整性約束定義。SELECT 查詢定義,不儲存實體資料(索引視圖除外),提供安全性與邏輯簡化。| 分類 | 型別範例 | 適用場景 |
|---|---|---|
| 整數 | TINYINT, SMALLINT, INT, BIGINT | 計數、代碼鍵、識別碼 |
| 精確數值 | DECIMAL(p,s), NUMERIC(p,s), MONEY, SMALLMONEY | 金額、精確計算 |
| 近似數值 | FLOAT, REAL | 科學計算、非精確測量 |
| 日期時間 | DATE, TIME, DATETIME, DATETIME2, SMALLDATETIME, DATETIMEOFFSET | 時間戳記、排程、稽核 |
| 字串 | CHAR, VARCHAR, NCHAR, NVARCHAR, TEXT, NTEXT (舊) | 文字、代碼、JSON/XML 片段 |
| 二進位 | BINARY, VARBINARY, IMAGE (舊) | 檔案、圖片、加密資料 |
| 特殊 | UNIQUEIDENTIFIER, XML, GEOMETRY, GEOGRAPHY, HIERARCHYID | GUID、半結構化、空間、階層 |
-- 建立資料庫
CREATE DATABASE XMManage
ON PRIMARY (
NAME = XMManage_Data,
FILENAME = 'D:\Data\XMManage.mdf',
SIZE = 500MB, MAXSIZE = 10GB, FILEGROWTH = 100MB
)
LOG ON (
NAME = XMManage_Log,
FILENAME = 'D:\Log\XMManage.ldf',
SIZE = 100MB, MAXSIZE = 5GB, FILEGROWTH = 50MB
);
GO
-- 建立基本表
CREATE TABLE Projects (
ProjectID INT IDENTITY(1,1) PRIMARY KEY,
Name NVARCHAR(100) NOT NULL,
StartDate DATE NOT NULL DEFAULT GETDATE(),
Budget DECIMAL(14,2) CHECK (Budget >= 0),
Status TINYINT NOT NULL DEFAULT 1
);
GO
-- 建立視圖
CREATE VIEW vw_ActiveProjects AS
SELECT ProjectID, Name, StartDate, Budget
FROM Projects
WHERE Status = 1;
GO
-- 建立索引
CREATE INDEX IX_Projects_StartDate ON Projects (StartDate);
GO
-- 插入
INSERT INTO Projects (Name, StartDate, Budget) VALUES (N'網站改版', '2024-01-15', 500000);
-- 查詢
SELECT ProjectID, Name, Budget FROM vw_ActiveProjects WHERE Budget > 100000 ORDER BY StartDate;
-- 更新
UPDATE Projects SET Status = 2, Budget = Budget * 1.1 WHERE ProjectID = 1;
-- 刪除
DELETE FROM Projects WHERE ProjectID = 999 AND Status = 1; -- 僅刪除草稿專案
using (var conn = new SqlConnection(connStr))
using (var cmd = new SqlCommand("SELECT Name FROM Projects WHERE Budget > @min", conn))
{
cmd.Parameters.AddWithValue("@min", 100000);
conn.Open();
using (var reader = cmd.ExecuteReader())
while (reader.Read()) Console.WriteLine(reader.GetString(0));
}
SELECT/FROM/WHERE/ORDER BY/GROUP BY/HAVING 查詢基礎。JOIN(INNER, LEFT, RIGHT, FULL, CROSS)與子查詢/CTE。SQL 是資料專業人員的通用語言,投資學習回報率極高。從基礎語法出發,逐步深入內部機制,即能駕馭各類關聯式資料庫平台。