天天看點

SQL SERVER

1. 資料類型

create table nnnn

(

  column_char char(10), //字元

  column_varchar varchar(10), //可變長度字元

  column_text text, //存儲大于8000的字元

  column_int int, //整數,4B

  column_smallint smallint, //短整數,2B

  column_bigint bigint, //整數,8B

  column_tinyint tinyint, //整數,1B

  column_bit bit, //比特,1b

  column_decimal decimal(10,3), //精度10,小數點後3位

  column_float float, //浮點,對精度要求不高時可用

  column_datetime datetime, //日期,精确到千分之一秒

  column_smalltime smalldatetime, //日期,精确到分

  column_money money, //貨币,2個4B,前面是整數,後面是小數

  column_smallmoney smallmoney, 貨币,2個2B,前面是整數,後面是小數

  column_binary binary, //二進制,最大長度為8KB,固定長度

  column_varbinary varbinary, //二進制,最大長度為8KB,可變長度

  column_p_w_picpath p_w_picpath, //超過8KB,可存儲圖檔等

  column_nchar nchar, //Unicode資料類型,存儲雙位元組字元,最多存儲4000字元, 固定長度

  column_nvarchar nvarchar, //Unicode資料類型,存儲雙位元組字元,最多存儲4000字元, 可變長度

  column_ntext ntext, //存儲大于4000字元

  column_sql_variant sql_variant //自定義資料類型

)

go

注意:上面的//表示的是注釋,但在SQL SERVER中不能識别

2. 辨別符-分隔符

對不符合全部規則的辨別符,使用分隔符[]或""

3.辨別符

(1)首個字元必須是

Unicode标準2.0定義的字母:a~z、A~Z、來自其他語言的字母字元

下劃線_、at符号@、數字元号#

注:@開始的辨別符,表示局部變量或參數;數字元号開始的辨別符,表示臨時表或過程;雙數字元号##開始的辨別符,表示全局臨時對象。

(2)後續字元,字母、十進制數字、下劃線

(3)不能是Transact-SQL的保留字

(4)不允許嵌入空格或其他特殊字元

(5)不符合規則的辨別符,使用者SQL語句時,需要用分隔符[]或""

4.一個對象的完整名稱

伺服器名稱.資料庫名稱.所有者名稱.對象名稱

server.database.owner_name.object_name

5.完整性

實體完整性:實體完整性将記錄定義為特定表的唯一實體。

注:每一行都是這個表的唯一,不能和其他行重複

域完整性:域完整性是指給定字段的輸入有效性。

注:通過CHECK限制、FOREIGN KEY限制、DEFAULT定義、NOT NULL定義 來确定值的範圍。

引用完整性:在輸入或删除記錄時,引用完整性保持表之間已定義的關系,在删除主表記錄時,相關的明細表記錄也要自動删除。

使用者定義完整性:使用者可以通過存儲過程、觸發器等對象來實施具體資料庫的完整性。

6.限制

NOT NULL:非空限制

UNIQUE:唯一性限制

PRIMARY KEY:主鍵限制

FOREIGN KEY:外鍵限制

CHECK:檢查限制

7.CHECK限制

{constant | column_name | function | (subquery)}

[

{operator | AND | OR | NOT}

]

注:constant,字面值,數字或字元資料; column_name,指定列;function,内置函數;operator,運算符。

如: 物資編碼 LIKE '[0-9][0-9][0-9][0-9][0-9]'

   單價 > 0

   [物資編碼] >= 0 and [物資編碼] <= 99999

例如:

ALTER TABLE [dbo].[物資資訊表] WITH NOCHECK ADD CONSTRAINT [CK_物資資訊表] CHECK ([物資編碼] >= 0 and [物資編碼] <= 99999)

GO

8.NULL 、空白、0是不同的

SQL語言包括:

資料定義語言:包括建立資料表(關系)、删除資料表、修改資料表、建立索引和限制以及建立其他資料庫對象等。

資料操縱語言:包括查詢、添加、删除、修改資料等。

資料控制語言:控制安全性的指令。

SQL語句組成: 辨別符、關鍵字、資料類型、運算符、表達式、函數、注釋

1.指定pubs資料庫為SQL語句的執行資料庫

USE pubs

2.查詢語句

SELECT emp_id, fname+''+lname as name, hire_date

FROM employee

WHERE year(hire_date) > 1992

3.聲明變量

DECLARE

{

  @myint int,

 @sdf char(8);

}

注:聲明了兩個比變量@myint和@sdf

4.為變量指派

SET @myint =12

SET @myint =1, @sdf = 'dDD'

5.邏輯運算

 all,所有布爾表達式為true,傳回true;

 any, 有一個為true,傳回true;

 like,如果操作數與一種模式比對,傳回true;

 in,如果操作數等于表達式清單中的一個,傳回true。

 and, or, not

6.非空判斷

where hire_name is not null

7.打開或關閉text in row, text、ntext和p_w_picpath字元串存儲在資料行内/外(将資料儲存到獨立的文本或圖像頁面裡,此時文本行是一個指向該資料的指針)

sp_tableoption TableName, 'text in row', 'ON'

8.WRITETEXT、UPDATETEXT和READTEXT,處理大文本和圖像資料

9.IF...ELSE 結構

IF 條件判斷

  過程1

ELSE

  過程2

IF @myint==2

  SET @myint=3

  SET @myint=4

10.IF EXISTS(結構)

IF [NOT] EXISTS (SELECT 語句)

11.BEGIN...END結構

它可以将多個指令作為一個整體看待

12.WHILE循環

WHILE 判斷表達式

{循環體}

[BREAK]

[CONTINUE]

注:BREAK,跳出循環;CONTINUE,開始下一次循環

13.GOTO語句

跳轉到對應的标簽處

label1:

 PRINT 'HHA'

 GOTO lable1

注:lable1:是建立标簽

14.CASE語句

CASE 字段名稱

 WHEN 記錄 THEN 結果值

 ...

 ELSE 結果子

END

SELECT、GROUP BY和HAVING、ALL、TOP、ORDER BY、ROWCOUNT、DISTINCT、UNION、WHERE、CASE、INSETR JOIN...ON...

SELECT

SELECT *

FROM TABLE_NAME

TOP

SELECT [TOP n [PERCENT] column_name [,...n]]

FROM tablename

注:TOP n   是傳回前n行資料

  TOP n PERCENT   是傳回百分之n的資料

n不能用表達式或變量來替代

ROWCOUNT

SET ROWCOUNT 3

FROM 物資庫存記錄

SET ROWCOUNT 0

SET ROWCOUNT 3表示設定傳回結果的行數為3

SET ROWCOUNT 0表示恢複ROWCOUNT

DISTINCT

SELECT DISTINCT 物資名稱

FROM 物資基本資訊

注:DISTINCT用來從SELECT語句的結果集中除去重複的行

WHERE

條件

BETWEEN...AND結構

字段名或者表達式 [NOT] BETWEEN 表達式1 AND 表達式2

IN

表達式或者字段名 [NOT] IN (清單或者子查詢)

LIKE

字元串表達式 [NOT] LIKE 可以帶通配符串表達式

[ESCAPE 字元串表達式]

注:ESCAPE表示,允許在字元串中搜尋通配符而不是将其作為通配符使用E

注:用于模糊查詢, 和LIKE結合使用的通配符%、_、[]和[^],他們必須與LIKE結合才有意義,否則就是普通字元

%:表示任意個任意字元

_:表示1個任意字元

[]:表示可以是方括号裡列出的任意一個字元

[^]:表示不在方括号裡列出的任意一個字元

EXISTS

EXISTS關鍵字用于指定一個子查詢,檢測行的存在。 也就是說,如果EXISTS關鍵字指定的子查詢查得的結果集不為空,則執行主體的SELECT 查詢,否則傳回的結果集為空。

WHERE EXISTS (SELECT * FROM TAB WHERE NAME='1')

設定查詢字段的顯示名稱

1.使用AS關鍵字

2.使用“=”号

3.直接給出名稱

SELECT emp_id '雇員編号', fname+''+'lname' ‘姓名’

SELECT emp_id AS '雇員編号', fname+''+'lname' AS ‘姓名’

SELECT '雇員編号'=emp_id ,  ‘姓名’=fname+''+'lname'

注:作為字段名稱時,漢字可以不使用'',但是作為值的時候,必須使用''

統計函數

SUM()、AVG()、MAX()、MIN()、COUNT()

求和、平均數、最大值、最小值、記錄數

GROUP BY和HAVING

[GROUP BY 表達式]

[HAVING 表達式]

注:GROUP BY用來對資料進行分組, HAVING用來對分組的資料設定條件

FROM A

WHERE price is NOT NULL

GROUP BY type

HAVING COUNT(*) > 3

ALL

在GROUP BY子句中使用,但在SELECT語句中包括WHERE子句時ALL才有意義

FROM B

WHERE 數量>10

GROUP BY ALL 機關

注:使用ALL關鍵字,那麼查詢結果将包括由GROUP BY子句産生的所有組,即使某些組沒有符合搜尋條件的行。

ORDER BY

FROM C

ORDER BY price DESC

注:子句中的字段數目沒有限制,ASC表示升序,DESC表示降序,空值被視為最低的值

多表查詢

SELECT pub.pub_id, title.id

FROM pub, title

UNION

UNION可以将多個SELECT語句的查詢結果組合到一起

使用UNION的結果集,必須具有相同的字段結構,字段數必須相等,響應的字段的資料類型必須相容

CASE、INNER JOIN...ON...表達式

INSERT

INSERT [INTO] 表名或試圖 [字段清單] values 值清單

INSERT INTO 物資庫存記錄 (物資編号,物資名稱) VALUES ('LP12', '螺釘')

UPDATE

UPDATE 表名或視圖

SET {字段名={expression | default | null}}

[FROM {<table_source>}[,...]]

DELETE

DELETE 表或視圖

FROM 其他表

WHERE 表達式

視圖

CREATE VIEW [database_name.][owner.]view_name[(column [,...n])]

[WITH <view_attribute>[,...n]]

AS

select_statement

[WITH CHECK OPTION]

<view_attribute>::= {ENCRYPTION | SCHEMABINDING | VIEW_METADATA}

修改視圖

ALTER

VIEW [database_name.][owner.]view_name[(column [,...n])]