SQL Server數據庫
1.0 數據庫及數據庫系統
1.1數據庫是什麼
計算機存儲設備有組織的存儲數據庫的地方
1.2 數據庫系統(DBS)
存放在存儲設備的數據集合的管理數據的計算機軟件
1.3 數據庫管理系統(DBMS)
管理數據庫
常見的數據庫(DB) | SQL Server 、 My SQL、 Oracle |
---|
1.4 數據庫的作用
1、存儲大量數據,方便檢索和訪問
2、保持數據信息的一致,完整
3、共享和安全
4、通過組合分析,產生新的有用信息
1.5 應用程序
作用:響應操作並顯示結果,向數據庫請求數據
要求:美觀、操做方便
1.6 注
SQL Server的註釋符 –
SQL Server 不區分大小寫
分隔符 GO
2.0 管理數據庫
2.1 創建數據庫
create database 數據庫名稱
2.2 判斷數據庫是否存在
if exists (select * from sysdatabases where name = '數據庫名')
drop database 數據庫名
2.3 使用數據庫
use 數據庫名稱
注
數據庫:存放數據庫數據和數據庫對象文件
2.4 刪除數據庫
drop database 數據庫名稱
2.5 創建數據表
create table 數據表名稱
(
--字段1 數據類型 屬性 約束,
--字段2 數據類型 屬性 約束,
·· · ·
)
2.6 判斷表是否存在
if exists (select * from sysobjects where id = object_id(N'[表名]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [表名]
if object_id(N'tablename',N'U') is not null
print '表存在'
else
print '表不存在'
2.7 刪除數據表
drop table 數據表名稱
2.8 判斷某表的某字段是否存在
if (not exists(select * from syscolumns where id=object_id('表明') and name='字段名'))
print '字段存在'
else
print '字段不存在'
3.0 SQL Server 數據類型
Character 字符串:
數據類型 | 描述 | 描述 |
---|---|---|
char(n) | 固定長度的字符串。最多 8,000 個字符。 | n |
varchar(n) | 可變長度的字符串。最多 8,000 個字符。 | |
varchar(max) | 可變長度的字符串。最多 1,073,741,824 個字符。 | |
text | 可變長度的字符串。最多 2GB 字符數據。 |
Unicode 字符串:
數據類型 | 描述 | 存儲 |
---|---|---|
nchar(n) | 固定長度的 Unicode 數據。最多 4,000 個字符。 | |
nvarchar(n) | 可變長度的 Unicode 數據。最多 4,000 個字符。 | |
nvarchar(max) | 可變長度的 Unicode 數據。最多 536,870,912 個字符。 | |
ntext | 可變長度的 Unicode 數據。最多 2GB 字符數據。 |
Binary 類型:
數據類型 | 描述 | 存儲 |
---|---|---|
bit | 允許 0、1 或 NULL | |
binary(n) | 固定長度的二進制數據。最多 8,000 字節。 | |
varbinary(n) | 可變長度的二進制數據。最多 8,000 字節。 | |
varbinary(max) | 可變長度的二進制數據。最多 2GB 字節。 | |
image | 可變長度的二進制數據。最多 2GB。 |
Number 類型:
數據類型 | 描述 | 存儲 |
---|---|---|
tinyint | 允許從 0 到 255 的所有數字。 | 1 字節 |
smallint | 允許從 -32,768 到 32,767 的所有數字。 | 2 字節 |
int | 允許從 -2,147,483,648 到 2,147,483,647 的所有數字。 | 4 字節 |
bigint | 允許介於 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之間的所有數字。 | 8 字節 |
decimal(p,s) | 固定精度和比例的數字。允許從 -10^38 +1 到 10^38 -1 之間的數字。p 參數指示可以存儲的最大位數(小數點左側和右側)。p 必須是 1 到 38 之間的值。默認是 18。s 參數指示小數點右側存儲的最大位數。s 必須是 0 到 p 之間的值。默認是 0。 | 5-17 字節 |
numeric(p,s) | 固定精度和比例的數字。允許從 -10^38 +1 到 10^38 -1 之間的數字。p 參數指示可以存儲的最大位數(小數點左側和右側)。p 必須是 1 到 38 之間的值。默認是 18。s 參數指示小數點右側存儲的最大位數。s 必須是 0 到 p 之間的值。默認是 0。 | 5-17 字節 |
smallmoney | 介於 -214,748.3648 和 214,748.3647 之間的貨幣數據。 | 4 字節 |
money | 介於 -922,337,203,685,477.5808 和 922,337,203,685,477.5807 之間的貨幣數據。 | 8 字節 |
float(n) | 從 -1.79E + 308 到 1.79E + 308 的浮動精度數字數據。 參數 n 指示該字段保存 4 字節還是 8 字節。float(24) 保存 4 字節,而 float(53) 保存 8 字節。n 的默認值是 53。 | 4 或 8 字節 |
real | 從 -3.40E + 38 到 3.40E + 38 的浮動精度數字數據。 | 4 字節 |
Date 類型:
數據類型 | 描述 | 存儲 |
---|---|---|
datetime | 從 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度爲 3.33 毫秒。 | 8 bytes |
datetime2 | 從 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度爲 100 納秒。 | 6-8 bytes |
smalldatetime | 從 1900 年 1 月 1 日 到 2079 年 6 月 6 日,精度爲 1 分鐘。 | 4 bytes |
date | 僅存儲日期。從 0001 年 1 月 1 日 到 9999 年 12 月 31 日。 | 3 bytes |
time | 僅存儲時間。精度爲 100 納秒。 | 3-5 bytes |
datetimeoffset | 與 datetime2 相同,外加時區偏移。 | 8-10bytes |
timestamp | 存儲唯一的數字,每當創建或修改某行時,該數字會更新。timestamp 基於內部時鐘,不對應真實時間。每個表只能有一個 timestamp 變量。 |
其他數據類型:
數據類型 | 描述 |
---|---|
sql_variant | 存儲最多 8,000 字節不同數據類型的數據,除了 text、ntext 以及 timestamp。 |
uniqueidentifier | 存儲全局標識符 (GUID)。 |
xml | 存儲 XML 格式化數據。最多 2GB。 |
cursor | 存儲對用於數據庫操作的指針的引用。 |
table | 存儲結果集,供稍後處理。 |
二進制數據類型: image
文本數據類型: char varchar Nchar nvarchar text ntext
日期和時間: date time datetime datetime2 datetimeoffset
4.0 數據完整性
1、實體完整性
2、域完整性
3、引用完整性(參照完整性)
5.0 創建約束
5.1 主鍵約束:
alter table 表名
add constraint 約束名 primary key (字段名) 約束說明
5.2 外鍵約束:
alter table 表名
add constraint 約束名 foreign key 表名 references 表名 (字段名)約束說明
5.3 檢查約束:
alter table 表名
add constraint 約束名 check(範圍)約束說明
5.4 默認約束:
alter table 表名
add constraint 約束名 default (‘默認字符’) for (字段名) 約束說明
5.5 唯一約束:
alter table 表名
add constraint 約束名 unique(字段) 約束說明
5.6 刪除約束:
alter table 表名
drop constraint 約束名
6.0 數據庫操縱語言
6.1 向數據庫中插入數據
--插入單行數據:
insert into 表名 (字段名) values (值)
--插入多行數據:
insert into 表名 (字段1,字段2, ·· · · )
select 值1, 值2, · · · union,
select 值1, 值2, · · · union,
select 值1, 值2, · · ·
6.2 select 查詢
select 字段1,字段2, · · · from 表名 [where 條件]
--或
select * form 表名 [where 條件]
6.3 刪除數據表中的數據
--刪除單條數據:
delete from 表名 [where 條件]
--刪除表中所有數據:
truncate table 表名 -- 執行效率高 有外鍵約束不能使用
4、修改數據表中的數據
update 表名 set 字段名 = 值 [where 條件]
7.0 T-SQL
7.1 T-SQL的組成
數據定義語言:用來建立數據庫,數據庫表和定義其列,大部分都是create開頭
數據操縱語言:例如 select update insert delete 等
數據控制語言:例如 grant revoke 等
流程控制語言:用於設計應用程序的語句 例如 if where case 等
7.2 T-SQL的運算符和表達式
1、常量
由一個或多個字符(‘a‘,‘abc‘)數字或符號組成
注 字符和日期需要用單引號括起來,二進制字符和數字不需要
2、列名(字段名): 數據表中列的名稱
7.3 SQL算術運算符:
操作符 | 描述 | 例子 |
---|---|---|
+ | 加法 -添加任一側上的操作符的值 | a + b 得到 30 |
- | 減法 - 從左邊減去右邊操作數的操作 | a - b 得到 -10 |
* | 乘法 - 操作符兩側的值相乘 | a * b 得到 200 |
/ | 除 - 將左邊除右邊的操作數(取模) | b / a 得到 2 |
% | 模量 - 將左邊用右手操作,並返回操作數的餘數 | b % a 得到 0 |
7.4 SQL比較操作符:
操作符 | 描述 | 例子 |
---|---|---|
= | 檢查如果兩個操作數的值是相等或不相等,如果是的話,條件爲真。 | (a = b) is not true |
!= | 檢查如果兩個操作數的值是否相等,如果值不相等,則條件爲真。 | (a != b) is true |
<> | 檢查如果兩個操作數的值是否相等,如果值不相等,則條件爲真。 | (a <> b) is true |
> | 檢查值,如果左操作數大於右操作數的值,如果是的話,條件爲真。 | (a > b) is not true |
< | 檢查如果左操作數的值小於右操作數的值,如果是的話,條件爲真。 | (a < b) is true |
>= | 檢查如果左操作數的值大於或等於右操作數的值,如果是的話,條件爲真。 | (a >= b) is not true |
<= | 檢查如果左操作數的值小於或等於右操作數的值,如果是的話,條件爲真。 | (a <= b) is true |
!< | 檢查如果左操作數的值不小於右操作數的值,如果是的話,條件爲真。 | (a !< b) is false |
!> | 檢查如果左操作數的值是不大於右操作數的值,如果是的話,條件爲真。 | (a !> b) is true |
7.5 SQL邏輯運算符:
運算符 | 描述 |
---|---|
ALL | 所有運算符用於比較的值到另一個值組中的所有值。 |
AND | AND運算符允許多個條件的存在,在一個SQL語句中的WHERE子句。 |
ANY ANY | 運算符用於比較的值在列表中根據任何適用的條件。 |
BETWEEN | BETWEEN運算符用於搜索一組值的範圍內的值,給定的最小值和最大值。 |
EXISTS | 存在指定的表中符合特定條件的運算符用於搜索存在的一行記錄。 |
IN | IN操作符用來比較的文字值已指定一個值的列表。 |
LIKE | LIKE運算符用於比較相似的值,使用通配符的值。 |
NOT | NOT運算符的含義相反的邏輯運算符,它被使用如 NOT EXISTS, NOT BETWEEN, NOT IN 等,這是一個相反的運算符。 |
OR | 使用OR運算符結合SQL語句的WHERE子句中的多個條件。 |
IS NULL | NULL操作符用來比較NULL的值。 |
UNIQUE | 獨特的操作符搜索指定的表中的每一行的唯一性(不重複)。 |
7.6 SQL 中的通配符:
通配符 | 描述 |
---|---|
% | 包含零個或多更多字符的任意字符串 |
_ | 僅替代一個字符(任何單個字符) |
[] | 指定範圍(例如[a-f])或集合(例如[1,3,5,7])內的任意單個字符 |
[^] | 不在指定範圍(例如[a-f])或集合(例如[abcdef])內的任意單個字符 |
注:使用時通配符和字符串要用單引號括起來
8.0 爲字段設置別名(三種)
原字段名 as 字段別名
字段別名 = 原字段名
原字段名 字段別名
9.0 數據操縱
9.1 計算字段
select 字段名 + ‘-’+ 字段名 as ‘別名’
9.2 ALL關鍵字返回全部記錄
select all 字段1,字段2, · · · from 表名
9.3 DISTINCT關鍵字過濾重複記錄
select distinct 字段名 from 表名
9.4 TOP顯示前面若干條記錄
select top n 字段名 from 表名
9.5、範圍運算符
between · · · and · · ·
not Between · · · and · · ·
--eg: select 字段名 from where 字段名 between n and n
9.6、對查詢的結果進行排序( order by 子句)(ASC 升序 / DESC 降序)
--單行 eg:
select * from 表名 where 條件
order by 字段名 排序方式
--多行 eg:
select * from 表名 where 條件
order by 字段名 排序方式, 字段名 排序方式
--order by 子句 與 top 關鍵字一起使用
select top [n] * from 表名 where 條件
order by 字段名 排序方式
9.7 對查詢結果計算
--1、使用SUM函數計算字段的累加和
select SUM(字段名) 字段別名 from 表名 where 條件
--2、使用AVG函數計算字段的平均值
select AVG(字段名) 字段別名 from 表名 where 條件
--3、使用MAX和MIN函數計算字段的最大值和最小值
select MAX(字段名) 字段別名, MIN(字段名) 字段別名 from 表名
--4、使用COUNT函數統計記錄行數
select COUNT(*) 字段別名 from 表名
9.8 查詢結果分組
--使用 group by 子句
--eg:
select 字段名 AS 字段別名 , COUNT(*) AS 別名 from 表名 group by 字段名
--注:
--字段列表中的每個字段必須在 group by 子句中出現或者用在某個聚合函數中
10.0 聯表查詢
--1、內部鏈接基本語法
select 字段列表 from 表1 inner join 表2 on 條件表達式
--2、更復雜的聯接基本語法
select 字段列表 from 表1 inner join 表2 on 條件表達式1 inner join 表3 條件表達式2 · · ·
--3、外部聯接查詢
--外部聯接分爲左外部聯接(left outer join)和右外部聯接(right outer join)兩種
--主表在join左邊則爲左外部聯接,主表在join右邊則爲右外部聯接
--基本語法:
select 字段列表 from 表1<left/right>[outer] join 表2 條件表達式
--4、交叉聯接基本語法(cross join)
select count(*) 字段別名 from 表1 cross join 表2
11.0 集合運算
--1、使用UNION和UNION ALL進行並集運算
--eg:
select 字段列表 from 表名 where 條件1
union (union all)
select 字段列表 from 表名 where 條件2
--注:
union 不允許有重複值,union all 允許有重複值
union 返回值的結果集的標題僅從第一個查詢獲得
--2、使用 INTERSECT進行交集運算
--eg:
select 字段列表 from 表名 where 條件1
intersect
select 字段列表 from 表名 where 條件2
--3、使用EXCEPT進行減集運算
--eg:
select 字段列表 from 表名 where 條件1
except
select 字段列表 from 表名 where 條件2