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

SQL 入門基礎教學:查詢、建表、資料型別、欄位屬性、排序、去重與別名完整指南

     編輯:關於SqlServer

什麼是 SQL?

結構化查詢語言 (Structured Query Language),關聯式資料庫標準語言。核心特性:

  • 資料以表格 (Table) 儲存:列 = 記錄,欄 = 欄位。
  • 集合導向:宣告「要什麼」而非「怎麼取」,最佳化器決定執行計畫,無固有順序。

執行查詢工具

  • SSMS (SQL Server Management Studio) —— 現代標準。
  • 舊版:ISQL/w、查詢分析器。
  • 程式碼:ADO.NET `SqlCommand`、ODBC、OLE DB。

SELECT 基礎語法


SELECT [DISTINCT] 欄位清單
FROM 資料表
[WHERE 條件]
[ORDER BY 欄位 [ASC|DESC]]

範例:pubs 範例資料庫


-- 所有作者電話
SELECT phone FROM authors;

-- 指定欄位
SELECT au_fname, au_lname, phone FROM authors;

-- 所有欄位
SELECT * FROM authors;

-- 條件篩選
SELECT phone FROM authors WHERE au_lname = 'Ringer';

-- 邏輯運算子
SELECT * FROM authors WHERE state = 'CA' AND city = 'Oakland';
SELECT * FROM authors WHERE state = 'CA' OR state = 'NY';
SELECT * FROM authors WHERE NOT state = 'CA';

欄位別名與運算


-- 別名
SELECT au_lname AS '姓氏', au_fname AS '名字' FROM authors;

-- 算術運算 (不改變表內資料)
SELECT price AS '原價', price * 1.1 AS '漲價10%' FROM titles;

-- 字串串接
SELECT au_fname + ' ' + au_lname AS '全名' FROM authors;

排序


SELECT au_lname FROM authors ORDER BY au_lname;           -- 遞增 (預設)
SELECT au_lname FROM authors ORDER BY au_lname DESC;      -- 遞減
SELECT au_lname, au_fname FROM authors ORDER BY au_lname, au_fname;

效能提醒:大量資料排序耗資源,僅在必要時使用。

去重


SELECT DISTINCT au_lname FROM authors WHERE au_lname = 'Ringer';  -- 僅 1 列

同樣增加排序/雜湊開銷,按需使用。

建立資料表


CREATE TABLE GuestBook (
    Visitor   VARCHAR(40),      -- 變長字串,最長 40 字元
    Comments  TEXT,             -- 大型文字 (超過 8000 字元)
    EntryDate DATETIME          -- 日期時間
);

常用資料型別

類別型別說明
字串VARCHAR(n)變長 1~8000 字元,實際長度儲存
CHAR(n)固定長度,不足補空白
TEXT / VARCHAR(MAX)大型文字 (2^31-1 字元),慎用
數值INT-2,147,483,648 ~ 2,147,483,647 (4 位元組)
SMALLINT-32,768 ~ 32,767 (2 位元組)
TINYINT0 ~ 255 (1 位元組)
DECIMAL(p,s) / NUMERIC(p,s)精確數值,p=總位數, s=小數位數
貨幣MONEY-922,337,203,685,477.5808 ~ +922,337,203,685,477.5807 (8 位元組)
SMALLMONEY-214,748.3648 ~ 214,748.3647 (4 位元組)
邏輯BIT0/1/NULL,建表時才能加入
日期時間DATETIME1753-01-01 ~ 9999-12-31,精度 3.33 ms
SMALLDATETIME1900-01-01 ~ 2079-06-06,精度 1 分鐘

欄位屬性

NULL / NOT NULL


CREATE TABLE CreditCard (
    CardNo  CHAR(20) NOT NULL,   -- 必填
    ExpDate DATETIME NOT NULL
);

DEFAULT 預設值


CREATE TABLE Address (
    Country VARCHAR(30) DEFAULT 'USA',
    ZipCode VARCHAR(10) DEFAULT '00000'
);

CREATE TABLE Orders (
    Amount MONEY DEFAULT 0.00
);

IDENTITY 識別欄位 (自動遞增)


CREATE TABLE Logs (
    LogID   INT IDENTITY(1,1) PRIMARY KEY,  -- 種子 1, 遞增 1
    Msg     VARCHAR(200),
    LogTime DATETIME DEFAULT GETDATE()
);
  • 插入時不可指定身分識別欄位值。
  • `SCOPE_IDENTITY()` 取得最新值。

修改/刪除表


-- 新增欄位
ALTER TABLE GuestBook ADD Browser VARCHAR(50);

-- 修改欄位型別 (謹慎,資料可能截斷)
ALTER TABLE GuestBook ALTER COLUMN Visitor VARCHAR(60);

-- 刪除欄位
ALTER TABLE GuestBook DROP COLUMN Browser;

-- 刪除整張表
DROP TABLE GuestBook;

練習建議

  1. 安裝 SQL Server Express + SSMS。
  2. 附加 `pubs` / `Northwind` 範例資料庫。
  3. 逐項嘗試本文所有範例,觀察執行計畫 (`Ctrl+M`)。
  4. 嘗試建立自己的小專案資料表 (如待辦事項、記帳)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved