SQL Server 重點整理
1、資料庫技術發展經歷了人工管理、文件系統、資料庫系統三個階段
2、資料庫系統的組成:資料庫(數據)、資料庫管理系統、資料庫管理人員、支持資料庫系統的軟體和硬體(應用開發工具、應用系統等)、用戶五部分
3、資料庫三級模式結構:
1.模式:邏輯模式或概念模式,所有用戶的公共數據視圖,一個資料庫只有一個概念模式。
2.外模式:用戶模式,是資料庫用戶的數據視圖。外模式是邏輯模式的子集,一個資料庫可以有多個外模式。
3.內模式:存儲模式。一個資料庫只有一個內模式,是數據物理結構和存儲方式的描述,是數據在數據內部的表示方式。
4、數據模型:描述數據之間的的聯繫,語義等概念的集合,包括數據結構、數據操作(關係操作集合)、完整性約束3個部分。
5、常見的數據模型:層次模型、網狀模型、關係模型
6、關係模型術語:
1.關係:一個二維表就是一個關係
2.元組:二維表中的一行,即表中的記錄
3.屬性:二維表中的一列,用類型和值表示
4.域:每個屬性取值的變化範圍,如性別的域為【男,女】、
7、關係中的數據約束:
1.實體完整性約束:約束關係的主鍵中屬性值不能為空值
2.參照完整性約束:關係之間的基本約束
3.用戶定義的完整性約束:反映具體應用中數據的語義要求。
8、關係資料庫的規範化:
1.第一範式:消除重複欄位(無重複屬性,無重複列)
2.第二範式:消除部分依賴
3.第三範式:消除傳遞依賴,非主關鍵字全部依賴於主關鍵字
9、資料庫常用對象:
1.表:二維表,包括行和列。
2.欄位:表中的每一列成為一個欄位,欄位具有自己的屬性:欄位類型、欄位大小。
SQL規範支持五種基本欄位類型:字符型、文本型、數值型、邏輯型和日期類型。
3.索引:單獨的、物理的資料庫結構,依賴於表建立。
4.視圖:從一張或多張表中導出的表。
10、存儲過程:為了完成特定功能的SQL語句集合(包含查詢、插入、刪除和更新等操作)
11、SQL server 命名規則:
1.標識符格式:
1.1 標識符首字符必須是:字母、下劃線「_」、"@"(局部變量或參數)、「#」(臨時表或過程)
1.2 標識符的後續字符:字母、十進位數字、「_」、"@"、「#」或"$"
1.3 標識符不允許是保留字
1.4不允許有空格或其他特殊字符
2.標識符分類:常規標識符、分隔標識符(包含在「」或【】內的標識符,該標誌符可以不符合),字符數必須在1~128之間,對於本地臨時表,標識符最多可以有116個字符。
3.對象命名規則:
資料庫對象的名字由1~128個字符組成,不區分大小寫,也可以使用標識符。資料庫對象的完整名稱應該由伺服器名,資料庫名,擁有者名和對象名。指定了所有4個部分的對象名稱被稱為完全合法名稱。伺服器名,資料庫名,擁有者名即稱為對象名稱限定符。不允許存在四部分名稱完全相同的資料庫對象。
12、創建資料庫: create database '資料庫名稱'
修改資料庫:ALTER DATABASE '資料庫名稱'
資料庫更名:exec SP_renamedb 『原名稱』,『更改後的名稱』
刪除資料庫: drop database '資料庫名稱'
13、基本數據類型:
1.整數數據類型:常用,可以存儲整數或小數:bit、int、smallint、tinyint
2.貨幣數據類型:用於存儲貨幣值,使用時在數據前加上貨幣符號,不加貨幣符號時默認為"¥":money、smallmoney
3.浮點數據類型:用於存儲十進位小數:real、float、decimal、numeric
4.日期/時間數據類型:用於存儲日期類型和事件類型的組合數據:datetime、smalldatetime、date、datetime(2)、datetimestampoffset
5.字符數據類型:用於存儲各種字母、數字和特殊符號:char、varchar、nchar(n)、nvarchar(n)--純英文或者數字可以不帶n
6.二進位數據類型:用於存儲二進位數據:Binary、varbinary
7.圖像和文本數據類型:用於存儲大量的字符及二進位數據(binary data):text、ntext、image
14、用T-SQL創建用戶自定義數據類型:exec SP_addtype 類型名,'類型','是否為空'
exec SP_addtype postcode,'char(8)','not null'
15、創建表:create table 表名 (列名 類型 約束,...,...)
16、修改表結構:Alter table 表名 ADD 列名 類型char(10)
ALter table 表名 drop column 列名
17、刪除表:drop table 表名
18、向表中插入記錄:insert into 表名 (列名,列名,列名) values(...),添加所有欄位時,可以省略列名
19、修改數據:update 表名 set 列名=... where...
20、刪除數據:delete from 表名 where...(如果不指定,則刪除表中所有數據)
21、 修改非空約束:alter table 表名 alter column 列名 原列類型 null/not null(alter table mingri alter column column_name int null)
22、創建表時創建主鍵約束:
1.create table 表名( 列名 類型 constraint 約束名 primary key,...)
2.create table 表名( 列名 類型 , 列名 類型,constraint 約束名 primary key(列名,列名..))
23、現有表中添加主鍵約束:
alter table 表名 ADD constraint 約束名 primary key(列名,列名)
24、刪除主鍵約束:
alter table 表名 drop constraint 約束名
25、創建表時創建唯一約束:
1.create table 表名( 列名 類型 constraint 約束名 unique,...)
26、現有表中添加唯一約束:
alter table 表名 ADD constrain 約束名 unique(列名)
27、修改唯一約束:必須刪除現有unique約束,然後用新定義重新創建
28、刪除唯一約束:alter table 表名 drop constrain 約束名
29、創建檢查約束:create table 表名 (列名 類型 constraint 約束名 check(列名 in (...))
30、現有表中創建檢查約束: alter table 表名 ADD constraint 約束名 check(...)
如現有表中數據不符合約束,則約束無法創建成功(規則可以綁定成功,但是對現有數據不起作用規則是一個向後兼容的功能,用於執行一些與CHECK約束相同的功能。CHECK約束是用來限制列值的首選標準方法。CHECK約束比規則更簡明,一個列只能應用一個規則,但是卻可以應用多個CHECK約束。CHECK約束作為CREATE TABLE 語句的一部分進行指定,而規則以單獨的對象創建,然後綁定到列上。)
31、刪除檢查約束:alter table 表名 drop constraint 約束名
32、創建默認約束:create table 表名(列名 類型 constraint 約束名default '默認值')
constraint 約束名可以省略,系統會指定默認約束名稱
33、現有表中創建默約束:alter table 表名 ADD constraint 約束名 default '默認值' for 列名
34、刪除默認約束:alter table 表名 drop constraint 約束名
35、創建外鍵約束:create table 表名(列名 類型 約束,constraint 約束名foreign key (列名,列名) references 父表名 (列名,列名)
36、現有表中添加外鍵約束:alter table 表名 add constraint 約束名 foreign key (列名,列名) references 父表名 (列名,列名)
37、刪除外鍵約束:alter table 表名 drop constraint 約束名
38、表與表之間的三種關係:一對一關係、一對多關係、多對多關係。
39、T-sql的組成部分:數據定義語言、數據控制語言、數據操縱語言
40、數據定義語言:對數據對象(資料庫、表、視圖、索引等)進行創建和管理,create、alter、 drop
41、數據控制語言:用於實現對資料庫中的數據完整性、安全性的控制、grant、revoke
42、數據操縱語言:用於插入、修改、刪除和查詢資料庫中的數據,insert、update、delete、select
43、T-SQL 語句分類:
1.變量說明語句:用來說明變量的命令
2.數據定義語句:用來建立資料庫、數據對象和定義列,大部分是以create開頭的命令
3.數據操縱語句:用來操縱資料庫中數據的命令,如select、insert、update、delete和cursor等
4.數據控制語句:用來控制資料庫組件的存取許可、存取權限等命令,如grant、revoke等
5.流程控制語句:用於設計應用程式流程的語句,如 if while 和 case
6.內嵌函數:說明變量的命令
7.其他命令:嵌於命令中使用的標準函數
44、SQL中的常量:數字常量、字符串常量、日期和時間常量、符號常量
45、數字常量:整數常量、小數常量以及浮點常量(在數字常量的各個位之間不可以加逗號,例如,123,123 浮點常量使用符號e來指定1.5e3,e讀作「乘10的幾次冪」)
46、字符串常量:常在單引號內,字母(大小寫a-Z)、數字(0~9)或者特殊符號(~!@#¥%等)
如果單引號中包含一個嵌入的單引號,可以使用兩個單引號表示嵌入的單引號。
47、日期和時間常量:需要用單引號,SQL規定日期、時間和時間間隔的常量值被指定為日期和時間常量,『1997/09/27』
48、符號常量:出用戶提供的常量外,SQL包含幾個特殊的常量,代表常用的數據值:current_date、current_time、current_timestamp
49、變量:局部變量、全局變量
50、局部變量:是用戶可自定義的變量,作用範圍僅在程序內部。局部變量必須以@開頭,要符合標識符命名規則。
51、聲明局部變量:declare @varailble_name datatype
daclare @someone char(10)
52、為局部變量賦值:select、set
use 資料庫名
declare @局部變量名 nchar(10)
selecte @局部變量名 =列名 from 表名 where 列名=XXX
print @局部變量名
or
decalare @b int
select (set)@b=1
53、為多個局部變量一起賦值:
declare @b int,@C int,....
select(set) @b=1,@c=2...
54、全局變量:SQL server 系統內部事先定義好的變量,不用用戶參與定義,任何程序均可隨時調用。全局變量通常用於存儲一些SQL server的配置設定值和效能統計數據。SQL server一going使用了30多個全局變量。以@@開頭。
55、注釋符:單行注釋(--),多行注釋/*、*/ 快捷鍵(Ctrl+K+C、Ctrl+K+U)
57、運算符:算術運算符、複製運算符、比較運算符、邏輯運算符、位運算符、連接運算符
58、算術運算符:加減乘除(+-*/)餘(%)
59、比較運算符:>、<、=、>=、<=、<>(不等於)、!=、!>、!<
60、比較運算符返回結果:布爾數據類型: TRUE、FALSE及UNKNOWN
61、邏輯運算符:ALL、AND、ANY、BETWEEN、exists、in、like、not、or、some
62、邏輯運算符優先級:NOT>AND>OR
63、位運算符:&(按位AND)、| (按位OR)、^(按位互斥OR,按位異或)、~(按位NOT)
64、位運算符的操作數:整數數據類型或二進位串數據類型(image除外)
65、運算符優先級:
(1)+(正)、-(負)、~(位反)
(2)*(乘)、/(除)、%(取餘)
(3)+(加)、-(減)、+(字符串串聯運算符)
(4)>、<、=、>=、<=、<>(不等於)、!=、!>、!<(比較運算符)
(5)^(按位異或)、|(按位或)、&(按位與)
(6)NOT
(7)AND
(8)ALL、ANY、SOME、BETWEEN、IN、LIKE、EXIST、OR、NOT、AND(邏輯運算符)
(9)=(賦值)
66、通配符:
(1)%(包含零個或更多字符的任意字符)
(2)_(任何單個字符)
(3)[~](指定範圍【a~z】或集合【asdfg】中的任何單個字符)
(4)[^](不屬於指定範圍【^a~z】或集合【^asdfg】的任何單個字符)
67、流程控制語句:BEGIN...AND、WAITFOR、GOTO、WHILE、IF...ELSE、BREAK、RETURN、CONTINUE
68、CASE函數:
CASE input_expression(有效表達式)
WHEN when_expression(同input_expression,數據類型必須一樣,或者是隱性轉換)
THEN result_expression(當input_expression=when_expression取值為true時,返回結果)
[n](佔位符,表示可以使用多個 WHEN...THEN...)
ELSE else_result_expression(當比較運算取值不為true時返回的表達式,如果此參數省略且比較運算取值不為true,CASE將返回NULL值)
END
69、CASE 搜索函數
CASE
WHEN Boolean_Expression
THEN result_expression
[n]
ELSE else_result_expression END
70、WHILE <條件表達式>BEGIN<命令行|程序塊>END
71、WHILE...CONTINUE..BREAK
WHILE <條件表達式>BEGIN<命令行|程序塊>[BREAK][CONTINUE]<命令行|程序塊>END
其中,continue命令可以讓程序跳過continue命令之後的語句,回到while循環的第一行命令。
break命令則讓程序完全跳出循環,結束while命令的執行。
72、RETURN:用於從查詢或過程中無條件退出。return 語句可在任何時候用於從過程、批處理或語句塊中退出。位於RETURN之後的語句不會被執行。
RETURN[整數值] 括號內可以指定一個返回值。如果沒有指定返回值,SQL server系統會根據程序在執行的結果返回一個內定值。
73、GOTO:GOTO命令用來改變程序執行的流程,使程序跳到標識符指定的程序行再繼續往下執行。
GOTO :標識符 標識符需要在其名稱後加上一個『:』
74、WAITFOR:指定觸發器、存儲過程或事務執行的時間、時間間隔或者事件。還可以用來暫時停止程序的執行,直到所設定的等待時間已過才繼續往下執行。
WAITFOR DELAY<『時間』>|TIME<'時間'>
DELAY:用來設置等待的時間,最多可達24小時
TIME:用來設定等待結束的時間點
75、常用命令:
DBCC(database base consistency checker,資料庫一致性檢查程序)、
DBCC CHECKALLOC(檢查指定資料庫的磁碟空間分配結構的一致性)、
DBCC SHOWCONTIG(顯式指定表的數據和索引的碎片信息)、
CHECKPOINT(用於檢查當前工作的資料庫中被更改過的數據頁或日誌頁,並將這些數據從數據緩衝器中強制寫入硬碟)、
DECLARE(用於聲明一個或多個局部變量,遊標變量或表變量)、
PRINT(向客戶端返回一個用戶自定義的信息,即顯示一個字符串,局部變量或全局變量的內容)、PAISERROR(返回錯誤信息的同時返回用戶指定的信息)、
READTEXT(用於讀取text、ntext或者image列中的值,從指定位置開始讀取指定的字符數)、BACKUP(將資料庫內容或者其事務處理日誌備份到存儲介質上)、
RESTORE(將資料庫內容或者其事務處理日誌由存儲介質還原到SQL Server系統中)、SELECT(除查詢之外的功能,給變量賦值,可一次給多個變量賦值)、
SET(僅可一次給一個變量賦值)、
SHUTDOWN(立即停止SQL Server的運行)、
WRITETEXT(允許對數據類型為text、ntext或者image的列進行交互式更新)、
USE(用於在前工作區打開或關閉資料庫)
76、聚合函數:SUM(求和)、AVG(平均值)、MAX(最大值)、MIN(最小值)、COUNT(計數)、DISTINCT(返回一個集合,並從指定集合中刪除重複的元組)
77、HAVING:用來指定組或者聚合的搜索條件,與select一起使用,通常在group by子句中
78、數學函數:數學函數數據類型:整型(int)、實型(real)、浮點型(float)、貨幣型(money)或smallmoney
79、常用數學函數及說明:
ABS(絕對值)
COS(三角餘弦)
COT(三角餘切值)
PI(圓周率)
POWER(乘以指定次方)
RAND(返回0~1之間的隨機float數)
ROUND(將數字四捨五入為指定的長度或精度)
SIGN(返回指定表達式的零0、正號+1、或負號-1)
SIN(三角正弦)
SQUARE(平方)
SQRT(平方根)
TAN(三角正切)
80、字符串函數:數據類型:CHAR、VARCHAR、BINARY、VARBINARY或可以隱式轉換為char或varchar的數據類型。
81、常用的字符串函數及說明:
ASCII(返回表達式最左端字符的ASCII代碼值)、
CHARINDEX(返回字符串中指定表達式的起始位置)、
LEFT(從最左邊開始,取得字符串左邊指定個數的字符)、
LEN(返回指定字符串的字符個數,單雙字節返回相同值)、
REPLACE(將指定的字符串替換為另一指定的字符串)、
REVERSE(返回字符表達式的反轉)、
RIGHT(從右邊開始,取得字符串右邊指定個數的字符)、
STR(返回由數字數據轉換來的字符數據)、STR(float_expression[,length[,decimal]]),總長度,小數點後的位數
SUBSTRING(返回指定個數的字符)、
82、日期和時間函數:
DATEADD:指定日期加上一段時間的基礎上,返回新的datetime
DATEDIFF:返回跨兩個指定日期的日期和時間邊界數,
DATEDIFF(datepart,startdate,enddate)
DATEDIFF(DAY,'2019-6-8',『2019-9-7 』)
GETDATE:返回當前系統日期和時間,無參數,返回29個字符
DAY:返回指定日期中的天的整數
MONTH:返回指定日期中的月份的整數
YEAR:返回指定日期中年份的整數
83、轉換函數:CAST(expression AS data_type)、CONVERT
84、顯性轉換:使用CAST、CONVERT將數值從一種數據類型轉換到另外一種數據類型。
85、隱性轉換:不是用轉換函數,SQL SERVER自動處理某些數據類型的轉換。
86、元數據函數:主要返回與資料庫相關的信息
COL_LENGTH:返回列的定義長度(table,column)
COL_NAME:返回資料庫列的名稱,該列具有相應的表標誌號和列標誌號
DB_NAME:返回資料庫名
OBJECT_ID:返回資料庫對象標識號
87、SELECT
88、WITH子句:用於指定臨時命名的結果集,這些結果集稱為公用表達式。
eg.創建公用表達式,計算Employee數據表中Age欄位中每一年齡員工的數量。
89、SQL數據查詢基礎:select..from..where..group by...having..order by...
90、COMPUTE子句:生成合計作為附加的匯總列出現在結果集的最後。
SELECT...FROM...RODER BY...COMPUTE 聚合函數(包含兩個結果集:1、選擇列表中所有欄位的詳細記錄;2、匯總函數合計的結果)
SELECT...FROM...RODER BY...COMPUTE 聚合函數 BY。。。(查詢結果根據BY後的欄位名稱進行分組)
91、DISYINCT 關鍵字: 去重
92、TOP 關鍵字:限制查詢結果顯示的行數 select top n * from ...
93、Union合併多個查詢結果:兩表合併,不做修改。
94、Union規則:
1、兩個select語句選擇列表中的列數目必須一樣多,對應位置的列的數據類型必須相同或者兼容。
2、列的名字或者別名是由第一個select欲絕選擇列表決定的。
3、可以為每個select都增加一個表示行的數據來源的表達式
4、select into 必須放在第一個 select裡
5、合併操作默認去重,如需返回重複行,必須加ALL關鍵字
6、對於所有select語句的合併操作結果進行排序的ORDER BY子句,必須放到最後一個select裡,但是排序列名必須是第一個select選擇列表中的列名
95、UNION和聯接的區別:
1、合併為上下合併,列的數據類型(相同或者兼容)和數量必須一樣,聯接為 VLOOKUP
2、合併中,行的最大數量為兩表行的『和』,聯接為『乘積』。
96、Union中的自動數據類型轉換
1、文本數據類型:字符長度短的列等於字符長度長的列的長度
2、數據類型:同文本類型,以長為準
97、Union合併不同類型的數據,須藉助數據類型轉換函數。
98、使用UNION合併不同列數的兩個表:補列(添加NULL值)
99、使用UNION進行多表合併:可多達十多個
100、子查詢:嵌套在SELECT、insert、update或delete等語句中的查詢。任何允許使用表達式的地方都可以用子查詢。
101、子查詢語法規則:
1、不能包括compute、for browse
2、如果同時指定top子句,則可能只包括 order by子句
3、子查詢最多嵌套32層,個別可能不會支持32層。
4、任何可以使用表達式的地方都可以使用子查詢,只要他返回的是單個值。
5、如果某張表只出現在子查詢中而不出現在外部查詢中,那麼該表中的列就無法包含在輸出中。
102、子查詢中不允許出現ORDER BY子句,ORDER BY只能用在最外層的查詢塊兒中。
103、嵌套查詢常用關鍵字:運算符、IN、NOT IN、SOME、ANY、ALL、EXIST
104、聯接查詢:水平方向上合併兩個數據集合,並產生一個新的結果集合
1、內部聯接:內連接也叫聯接,最早被稱為普通聯接或者自然聯接。
從結果中刪除其他被連接表中沒有匹配行的所有行。可能會丟失信息。
select..from ... JOIN.. on ...
2、外部聯接:擴充了內連接的功能,保留不匹配的行,分為左向外部聯接、右向外部聯接、完整外部聯接。
左向外聯接:select..from 左表 leftJOIN右表on ....=...
包括 left join子句中指定的左表所有行,如果左表的某一行在右表中沒有匹配行,則關聯的結果集中行中,來自右表的所有選擇列表列均為空值。
右向外連接:select..from 左表 rightJOIN右表on ....=...包含右表所有行,左表不滿足的用NULL值填充
完整外連接:select..from 左表 fullJOIN右表on ...=...
105、交叉聯接:select..from ... cross JOIN ...
沒有where子句限制的話,cross join為笛卡爾積,
第一個表的行數 *第二個表的行數=笛卡爾積結果集的大小
106、視圖
107、存儲過程
sql server 中DateName()函數及DatePart()函數