MS 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, ·· · · )
select1,2, · · · union,
select1,2, · · · union,
select1,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 字段列表 from1 inner join2 on 條件表達式

--2、更復雜的聯接基本語法
select 字段列表 from1 inner join2 on 條件表達式1 inner join3 條件表達式2 · · ·

--3、外部聯接查詢
--外部聯接分爲左外部聯接(left outer join)和右外部聯接(right outer join)兩種
--主表在join左邊則爲左外部聯接,主表在join右邊則爲右外部聯接
--基本語法:
select 字段列表 from1<left/right>[outer] join2 條件表達式

--4、交叉聯接基本語法(cross join)
select count(*) 字段別名 from1 cross join2
11.0 集合運算
--1、使用UNION和UNION ALL進行並集運算
--eg:
select 字段列表 from 表名 where 條件1
	unionunion allselect 字段列表 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章