首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 基礎語法實戰範例集(一):建庫建表、備份、索引、視圖、聯 JOIN、分組與系統存儲過程

     編輯:關於SqlServer

T-SQL 核心 DDL/DML/DCL 語法速查與實戰範本

本文系統整理資料庫/資料表生命週期管理、基礎查詢、進階聯 JOIN、集合運算、分組統計、中繼資料查詢、系統存儲過程等高頻操作,所有範例附帶可直接執行的測試資料建立腳本。

一、資料庫生命週期

-- 建立
CREATE DATABASE MyDB;
-- 備份 (完整備份)
USE master;
EXEC sp_addumpdevice 'disk', 'MyDB_bak', 'D:\Backup\MyDB.bak';
BACKUP DATABASE MyDB TO MyDB_bak;
-- 刪除
DROP DATABASE MyDB;

二、資料表 DDL

-- 建表 (含主鍵、非空、預設值)
CREATE TABLE Products (
    Id INT IDENTITY(1,1) PRIMARY KEY,
    Name NVARCHAR(50) NOT NULL,
    Qty INT DEFAULT 0,
    Price DECIMAL(10,2),
    CreatedAt DATETIME2 DEFAULT SYSDATETIME()
);

-- 新增欄位
ALTER TABLE Products ADD Category NVARCHAR(20);
-- 刪除欄位
ALTER TABLE Products DROP COLUMN Category;
-- 新增主鍵 (表已有資料需確保唯一非空)
ALTER TABLE Products ADD CONSTRAINT PK_Products PRIMARY KEY (Id);
-- 刪除主鍵
ALTER TABLE Products DROP CONSTRAINT PK_Products;

-- 索引
CREATE UNIQUE INDEX IX_Products_Name ON Products(Name);
DROP INDEX IX_Products_Name ON Products;

-- 視圖
CREATE VIEW V_Expensive AS SELECT * FROM Products WHERE Price > 1000;
DROP VIEW V_Expensive;

三、基礎 DML 與查詢

-- 新增
INSERT INTO Products (Name, Qty, Price) VALUES ('筆記型電腦', 10, 25000);
-- 修改
UPDATE Products SET Price = 24000 WHERE Name = '筆記型電腦';
-- 刪除
DELETE FROM Products WHERE Qty = 0;
-- 清空表 (DDL、極快、重置 IDENTITY)
TRUNCATE TABLE Products;

-- 查詢
SELECT * FROM Products;
SELECT Name, Price FROM Products WHERE Price > 1000;
SELECT Name AS 產品, Price AS 價格 FROM Products;
SELECT TOP 10 * FROM Products ORDER BY Price DESC;

四、聚合與分組

SELECT COUNT(*) AS 總筆數, SUM(Qty) AS 總庫存, AVG(Price) AS 平均價, MAX(Price) 最高價, MIN(Price) 最低價
FROM Products;

-- 分組統計
SELECT Category, COUNT(*) AS 種類數, AVG(Price) AS 平均價
FROM Products
GROUP BY Category
HAVING COUNT(*) > 5;  -- 分組後過濾

五、集合運算 (UNION/EXCEPT/INTERSECT)

-- 測試資料
DECLARE @a TABLE (id INT); INSERT @a VALUES (1),(1),(2),(3),(NULL);
DECLARE @b TABLE (id INT); INSERT @b VALUES (1),(2),(2),(4),(NULL);

-- UNION: 合併去重
SELECT * FROM @a UNION SELECT * FROM @b;        -- 1,2,3,4,NULL
-- UNION ALL: 合併不去重
SELECT * FROM @a UNION ALL SELECT * FROM @b;    -- 1,1,2,3,NULL,1,2,2,4,NULL
-- EXCEPT: 差集 (去重)
SELECT * FROM @a EXCEPT SELECT * FROM @b;       -- 3
-- INTERSECT: 交集 (去重)
SELECT * FROM @a INTERSECT SELECT * FROM @b;    -- 1,2,NULL

注意:SQL Server **不支援** EXCEPT ALL、INTERSECT ALL。

六、JOIN 類型完整圖解

-- 測試資料同前
-- INNER JOIN (預設)
SELECT * FROM @a a JOIN @b b ON a.id = b.id;           -- 1,1,2,2,NULL
-- LEFT JOIN
SELECT * FROM @a a LEFT JOIN @b b ON a.id = b.id;      -- 保留 a 全部
-- RIGHT JOIN
SELECT * FROM @a a RIGHT JOIN @b b ON a.id = b.id;     -- 保留 b 全部
-- FULL JOIN
SELECT * FROM @a a FULL JOIN @b b ON a.id = b.id;      -- 保留雙方全部

七、分組 GROUP BY 核心規則

  • SELECT 清單中**非聚合欄位必須出現在 GROUP BY** 中。
  • 不可對 TEXT/NTEXT/IMAGE 分組 (已淘汰型別);MAX/MIN 可用於 VARCHAR(MAX)/VARBINARY(MAX)。
  • GROUP BY ROLLUP/CUBE/GROUPING SETS 進階多維度小計。

八、系統存儲過程:資料庫分離/附加/重命名

-- 分離 (需單一使用者模式)
EXEC sp_detach_db 'MyDB', 'true';  -- true = 更新統計資料
-- 附加 (需 .mdf + .ldf 完整路徑)
EXEC sp_attach_db @dbname = 'MyDB',
    @filename1 = 'D:\Data\MyDB.mdf',
    @filename2 = 'D:\Data\MyDB_log.ldf';
-- 重命名
EXEC sp_renamedb 'OldName', 'NewName';

九、重命名資料表/欄位/索引

EXEC sp_rename 'OldTable', 'NewTable';           -- 表
EXEC sp_rename 'Table.OldCol', 'NewCol', 'COLUMN'; -- 欄位
EXEC sp_rename 'IX_Old', 'IX_New', 'INDEX';       -- 索引

總結速查卡

  • 建庫/備份/刪庫 → CREATE/BACKUP/DROP DATABASE
  • 建表/改結構 → CREATE/ALTER TABLE + 約束語法
  • 索引/視圖 → CREATE/DROP INDEX/VIEW
  • 增刪改查 → INSERT/UPDATE/DELETE/SELECT + TOP/ORDER BY
  • 聚合/分組 → COUNT/SUM/AVG/MAX/MIN + GROUP BY/HAVING
  • 集合運算 → UNION/EXCEPT/INTERSECT (去重)
  • JOIN → INNER/LEFT/RIGHT/FULL
  • 系統管理 → sp_detach_db/attach_db/renamedb/rename

將此頁加入書籤,日常 T-SQL 開發 90% 語法皆可秒查秒用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved