SQL server Base

出處http://www.cnblogs.com/nniixl/

THE 1

系統數據庫

1.       Master數據庫

所有系統級別信息,所有登錄帳戶和系統配置設置,所有其他的數據庫及數據庫文件的位子,SQL Server的初始化信息。

 

2.       Tempdb數據庫

保存所有臨時表和臨時存儲過程,以及臨時生成的工作表。

 

3.       Model數據庫

系統上創建的所有數據庫的模板。

 

4.       Msdb數據庫

提供SQL Server代理程序調度警報、作業以及操作時使用。

 

創建數據庫

     CREATE DATABASE [數據庫名]

     ONNAME = 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 支持的各種數據類型(textntexttimestamp 和 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 左右表每行數據與右表一一組合

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章