出處http://www.cnblogs.com/nniixl/。
THE 1
系統數據庫
1. Master數據庫
所有系統級別信息,所有登錄帳戶和系統配置設置,所有其他的數據庫及數據庫文件的位子,SQL Server的初始化信息。
2. Tempdb數據庫
保存所有臨時表和臨時存儲過程,以及臨時生成的工作表。
3. Model數據庫
系統上創建的所有數據庫的模板。
4. Msdb數據庫
提供SQL Server代理程序調度警報、作業以及操作時使用。
創建數據庫
CREATE DATABASE [數據庫名]
ON(NAME = N’***’, FILENAME = N’***.MDF’,
SIZE = *, MAXSIZE = *, FILEGROWTH = * )
LOG ON (NAME = N’***’, FILENAME = N’***.LDF’,
SIZE = *, MAXSIZE = *, FILEGROWTH = *)
COLLATE Chinese_PRC_CI_AS
刪除數據庫
USE master
GO
IF EXISTS (SELECT * FROM sysdatabases WHERE name='數據庫名')
DROP DATABASE 數據庫名
THE2
數據完整性
1. 實體完整性
(對記錄) 通過: 索引 唯一約束 主鍵約束 標識列屬性
2. 域完整性
(對列)通過:數據類型 檢查約束 輸入格式 外鍵約束 默認值 非空約束
3. 引用完整性
(主從表關聯)通過:主鍵與外鍵間引用
4. 自定義完整性
通過:存儲過程和觸發器
外鍵無法增加主鍵中沒有的數值 在刪除外鍵前無法刪除主鍵數據(外鍵依賴主鍵數據)
數據類型
精確數字
bigint 從 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型數據(所有數字 |
decimal 從 -10^38 +1 到 10^38 –1 的固定精度和小數位的數字數據 |
int 從 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型數據(所有數字) |
numeric 功能上等同於 decimal |
smallint 從 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整數數據 |
money 貨幣數據值介於 -2^63 (-922,337,203,685,477.5808) 與 2^63 - 1 (+922,337,203,685,477.5807) 之間,精確到貨幣單位的千分之十 |
tinyint 從 0 到 255 的整數數據 |
smallmoney 貨幣數據值介於 -214,748.3648 與 +214,748.3647 之間,精確到貨幣單位的千分之十 |
bit 布爾 |
|
近似數字
float 從 -1.79E + 308 到 1.79E + 308 的浮點精度數字 |
real 從 -3.40E + 38 到 3.40E + 38 的浮點精度數字 |
日期和時間
datetime 從 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和時間數據,精確到百分之三秒(或 3.33 毫秒) |
smalldatetime 從 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和時間數據,精確到分鐘 |
字符串
char 固定長非Unicode字符 最大8000字符 |
text 可變長度的非 Unicode 數據,最大長度爲 2^31 - 1 (2,147,483,647) 個字符 |
Varchar 可變長度的非 Unicode 數據,最長爲 8,000 個字符 |
|
Unicode 字符串
nchar 固定長度的 Unicode 數據,最大長度爲 4,000 個字符 |
ntext 可變長度 Unicode 數據,其最大長度爲 2^30 - 1 (1,073,741,823) 個字符 |
nvarchar 可變長度 Unicode 數據,其最大長度爲 4,000 字符。sysname 是系統提供用戶定義的數據類型,在功能上等同於 nvarchar(128),用於引用數據庫對象名 |
|
二進制字符串
binary 固定長度的二進制數據,其最大長度爲 8,000 個字節 |
image 可變長度的二進制數據,其最大長度爲 2^31 - 1 (2,147,483,647) 個字節 |
varbinary 可變長度的二進制數據,其最大長度爲 8,000 個字節 |
|
其他數據類型
cursor 遊標的引用 |
timestamp 數據庫範圍的唯一數字,每次更新行時也進行更新 |
sql_variant 一種存儲 SQL Server 支持的各種數據類型(text、ntext、timestamp 和 sql_variant 除外)值的數據類型 |
uniqueidentifier 全局唯一標識符 (GUID) |
table 一種特殊的數據類型,存儲供以後處理的結果集 |
xml |
※ 姓名、地址、電話號碼一般用字符數據類型
※ 性別一般用bit數據類型
※ 年齡一般使用日期存儲
※ 照片用Image
※ 薪水使用貨幣數據類型
※ 身份證 NUMERIC(18, 0)
創建數據表
CREATE TABLE [表名]
(
[ID] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL,
[ImpID] SMALLINT IDENTITY(1, 1),
. . .
)
對錶進行修改
加約束:
(約束名約定)
主鍵(Primary Key) PK_
唯一(Unique Key) UQ_
默認(Default Key) DF_
檢查(Check Key) CK_
外鍵(Foreign Key) FK_
ALTER TABLE tab1
ADD CONSTRAINT PK_Num PRIMARY KEY (Num)
ALTER TABLE tab1
ADD CONSTRAINT UQ_Num UNIQUE (Num)
ALTER TABLE tab1
ADD CONSTRAINT DF_sAddr DEFAULT (‘地址無’) FOR (sAddr)
ALTER TABLE tab1
ADD CONSTRAINT CK_sAge CHECK (sAge BETWEEN 15 AND 20)
ALTER TABLE tab1
ADD CONSTRAINT FK_stuHA FOREIGN KEY(外鍵列名) REFERENCES 表名(列名)
刪除約束:
ALTER TABLE 表名 DROP CONSTRAINT 約束名
對錶增 刪 改:
ALTER TABLE [表名]
add [列名] 數據類型 是否空
drop column [列名]
alter column [列名] 數據類型 是否空
刪除表:
USE master
GO
IF EXISTS (SELECT * FROM sysobjects WHERE name='表名')
DROP TABLE 數據庫名
THE3
T-SQL組成
DML 數據庫操作語言 SELECT UPDATE INSERT DELETE等
DCL 數據控制語言 GRANT REVOKE等
DDL 數據定義語言 CREATE TABLE CREATE VIEW DROP TABLE 等
比較運算符 與 通配符
比較運算基本與C一樣 (注:不等於爲 <> )
通配符
_ |
匹配一個字符 |
A LIKE ’L_ve’ |
% |
任意長字符 |
A LIKE ‘%o%’ |
[] |
括號中範圍的一個字符 |
A LIKE ‘g[a-z]d’ |
[^] |
不在括號中範圍的任意一個字符 |
A LIKE ‘g[^a-z]d’ |
邏輯表達式
AND OR NOT
插入 INSERT
單行插入
INSERT INTO [表名] [列名,列名…] VALUES <值>
EXP:
INSERT INTO Stu (sName, sAge, sAddr )
VALUES (‘ZhangHan’, 20, ‘ShangHai’ )
注:一次插入一行數據 不能違反非空約束
數據值數目必須與列數相同 數值數據類型 精度 和 位數必須匹配
不能給自動增長標識列指定值
對字符類型用單引號引起來
多行插入1
INSERT INTO [表名] [列名,列名…] SELECT [列名,列名…] FROM [表名]
EXP:
INSERT INTO Tab1 (sName, sAge, sAddr ) SELECT (aName, aAge, aAddr ) FROM Tab2
多行插入2
注: 以下插入方式被插入表不可存在 該方式常用於創建臨時表
SELECT [列名,列名…] INTO [表名] FROM [表名]
EXP:
SELECT (sName, sAge, sAddr )
INTO TempTable
FROM CrrentTable
EXP2: 該創建包含連續標識列的臨時表以便查詢用
SELECT IDENTITY(數據類型, 標識種子, 標識增長量) AS [列名, 列名…]
INTO 新表
FROM 原始表
多行插入3
INSERT [表名] [列名, 列名…]
SELECT [列值1,列值1…] UNION
SELECT [列值2,列值2…] UNION
SELECT [列值3,列值4…] UNION
. . .
SELECT [列值n,列值n…]
更新UPDATE
UPDATE [表名] SET [列名 = 更新值] { WHERE [更新條件] }
刪除 DELETE TRUNCATE
DELETE FROM [表名] { WHERE [刪除條件] }
TRUNCATE TABLE [表名] 可將標識列設置爲初始狀態
THE4
查詢SELECT
SELECT [列名] FROM [表名]
{WHERE [查詢條件表達式]}
{ORDER BY [排序列名] [ASC 或 DESC]}
對於列名
AS: sCode AS 學員姓名
= : 學員姓名 = sCode
+ : first + ‘_’ + last AS 姓名
查詢空行 查詢非空行 Exp:
IS NULL IS NOT NULL SELECT sID FROM Tab WHERE sAdd IS NULL
查詢常量
SELECT sName, sAddr, ‘中國’ AS 地區 FROM Record
查詢返回行限制
SELECT TOP 5 sName, sAddr FROM Tab1
SELECT TOP 50 PERCENT sName, sAddr FROM Tab1
查詢SELECT 模糊查詢
LIKE
SELECT * FROM Stu WHERE sName LIKE ‘a[d-g]’
BETWEEN
SELECT * FROM Stu WHERE sNum BETWEEN 10 AND 70
IN (NOT IN)
SELECT * FROM Stu WHERE sAddr IN (‘SH’, ’WH’, ’BJ’)
常用函數
注:以下僅爲最常用函數需瞭解全部函數和規範請參考MS聯機幫助 下列函數很簡單的略去例子
常用字符串函數
CHARINDEX |
返回指定字符串在另一個字符串中的位子 |
SELECT CHARINDEX(‘abc’, ‘fgabcdefg’) 返回:3 |
LEN |
返回字符串長度 |
SELECT LEN(‘哈myname’) 返回:7 |
LOWER |
大小轉小寫 |
SELECT LOWER(‘SQL SERVER’) |
UPPER |
小寫轉大寫 |
SELECT LOWER(‘sql SERVER’) |
LTRIM (RTRIM) |
清除左(右)空格 |
|
RIGHT (LEFT) |
返回右(左)指定長度字符 |
|
REPLACE |
替換字符串中指定字符到指定字符 |
SELECT REPLACE(‘abcdef’, ‘a’, ‘X’) 返回:Xbcdef |
STUFF |
刪除指定位子開始指定長度字符並在其位子插入指定字符 |
SELECT STUFF(‘abcde’, 2, 3, ‘FILL’) 返回:aFILLe |
SUBSTRING ( expression ,start , length ) 返回字符表達式、二進制表達式、文本表達式或圖像表達式的一部分
常用日期函數
GETDATE |
取得當前時間 |
|
DATEADD |
將指定數值添加到指定日期的指定位子 |
SELECT DATEADD(mm, 5, ‘02/03/08’) 返回:02/08/08 |
DATEDIFF |
兩個時間指定位子的區別 |
SELECT DATEDIFF(mm, ‘02/03/08’, ’08/03/08’) 返回:72 |
DATENAME |
日期中指定位子的字符串形式 |
SELECT DATENAME(dw, '09/01/08') 返回:禮拜四 |
DATEPART |
日期中指定位子的整數形式 |
SELECT DATEPART(yy, '09/01/08') 返回:2009 |
Year yy, yyyy
quarter qq, q
Month mm, m
dayofyear dy, y
Day dd, d
Week wk, ww
Hour hh
minute mi, n
second ss, s
millisecond ms
常用數學函數
ABS |
絕對值 |
|
CEILING |
大於等於指定值的最小整數 |
|
FLOOR |
小於等於指定值的最大整數 |
|
POWER |
去數值的冪 |
|
ROUND |
將數值四捨五入到指定精度 |
|
SIGN |
證書返回+1 負數返回-1 0返回0 |
|
SQRT |
取平方根 |
|
常用系統函數
CONVERT |
數據類型轉換 重要 |
SELECT CONVERT(VARCHAR(7), 3344521) 返回:{字符串} 3344521 |
CURRENT_USER |
返回當前用戶名字 |
|
DATALENGTH |
返回指定表達式 字節數 |
SELECT DATALENGTH(‘三年2班’) 返回:7 |
HOST_NAME |
當前用戶登錄計算機名字 |
|
SYSTEM_USER |
當前用戶登錄名字 |
|
USER_NAME |
給定用戶ID返回名字 |
|
聚合函數
僅常用
SUM 求和 AVG平均值 MAX最大值 MIN最小值 COUNT計數
注: 聚合函數不可與其他多行結果的列同時被查詢 除GROUP BY所分組列外
EXP:
SELECT COUNT(*) MAX(score) FROM Stu WHERE sCore >=60
分組查詢 及 篩選
SELECT GradeID , COUNT(*) FROM Stu
WHERE score >= 60
GROUP BY GradeID
HAVING COUNT(*) > 30
ORDER BY GradeID DESC
--從Stu表中以降序的方式列出班上至少有30人以上及格的班級號
WHERE ---> GROUP BY ---> HAVING |
WHERE子句從數據源中去掉不符合搜索條件的數據
GROUP BY 子句爲分組統計
HAVING 子句去掉不符合條件的分組
多表鏈接的查詢
內聯接
INNER JOIN 注:(其中出現<>比較的時候 並不是同行點對點比較而是亂序全行比較)
EXP:
SELECT S.sName, C.cID, C.cAddr FROM Stu AS S
INNER JOIN Scii AS C ON (S.ID = C.ID)
外聯接
左外聯接
LEFT JOIN 左表中所選所有列都將被列出 右表中沒有與其對應值則置爲NULL
右外聯接
RIGHT JOIN 右表中所選所有列都將被列出 左表中沒有與其對應值則置爲NULL
完整聯接
FULL JOIN 左右表中所選所有列都將被列出 對應表中沒有與其對應值則置爲NULL
交叉連接
CORSS JOIN 左右表每行數據與右表一一組合